Menu

第11回 簡単なゲームの作成4


今回は斜めに落ちてくるボール「●」を板ではね返すゲームを作ってみよう。
板は、キーボードの左右の矢印キー(←)(→)を使って動かすよ。これは前回と同じだ。今回のボールは壁に当るとはね返ってくるよ。板に上手く当たるとはね返すことができるんだ。
それでは、プログラムを少しずつ、入力していこう。

10行目から100行目のプログラム
10 CLS:CLP:X=21:Y=18:B=0:C=0:D=1:E=80:F=1
20 LOCATE X-1, Y:PRINT CHR$(32,131,131,131,32);
30 K=INKEY()
40 IF K=28 AND X>0 THEN X=X-1
50 IF K=29 AND X<29 THEN X=X+1
60 F=F+1:IF F%2=0 THEN GOTO 20
70 LOCATE B,C/100:PRINT " ";
80 B=B+D
90 C=C+E
100 LOCATE B,C/100:PRINT CHR$(#E8);

[プログラムの説明]
10 画面をクリアして、表示するキャラクタの情報を初期化している(CLP)。そして最初の板の位置をやや右寄り(X=21)に、縦方向の位置を上から19行目(Y=18)に設定している。ボールの最初の位置を一番左上の角(B=0、C=0)に設定している。Dは横方向のボールの移動量(D=1)の設定、Eは縦方向の移動量(実際には100で割っているよ。)の設定だよ。Fは、ボールと板を動かすタイミングの調整で、実際には板が2回動くのに対してに一度だけボールを動かすことができるよう後で設定するようになっているよ。
20 ここでは板を表示しているよ。
30 キーボードのどのキーが押されたか読み込んでいるよ。
40 もし、28番のキー(つまり左向きの矢印(←))が押された場合で、Xが0より大きいとき、ひとつだけ、左に板を移動する。
50 もし、29番のキー(つまり右向きの矢印(→)が押された場合で、Xが29より小さいとき、ひとつだけ、右に板を移動する。
60 ここで、板が2回動くのに対して一度だけボールが動くように調整しているよ。
70 1回前のボールを消している。
80 ボールを新しい位置に横方向に一つ移動している。
90 ボールを新しい位置に縦方向に80/100移動している。
100 新しい位置にボール(#E8)「●」を表示する。

110行目から160行目のプログラム
110 IF B<0 OR B=29 THEN D=-D
120 IF C<0 THEN E=-E
130 T=C/100
140 IF (T=Y-1 OR T=Y) AND (B>=X AND B<=X+2) THEN E=-80+RND(11)
150 IF T<22 THEN GOTO 20
160 LOCATE 12,9:PRINT "OWARI"

[プログラムの説明]
110 ここでは、ボールが左右の壁のところまで来たら、横方向の移動の向きを変えている。
120 ここでは、ボールが上の壁のところまで来たら、縦方向の移動の向きを変えている。
130 縦方向の移動量を100で割って調整している。
140 ここで、ボールと板の「当たり判定」をしている。当ったら、ボールをはね返すのだけど、はね返すときに不規則な数(RND(11))を使って、はね返る方向を微妙に変えている。
150 ボールが板の下まで来たかどうかを見ている。板の下に来ていない(つまり140行目の「当たり判定」で「当たり」と判定されて移動量の向きが変わってT<22の)ときは、20行目に戻る。
160 ボールが板に当らずに、板の下に来てしまったので、「OWARI」と表示してゲームを終了する。

ボールの移動する速さや、板を移動する速さを変えてみて、ゲームをさらに面白くしてみよう。余裕がある人は、ボールを2つにして、さらにゲームを難しくしてみよう。

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