| チェックポイント 前回はUFOの移動を行うプログラムを作成しました。 しかしUFOは画面左上から右上に移動するだけでそれ以降は移動しません。 今回は移動の終了を判定する部分を追加してみたいと思います。 |
前回のサンプルプログラムは下記の通りです。
| ■プログラム |
0001 X = 0 |
このプログラムを実行するとUFOが画面左上から右上に移動しなぜか左上で止まったままになります。
これは LOCATE文のX方向の指定で使える値が0から31の間なのですがUFOが右上に移動した後も右に行こうとしているからX方向の値が不適切な値になっているためです。
プログラムではこの様なことが起きないようにしなければなりません。
次のプログラムは右上に到達した場合プログラムを終了します。
| ■プログラム |
0001 X = 0 |
| ■実行画面 |
|
しかしこのままではすぐにプログラムは終了してしまうのでゲームにはなりません。
そこでこのUFOを画面上で左右に移動するように変更してみましょう。
| ■プログラム |
0001 X = 0 |
これでUFOは左右に移動するようになりました。
言い忘れたわけではないのですが新しい命令が使われています。
| ■書式 |
| IF 条件式 GOTO @ラベル |
| 条件式が成り立つときラベルのあるプログラム位置へジャンプする |
この命令は IF 条件式 THEN GOTO @ラベルと同じです。
| チェックポイント ゲームのプログラムはキャラクタが移動したりする場合この様に処理を繰り返し行わなければなりません。 このような繰り返しはループと呼ばれていますが、特にゲームの1回のループの間にゲーム中で表示されているキャラクタすべてを実行しなければなりません。 このようなループをゲームループと呼んでいます。 |
このプログラムには問題があります。
ゲームループはゲーム中にひとつだけでないと不都合なのです。
このサンプルの場合ループが2つありますよね。
しかしこの説明もゲームの中での時間の概念を説明しなければならないのである程度理解ができたで頃に説明することにします。
ここでは『何故?』ではなくそうしなければならない理由があるということで勘弁してください。
それではこのループを一つにしてみましょう。
| ■プログラム |
0001 ' initialize |
今回は思い切ってプログラムを変更しました。
変更点は以下の通りです。
1)移動のために使っていた変数Xを今後のために変数UFO_Xに変更した。
2)ゲームループの中にUFOの移動プログラムがあるが右へ移動と左へ移動するプログラムを判断するためのフラグ変数UFO_Fを作った。
3)ゲームループを一つにした
4)プログラムに注釈を加えた。
UFOの移動は変数UFO_Fの値が0の時右へ移動、0でない時に左へ移動します。
右へ移動するプログラムも左に移動するプログラムもUFOの一つの動作を表しています。
そしてこの動作は同時には起きません。
この様に同じキャラクタのプログラムでありながら同時に実行されることがなくそれらが集まることでUFOが多彩な動きをすることができるこのようなプログラムをタスクと呼んでいます。
要するにUFOにとって0011行から0016行までが右移動のタスク、0018行から0025行までが左移動のタスクになります。