初心者のためのゲームプログラミング入門

プログラミングとゲームの杜

初心者のためのプログラミング入門 & ゲームプログラムの作り方入門

人生一度はやってみよう 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"

橋の添え字XYを使って Good を表示する座標を算出します。

 

行番号215 以降はゲームオーバー処理です。
行番号217 から 219 までは終了キーの受け待ちです。

 

実行してみます。
橋があれば渡り、無ければ落ちるようになりました。

穴の判定とゲームオーバー処理

 

 

Good を消そう

Good を消す処理を入れます。

消すタイミングはカタツムリの座標を使います。

Goodを消す処理

x座標 175 で Good を表示し、167 で消します。
つまり、カタツムリが8ドット進んだら消えるようになっています。

左側は、78 で表示し 70 で消しています。

 

 

ところで行番号の並びがヒドイ状態です。
ここで RENUM をしておきましょう

 

 

スコアを表示しよう

ゲームですからスコアを表示します。

スコア用の変数SCを用意します。
それから、画面左下に SCORE の文字を表示しましょう。

スコア用の変数を作りSCOREの文字を表示する

 

SCORE のあとに 0 の表示と謎のスペースがあります。
この 0 はただの初期表示で、ゲーム中に書き換えます。
謎のスペースはゲームをリトライしたとき、表示されているスコアを消すためのものです。

行の最後のセミコロン;は忘れないように注意しましょう。
忘れると画面がスクロールしちゃいます。

 

 

つぎは、スコアの加算と表示をします。
得点はカタツムリが橋を渡ったときにします。つまり Good を表示しているサブルーチンの中ですね。

スコアの加算と表示

ここでも行の最後のセミコロンは忘れずに付けます。
y座標23に表示するとき、スクロールさせないのであればセミコロンは必要です。

 

 

実行してみます。
橋を渡ったとき、100点加算されるか確認しましょう。

100点加算されるか確認する

 

 

リトライできるようにしよう

ゲームオーバーになったら、もう一度遊べるようにします。

Retry (Y/N) のメッセージを表示します。
Nキーによる終了処理はすでにあるので、Yキーのリトライのみ追加します。

リトライの表示とYキーの受け付け

行番号 265 にて Y キーを受けたら、GOSUB 550 で初期化のサブルーチンを呼びます。
変数などの初期化をしたら、GOTO 20 でメインルーチンへジャンプさせます。

 

このままではリトライ時に GAME OVER と Retry(Y/N) の表示が残ってしまいます。
これを初期化のサブルーチンで消すようにします。

メッセージを消す

 

これでOKです。
実行して正常に動くかチェックしましょう。

リトライできるかチェックする

 

 

完成おめでとう

これですべての仕組みは入りました。
カタツムリの数を増やします。

FOR文を0TO3にする

 

これで4匹に増えます。

カタツムリを4匹にする

 

完成です。
おめでとうございます。

このゲームはレトロ風味な作りをしています。
条件判断を減らし、処理速度が遅くなりすぎないようにするためです。
ですから、カタツムリが橋を渡りきるまで待つ必要がありません
Good の表示を確認したら、すぐ別の穴へ向かいましょう。
この素早い操作ができないと、すぐにゲームオーバーになります。
昔のゲームって、こんなのが多かったんですよ。