Menu

第10回 簡単なゲームの作成3


今回は、画面の上方から続けて落ちてくる物体を、キーボードの左右の矢印キー(←)(→)を使って避け続けるゲームを作ってみよう。物体にぶつかってしまうまでに避けた物体の数が得点になるようにプログラムを組むよ。
今回、SCROLL(スクロール)という命令を使うよ。これは、ゲームで良く使う命令で、画面全体を1行分だけ、下に移動することができる命令だよ。
それでは、プログラムを少しずつ、入力していこう。

10行目から70行目のプログラム
10 CLS:CLP:X=14:Y=23:W=100:S=0
20 SCROLL 2
30 C=SCR(X,Y)
40 LOCATE X, Y:PRINT CHR$(#F0);
50 LOCATE RND(30), 0: PRINT CHR$(#E9)
60 K=INKEY():X=X-(K=28 AND X>0)+(K=29 AND X<28)
70 S=S+1

[プログラムの説明]
10 画面をクリアして、表示するキャラクタの情報を初期化している(CLP)。そしてプレイヤーの自分の最初の横方向の位置を真ん中(X=14)に、縦方向の位置を一番下(Y=23)に設定している。待ち時間の最初の設定を100(W=100)に、最初の状態の得点を0(S=0)に設定している。
20 このSCROLL(スクロール)の命令で、画面全体を1行下に移動しているよ。
30 SCR( )という命令は、左からX番目、上からY番目(つまり今、自分がいる位置)の文字のコードを読み込む命令だよ。この文字コードが上から落ちてくる物体の文字コードと同じかどうかで、後で当たり判定をするよ。
40 今、自分がいる位置(X, Y)の位置に自分を表すキャラクタ(#F0)を表示する。
50 不規則な数(0~29)を作って、左からその数の位置に新しく落ちてくる物体を表示する。
60 キーボードから入力されたキー(左向き←:28番、右向き→:29番)に応じて、自分を一つだけ、右や左に移動する。
70 この行まで来たということは、ひとつ物体を避けることができたことになるので、得点に1を加えているよ。

80行目から140行目のプログラム
80 CLK
90 WAIT W/10
100 W=W-1: IF W<3 THEN W=2
110 IF C<>233 THEN GOTO 20
120 LOCATE X, Y:PRINT CHR$(#F4);
130 LOCATE 11, 13: PRINT "OWARI"
140 PRINT S;:PRINT " TEN"

[プログラムの説明]
80 それまでに入力されたキーの情報をクリアしている。
90 待ち時間を設定している。最初はWAITを長めにして、ゆっくりとスクロールするようにしている。
100 この行を通るたびに、待ち時間を減らしているよ、ゲームが進行していくと、だんだんと物体が落ちてくる時間が早くなってくるようにしているんだ。ただ、2よりは小さくならないようにしているよ。
110 この行が今回の「当たり判定」だよ。今いる場所の文字コードが落ちてくる物体と違う場合は、20行目に戻るようになっている。もし、違わない場合(つまり落ちてくる物体と同じ:すなわち物体とぶつかってしまった)は120行目以降に進んで「終わり」の処理に入っていくよ。
120 今の自分の位置に「クラッシュ(ぶつかって壊れた)」のキャラクタを表示する。
130 左から11番目、上から13番目の位置に「OWARI」と表示してゲームの「終わり」を表示するよ。
140 ぶつからずに避けた物体の数を得点「○TEN(点)」として表示するよ。

このようにして避けることができた物体の数を競うゲームだよ。

今回のゲームは「みんなのIchigojam入門」(リックテレコム)の中に載っている。「隕石避けゲーム」を参考にしたよ。面白いゲームを提供してくれている古籏一浩さんに感謝します。