人生一度はやってみよう MSX Basic 入門
15.カタツムリ散歩ゲームを作ろう(完)
[ 14.カタツムリ散歩ゲームを作ろう その3 ] の続きです。
前回はキャラクターの色を変えたり、橋を操作できるようにしました。
いよいよスプライトを操作してカタツムリを動かします。
そして完成させましょう。
カタツムリを移動させよう
カタツムリを移動させる仕組みを作ります。
右から左へ1ドットずつ移動させ、左端まで来たら右端から出てくるようにします。
今はまだ穴や橋の存在を無視します。
なお、行番号が飛び飛びになっています。注意してください。
90 FOR I=0 TO 0
行番号90から170までを 0 から 0 まで繰り返します。
つまり、実際には繰り返さずに一回だけ実行されます。
配列変数を使って、複数のカタツムリを動かすつもりです。
そのため FOR 文で繰り返すようにしますが、まずは一個だけ動かして仕組みが分かりやすいようにします。
100 E(I)=E(I) - 1
配列変数E(I)はカタツムリのx座標に使っています。
-1 することで左に移動させます。
110 IF E(I)<-15 THEN E(I) = 255
カタツムリが左端まできて隠れたら、右端から登場させます。
行番号160 はスプライトの表示です。
変数Iをそのままスプライト面番号に使っています。
移動処理はできました。
つぎはカタツムリの座標を配列変数に用意します。
スプライトをテスト表示していた行番号420 は消してください。
4つ分のデータを用意しました。
配列変数E( )はx座標、F( )はy座標に使います。
G( )は道の場所です。0は一番上の道、1は真ん中、2は一番下です。
一番下の道にはカタツムリを2つ表示する予定です。
実行してみます。
一番上の道をカタツムリが右から左へ移動します。
穴の対応をしていないので、ただ移動するだけです。
穴と橋の処理を作ろう
カタツムリが穴まで来たとき橋があれば通過し、無ければ落ちる処理を作ります。
プログラムをシンプルにするため、穴に落ちたらゲームオーバーにします。
ゲームオーバーかどうか判別する変数GEを用意しましょう。
さぁ、ちょっと追加行が多いです。
橋があれば通過し、無ければ穴に落ちる処理です。
橋はあるのか無いのかの判定は、行番号 120 と 130 で行なっています。
まず、x座標E(I)を調べて穴をチェックします。
穴まで来たら、橋があるかどうかの判定をします。
あれば GOSUB 211 へ、無ければカタツムリを下にずらし、ゲームオーバー変数に1をセットします。
なお、ここではゲームオーバー処理へジャンプさせません。
理由は FOR 文の中だからです。基本的に FOR の中からジャンプさせると不具合が発生します。
GOSUB は処理が戻ってくるので使えます。
それから、カタツムリが下がった表示(行番号160)をするためでもあります。
190 IF GE=1 THEN 215
ゲームオーバー変数が 1 ならばゲームオーバー処理へジャンプします。
212 LOCATE 8+X*12, Y*6+2 : PRINT"Good"
橋の添え字XとYを使って Good を表示する座標を算出します。
行番号215 以降はゲームオーバー処理です。
行番号217 から 219 までは終了キーの受け待ちです。
実行してみます。
橋があれば渡り、無ければ落ちるようになりました。
Good を消そう
Good を消す処理を入れます。
消すタイミングはカタツムリの座標を使います。
x座標 175 で Good を表示し、167 で消します。
つまり、カタツムリが8ドット進んだら消えるようになっています。
左側は、78 で表示し 70 で消しています。
ところで行番号の並びがヒドイ状態です。
ここで RENUM をしておきましょう。
スコアを表示しよう
ゲームですからスコアを表示します。
スコア用の変数SCを用意します。
それから、画面左下に SCORE の文字を表示しましょう。
SCORE のあとに 0 の表示と謎のスペースがあります。
この 0 はただの初期表示で、ゲーム中に書き換えます。
謎のスペースはゲームをリトライしたとき、表示されているスコアを消すためのものです。
行の最後のセミコロン;は忘れないように注意しましょう。
忘れると画面がスクロールしちゃいます。
つぎは、スコアの加算と表示をします。
得点はカタツムリが橋を渡ったときにします。つまり Good を表示しているサブルーチンの中ですね。
ここでも行の最後のセミコロンは忘れずに付けます。
y座標23に表示するとき、スクロールさせないのであればセミコロンは必要です。
実行してみます。
橋を渡ったとき、100点加算されるか確認しましょう。
リトライできるようにしよう
ゲームオーバーになったら、もう一度遊べるようにします。
Retry (Y/N) のメッセージを表示します。
Nキーによる終了処理はすでにあるので、Yキーのリトライのみ追加します。
行番号 265 にて Y キーを受けたら、GOSUB 550 で初期化のサブルーチンを呼びます。
変数などの初期化をしたら、GOTO 20 でメインルーチンへジャンプさせます。
このままではリトライ時に GAME OVER と Retry(Y/N) の表示が残ってしまいます。
これを初期化のサブルーチンで消すようにします。
これでOKです。
実行して正常に動くかチェックしましょう。
完成おめでとう
これですべての仕組みは入りました。
カタツムリの数を増やします。
これで4匹に増えます。
完成です。
おめでとうございます。
このゲームはレトロ風味な作りをしています。
条件判断を減らし、処理速度が遅くなりすぎないようにするためです。
ですから、カタツムリが橋を渡りきるまで待つ必要がありません。
Good の表示を確認したら、すぐ別の穴へ向かいましょう。
この素早い操作ができないと、すぐにゲームオーバーになります。
昔のゲームって、こんなのが多かったんですよ。