プチコン3号でフラッピーバードを作る

完成写真はこちら
zlCfzS76gZMwYmBrFS

背景とかなくて寂しいけど、まあいいやん

この記事ではプチコン3号にある程度慣れてきたけど、ゲームの作り方が分からないという方のために、
フラッピーバードもどきを作る過程を通してゲーム作りの基本を学ぼうというものです。

 

まずは完成版をダウンロードして遊んでみよう

公開キーはこちらです「NKSNVXDY」
Aボタンでジャンプして間をくぐり抜けます。
ジャンプに重力がかかっているのが分かると思います。(ほっとくと落ちる早さが早くなるなど)
この重力はVerlet法とかいうやつで実装してみました。
この記事ではメニュー画面の作り方の説明は省略します。ゲーム部分のみを説明します。

 

スプライトを表示する

スプライトとは画像をプログラムで扱いやすくしたもののことです。
スプライトとして扱うことで移動やアニメーション、当たり判定が簡単に行えます。
スプライトを表示する前にACLS命令で画面を綺麗にします。
はかせのスプライトを表示してみましょう。
はかせのスプライトはデフォルトで3480番に登録されています。
SPSET 0,3480
0というのは管理番号です。これからはかせを扱う時に指定します。
これで表示できます。しかし左上に少し隠れて表示されましたよね?
SPSETでは座標0,0に表示します。なので左上になってしまいます。(上画面の場合左上が0,0右下が400,240)
でははかせの位置を調整してみます。

これで座標100,120にはかせを表示させることができました。

 

メインループを作る

スプライトを表示するだけのプログラムは一瞬で終わってしまいます。
そこで無限ループさせてプログラムが終了しないようにする必要があります。
無限ループの作り方はいくつかありますが、WHILE 1 ~ WENDがオススメです。
WHILEは条件式がTrueの場合ループするという命令です。ここでは詳しいことは説明しません。WHILE 1とするとWENDまでの部分が無限ループできます。
無限ループはセレクトボタンでプログラムを終了することにより抜けれます。

WHILE 1

WEND
次にこのままでは高速でループするのでVSINCという命令を入れます。

VSINC 1とすることで、60fpsの状態(1秒間に60回ループ)にすることができます。
またGOSUBなどを用いてメインループ内はできるだけ記述を少なくするのが、プログラムを綺麗に書くポイントです。

 

Aボタンでジャンプできるようにする

まず、サブルーチンを使ってメインループをは別のところに処理を書くようにします。見やすくなります。

@PLAYER内にボタン入力判定を書きます。
BUTTON()を使います。BUTTON(2)で長押しを無視するようにできます。Bという変数に入れるといろいろ便利です。
B=BUTTON(2) ボタン情報を取得
Aボタンが押された場合、IF-ENDIFで囲まれた部分を実行する
ENDIF

実行する部分にPRINT “A PRESSED”などを入れてみて動作確認してみてください。

重力とジャンプについて考えます。ベクトルで考えます。
毎フレーム下方向に0.1の重力が加算される、Aボタンが押されると上方向にジャンプ力10が加算される。
プレイヤーのY座標を変数にして毎フレームSPOFSを使って変数によって移動するようにする。

 

障害物と当たり判定とスコア計算入れて完成!!

ごめんなさい、書くのめんどくさくなってしまいました。
当たり判定はSPCOLとSPHITSPのヘルプ見てください。障害物生成のアルゴリズム文字だけだと説明しづらいんで頑張ってください。スコア計算はゲーム開始から何フレーム経過したかで計算しました。
完成形のコードはこちらです。