前回から引き続きIchigoJamで「ごはんキャッチゲーム」を作っていきます
前回は、プレイヤーキャラを操作できるようにしました。
今回は、プレイヤーがキャッチする「ごはん」を降らせる処理と、キャッチの処理を作っていきます。
>> 前回(第1回)の記事はこちら
ごはんを降らせる
では、”ごはん” を画面の上から下に降らせる処理を書いていきます。
前回書いたプログラムに、下記のように赤文字の行を追加します。
10 CLS
20 X=15
30 U=15:V=-1
100 IF BTN(28) AND X>0 X=X-1
110 IF BTN(29) AND X<31 X=X+1
140 V=V+1
200 CLS
210 LC X,20:?CHR$(236)
220 LC U,V:?CHR$(235)
240 GOTO100
追加した行が何をしているのかを説明していきます
初期位置の設定
下記の行で、ごはんの初期位置を設定しています。
変数 U が横位置、V が縦位置です。
30 U=15:V=-1
縦位置を -1 にすると無表示になります。
つまり、スタートした瞬間ごはんは表示されず、その後表示位置が更新されることで表示されるという動きになります。
位置の更新
下記の行では、変数 V の値を1増やしています。
IchigoJam の縦位置は、値が増えるほど画面の下に行きますので
ごはんの位置が下方向に向かうように位置更新していることになります。
140 V=V+1
ごはんの表示
下記の行で、変数 U と V を使って ”ごはん” を表示させています。
220 LC U,V:?CHR$(235)
CHR$(235) はキャラクター表示で、キャラクター235番は下表のように ”おにぎり” です。
ここまでの動き
F5キー を押してプログラムを実行すると
画面の上から ”ごはん” が落ちてくると思います。
しかし、画面の下まで行くと画面表示がおかしくなってしまうと思います。
これは、画面の下側まで行った時にどうするか?という指示をまだ書いていない為です。
次はその「画面の下側まで行った時の処理」を書いていきます。
ごはんをキャッチした場合とできなかった場合
下記のように、ごはんをキャッチできなかった場合 or できた場合
の処理を120行と130行に追加します。
10 CLS
20 X=15
30 U=15: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
140 V=V+1
200 CLS
210 LC X,20:?CHR$(236)
220 LC U,V:?CHR$(235)
240 GOTO100
キャッチできなかった場合
下記の行はキャッチできなかった場合の処理になります
120 IF V>20 END
変数 V の値、つまり ”ごはん” の縦位置が 20 を超えたらプログラムを終了する。という意味になります
プレイヤーの縦位置が 20 なので「プレイヤーを通り過ぎたら」と言い換えることもできます。
キャッチした場合
キャッチした場合の処理は下記の行です。
130 IF V=20 AND U=X V=-1
キャッチした条件 (V=20 AND U=X) を満たした時
変数 V の値つまり ”ごはん” の縦位置を -1(初期位置)にする。
という命令です。
では V=20 AND U=X という条件はどのような状態なのか?
以下の具体例で確認してみましょう
このように、”プレイヤー” と ”ごはん” の位置が「完全に重なった時」を意味しています。
動作の確認
では、F5キー を押してここまでのプログラムを実行してみましょう。
プレイヤーがごはんをキャッチした時は、上から再度ごはんが降ってきて
ごはんをキャッチできなかった時は、プログラムが終了する
という動きになっていると思います。
しかしながら、毎回同じ場所からごはんが降ってくるため
ゲームとしては何の面白さもありません。
そこで次は、ごはんが色々な場所から降ってくるようにしていきましょう。
ごはんの位置をランダムに決める
ごはんを色々な位置から落とす為に
プログラムの赤字箇所を、下記のように書き換えます。
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 GOTO100
RND()を使ってランダムな位置設定
下記では、ごはんの横位置である 変数U の初期値を
RND() コマンドを使って設定しています。
30 U=RND(31):V=-1
RND(31) と書いた場合、0から30(31未満)のランダムな数を返してくれます
これによってランダムな横位置でごはんが降ってくることになります。
下記の行も同じく、プレイヤーがごはんを取った時に、次の出現位置がランダムで決まるようになります。
130 IF V=20 AND U=X V=-1:U=RND(31)
動作の確認
ではここでも、F5キー を押してプログラムを実行し、確認しておきましょう。
ちゃんと色々な位置からごはんが降ってきていれば成功です。
ただ、ごはんの落下速度が速すぎて、中々キャッチできないのでは無いかと思います。
そこで次はこの速度を調整してみたいと思います。
速度の調整
ゲームの速度を遅くするために、下記のように240行のGOTOの前に WAIT 3 を追加しましょう
240 WAIT 3:GOTO100
これは、GOTOで100行目に飛ぶ前に、3/60秒待つ という命令です。
ここでは WAIT 3 としていますが、この数字は各自調整してみてください
この数字が大きくなるほどゲームの速度は遅くなります。
動作の確認
それでは、F5キー を押してプログラムを実行してみましょう。
先ほどよりも速度が遅くなって、ごはんをキャッチしやすくなっているのではないでしょうか。
今回作ったプログラム
これで、”ごはん” を降らせてキャッチする。という基本的なゲーム部分のプログラムは完成です。
次回は、ゲームとしてもう少し面白くなるように仕上げを行っていきます。
最後に今回書いたプログラム全体を載せておきます。
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
コメント