IchigoJamで「ごはんキャッチゲーム」を作る、の最終回
前回までで、プレイヤーを操作して降ってくる ”ごはん” をキャッチする、という最低限のゲームの形を作りました。
今回は、さらに手を加えて、よりゲームらしく仕上げていきたいと思います。
>> 前回(第2回)の記事はこちら
10 CLS
20 X=15
30 U=RND(31):V=-1
100 IF BTN(28) AND X>0 X=X-1
110 IF BTN(29) AND X<31 X=X+1
120 IF V>20 END
130 IF V=20 AND U=X V=-1:U=RND(31)
140 V=V+1
200 CLS
210 LC X,20:?CHR$(236)
220 LC U,V:?CHR$(235)
240 WAIT 3:GOTO100
効果音を鳴らす
まずは、効果音を追加しましょう。
音を鳴らすには BEEP コマンドを使います。
前回作ったプログラムの 120行と130行を下記のように修正します。
※赤字が修正(追加)した部分です。
120 IF V>20 BEEP30,30:END
130 IF V=20 AND U=X BEEP3,5:V=-1:U=RND(31)
効果音を追加した箇所の解説
120行:ゲームオーバー時
120行は、変数 V(”ごはん”のY位置)の値が 20 を超えた時、
すなわち ”ごはん” を取り損ねてゲームオーバーになった時に、音を鳴らすように設定しています。
130行:ごはんキャッチ時
130行は、プレイヤーがごはんをキャッチした時に、音を鳴らすように設定しています。
音の設定
BEEPコマンドの設定は下記のとおり
BEEP 数1, 数2
- 数1:音の高さ(数が大きいほど低い音になる)
- 数2:音の長さ(数が大きいほど長い音になる)
以上より、今回下記プログラムで設定した音は
120 IF V>20 BEEP30,30:END
130 IF V=20 AND U=X BEEP3,5:V=-1:U=RND(31)
- 120行:低くて、長い音
- 130行:高くて、短い音
ということになります。
スコアの導入
次は、ゲーム性を持たせる為に、スコア(点数)を導入しましょう。
スコア用の変数
スコアは増やせるように変数にします、
下記のように、40行で変数を初期化します。
ゲームスタート時は0点から始まるように、0を代入しておきます。
40 S=0
変数名は Score(スコア) の S にしましたが
これは好きに決めてOKです
スコアを増やす処理
”ごはん” をキャッチした時にスコアが増えるようにします
ごはんをキャッチしたかどうか判定しているのは 130行 なので
130行に下記のように「変数Sに1を足す」処理を追加します。
130 IF V=20 AND U=X BEEP3,5:V=-1:U=RND(31):S=S+1
スコアを表示する
設定したスコアを画面に表示させます。
下記のように 230行 を追加します。
230 LC 0,0:?"SCORE:";S
この行でやっていることは
LC 0,0
で画面左上に位置を指定したうえで
?"SCORE:";S
でスコアの表示をしています。
ここでは セミコロン (;) を使って、 “SOCRE:” と 変数S 値を連結して表示するようにしています。
実行すると左上に下記のような表示がされると思います。
ゲームオーバー表示
最後にゲームオーバー時の表示を設定します。
下記のように120行を修正して、250行と260行を追加します。
120 IF V>20 BEEP30,30:GOTO 250
:
250 LC 11,10:?"GAME OVER"
260 END
120行:ごはんを取り損ねた時
ごはんを取り損ねた時、修正前はいきなりプログラムを終了させるようになっていましたが
修正後は 250行へ飛ぶようにしています。
250行:GAME OVER 表示
120行から飛んできた先の250行では
“GAME OVER” の表示をしています。
この際、LC 11,10 で表示位置を画面の中央付近に設定しています。
260行:処理終了
最後の260行は、END コマンドで処理を終了しています。
今回作成したプログラム
最後に、今回作成したプログラムの全体を載せておきます。
10 CLS
20 X=15
30 U=RND(31):V=-1
40 S=0
100 IF BTN(28) AND X>0 X=X-1
110 IF BTN(29) AND X<31 X=X+1
120 IF V>20 BEEP30,30:GOTO 250
130 IF V=20 AND U=X BEEP3,5:V=-1:U=RND(31):S=S+1
140 V=V+1
200 CLS
210 LC X,20:?CHR$(236)
220 LC U,V:?CHR$(235)
230 LC 0,0:?"SCORE:";S
240 WAIT 3:GOTO100
250 LC 11,10:?"GAME OVER"
260 END
コメント