【はじめてのプチコン】UFOの移動 | りょうのゲーム塾

りょうのゲーム塾

再開、準備中。

前回のサンプルはUFOを画面左上に表示し終了しました。
たった一度の表示なのでこのUFOを移動させることはできません。
なぜなら…移動とは物体が違う位置に動くことなのでたった一度の表示は静止を意味します。
要するにUFOを移動しようと思うならプログラムも実行し続けないといけません。
そこでプログラムを実行し続けるためにループ処理をしました。
サンプルプログラムは下記の通りです。

■プログラム
0001 @LOOP
0002 CLS
0003 LOCATE 0, 0
0004 PRINT "A"
0005 GOTO @LOOP

■実行結果
A


このプログラムで絶え間なくUFOは画面に表示されていますが…
問題がありますね?
問題点は以下の2つです。
1)画面が乱れている
2)UFOが動いていない。

画面が乱れているのは絶え間なく画面を消してはUFOを表示しているので我々には乱れて見えるのです。
この状況を解決するためにはゲーム中で使われている『時間』について説明が必要ですがここでは省略します。
そこで対策として表示が乱れない程度の待ち時間を作ります。

■書式
VSYNC フレーム数
指定されたフレーム数だけ待ちます


ではサンプルを変更してみましょう。

■プログラム
0001 @LOOP
0002 VSYNC 1
0003 CLS
0004 LOCATE 0, 0
0005 PRINT "A"
0006 GOTO @LOOP

■実行結果
A


これで画面の乱れがなくなりました。
しかしUFOは移動しませんね。
なにがいけないか解りますか?

プログラムのことが解らなくても問題が何かに気付いていないといけません。

現在のプログラムはUFOの表示位置を LOCATE 命令で指定してますがその位置は毎回X方向が0でY方向が0の位置ですよね。

同じ位置に表示しているんだからUFOは移動せずに0,0の位置に停止しているわけです。
では表示位置を変更するためにはどうしたら良いでしょうか?

LOCATE 命令で指定する位置を定数でなく変更できる数にしなければなりません。

そうです。変数を使う必要があるということですね。

ここではUFOを右方向に移動してみましょう。
X方向だけ変化すればいいのでX方向の位置を表すために変数Xを使用します。

■プログラム
0001 X = 0
0002 @LOOP
0003 VSYNC 1
0004 CLS
0005 LOCATE X, 0
0006 PRINT "A"
0007 GOTO @LOOP


変数Xには最初の値(初期値)を入れておきます。
そしてこの変数Xを LOCATE 命令で使用します。
これを実行してみてください。

結果は前と同じです。

これで移動する準備ができただけでまだ移動してはいません。
移動するためにはこの変数Xの値が変化しなければいけないのです。
そこで変数Xの値を変化させてみます。

■プログラム
0001 X = 0
0002 @LOOP
0003 VSYNC 1
0004 CLS
0005 LOCATE X, 0
0006 PRINT "A"
0007 X = X + 1
0008 GOTO @LOOP


このプログラムを実行するとUFOは右に移動したはずです。
移動しましたか?
ただまだこれは未完成ですからね。

0007行目の X = X + 1 は変数Xの値に1を足して変数Xに入れるという意味です。
これでX方向が+1されて右にひとつだけ移動します。
0008行目のGOTO文で@LOOPにジャンプしまた表示するわけです。