Menu

第12回 簡単なゲームの作成5


 今回は、画面の上の方を左右に移動する敵を追いかけながら、弾を打ち、敵を撃ち落とすゲームを作ろう。
弾は真直ぐにだけ進み、敵に当るか、当らずに通り過ぎるまで、1発ずつしか打てないものとするよ。つまり連射はできないようにするよ。自らは、キーボードの矢印キー(←)(→)を使って左右に動かすよ。弾は、スペースキーを押すと1発発射されるよ。前にも作った「当たり判定」を使った発射した弾と敵がぶつかるかどうかを判断するよ。
それでは、プログラムを少しずつ、入力していこう。

10行目から100行目までのプログラム
10 CLS:CLP:X=14:Y=17:F=0:T=100:H=1
20 LOCATE X, Y:PRINT CHR$(32,240,32)
30 K=INKEY()
40 IF K=28 AND X>0 THEN X=X-1
50 IF K=29 AND X<30 THEN X=X+1
60 IF k=32 AND F=0 THEN F=1:C=X+1:B=Y-1
70 IF F=0 THEN GOTO 120
80 LOCATE C,B:PRINT CHR$(242)
90 LOCATE C,B+1:PRINT " "
100 B=B-1

[プログラムの説明]
10 画面をクリアして、表示するキャラクタの情報を初期化している(CLP)。そして、最初の自分の位置Xを左から15番目、上から何行目かの位置Yを17行目の位置にしているよ。また、弾を打った後、次の弾が打てるかどうかを判断する値Fを最初は0(未発射)にしておくよ。1回発射したら、1(発射済み)とするよ。敵が左から何番目かの位置の10倍Tを最初は100に設定するよ。敵の移動方向と移動距離Hを1にしておくよ。
20 自分を表示しているよ。左右に空白(32)を入れることで自分の表示と1回前の自分の消去をしているよ。
30 押されたキーの番号をKにセットするよ。
40 もし、28番のキー(つまり左向きの矢印(←))が押された場合で、Xが0より大きいとき、ひとつだけ、左に板を移動する。
50 もし、29番のキー(つまり右向きの矢印(→))が押された場合で、Xが29より小さいとき、ひとつだけ、右に板を移動する。
60 もし、32番のキー(つまりスペースキー)が押された場合で、F=0(つまり、弾が未発射)のとき、F=1(発射済み)にして、弾の位置を現在の自分の位置のひとつ右、一行上にしている。
70 もし、弾が未発射だったら、120行目に飛ぶ。
80 弾を表示しているよ。
90 1回前の弾を消しているよ。
100 弾の位置を1行上にしている。

110行目から160行目までのプログラム
110 IF B<-1 THEN F=0
120 LOCATE T/10, 2:PRINT CHR$(32,241,32)
130 IF F=1 AND B=1 AND C=T/10+1 THEN LOCATE C,2:PRINT CHR$(244,13):PRINT "ATARI":END
140 T=T+H
150 IF T>290 OR T<10 THEN H=-H
160 GOTO 20

[プログラムの説明]
110 もし、弾が外れて、画面の一番上まで行ったら、F=0(未発射)にして次の弾が打てるようにするよ。
120 現在の敵の位置に敵を表示するよ。
130 ここで「敵」と「弾」の「当たり判定」をしているよ。弾が発射済みで、弾の位置と敵の位置が一致したら、爆発の表示をして「ATARI」と表示してゲームを終了するよ。
140 当らなかった時、敵の位置を移動している。
150 もし、画面の端に敵がぶつかってしまったら、移動方向を変えている。
160 20行目に飛ぶよ。

敵の移動する速さや、弾の進む速さを変えてみよう。

今回のゲームも「みんなのIchigojam入門」(リックテレコム)の中に載っている。「簡単なシューティングゲーム」を参考にしたよ。面白いゲームを提供してくれている古籏一浩さんに感謝します。