| チェックポイント サンプルゲームに乱数を導入してみました。 乱数の導入により、よりゲームらしくなったと思います。 |
サンプルゲームの変更部分のプログラムです。
| ■プログラム |
' |
システム部分に変更があります。
変更部分はシステムカウンタのカウントアップ部分です。
SYS_CNT = (SYS_CNT + 1) AND &H3FFFF
これはSYS_CNTに1を足していきますが、すぐにはエラーがでません。
しかしコンピュータの変数は有限なデータなので上限値が決まっています。
これをオーバーするとオーバーフローエラーが発生します。
それを起こさないためにマスクをしています。
マスクについては解説してありますが今回のケースは前回のマスクとは意味合いが違うため必要になった時に解説します。
ここでは変更だけしておいてください。
あとはUFO部分の変更です。
①ラベル@UFO_WAIT部分の変更点
IF RND(2) GOTO @UFO_LSET
1行追加されています。
今まではUFOが画面に出るまで60フレーム待ちました。
時間になると@UFO_RSETへジャンプしUFOが画面左端に表示され移動し始めます。
今回の変更でRND(2)により0から1までの乱数が発生します。
ここでUFOを右端から出すか、左端から出すかを決めているのです。
それの乱数を使うので右か左かは分かりません(ランダムです)。
②UFO表示の変更
右移動および左移動ともにUFOの表示を行っている部分が下記のように変更されています。
LOCATE UFO_X,UFO_Y
PRINT "A"
今までUFOは画面一番上の行を移動していましたが新たに変数UFO_Yを使いY座標を変更できるようにしました。
③UFOの画面端に到達したときの処理を変更
UFO_X = UFO_X + UFO_SX
IF UFO_X > 32 GOTO @UFO_DETH
右移動の部分で説明します。
右に移動し端に到達したか判定し端に来た場合、今までは反転していました。
そこを端まで来たらUFOを消しています。
要するにUFOは往復しません。
④移動の初期化を変更
@UFO_RSET
UFO_X = 0
UFO_Y = RND(10)
UFO_F = 1
RETURN
右移動および左移動の初期化部分で新たに変数UFO_Yの初期化を行っています。
Y方向の座標を与えていますがRND(10)により0から9までの乱数が代入されるのでUFOの位置をランダムに変更できます。
⑤UFOが画面に発生するまでの待ち時間処理の変更
@UFO_DETH
UFO_F = 0
UFO_CNT = RND(60)
RETURN
UFOがプレイヤの武器で破壊されたか画面移動で端に到達した場合、いったんUFOを消し新たに画面に登場させるまでの待ち時間を今まで60フレーム固定にしていました。
それを0から59フレームの乱数にしました。
これで現れるタイミングにばらつきができます。