プログラムにも色々あって、例えばコマンドプロンプトから実行すると、所定の動作を行って コマンド入力に戻ってくるものもあれば、ゲームプログラムのように動きっぱなしのものや、 グラフィックエディタやX-BASICのようにメニュー操作や特定のコマンド操作で終了するものが あります。
今回は、ゲームプログラムの回し方を検討します。
コマンドラインから起動した直後の状態は、ゲームの表現には向いていないので、 最初に、画面モードの変更を含め、初期設定を行います。
次に、ゲームの状況をプレイヤーに表示するために必要な準備作業を行います。 具体的には、スプライトキャラクタやグラフィック、音楽、効果音などを準備することと、 ゲームの進行状況を記憶する作業用メモリの初期化です。
それらの準備が整ったら、いよいよゲームのメインルーチンに取り掛かります。 最初に、ゲームの状況をプレイヤーに示し、コントローラなどからプレイヤーの指示を受け取ります。 その入力内容に応じてプレイヤーの操作キャラクタの状態変数を更新し、 ゲーム内のオブジェクトの状態変数も更新し、判定を行います。
原則的には、このメインルーチンを延々繰り返すことになります。プログラムにすると、こんな感じです。
.text
.even
start:
bsr initialize * 画面の初期化処理
bsr loading * 各種データ読み込みとデバイス設定
bsr reset * ゲーム変数のリセット
main:
bsr display * ゲームの状況の表示
bsr input * プレイヤーの入力操作受付
bsr update * ゲーム状況の更新
bsr judge * ゲームの審判
bra main * mainラベルの行に無条件分岐(無限ループ)
上の骨格でゲームを作ると問題になるのが「プログラムを止める方法を準備していない」ことです。
止めるためには、本体のInterruptスイッチを押し、中止(A)を選択することになります。
ゲームの制作では、プログラムの修正と再ビルド、実行を繰り返す必要があるため、 そんな乱暴な方法でプログラムを止めず、もっと安全に終わらせる方法を用意すべきです。
上のプログラムで、無限ループになっているbra mainの部分を、終了条件を見て動作を変えるようにします。
.text
.even
start:
bsr initialize * 画面の初期化処理
bsr loading * 各種データ読み込みとデバイス設定
bsr reset * ゲーム変数のリセット
main:
bsr display * ゲームの状況の表示
bsr input * プレイヤーの入力操作受付
bsr update * ゲーム状況の更新
bsr judge * ゲームの審判
move quit_flag(pc),d0
beq main * フラグが0ならmainラベルの行に分岐
bsr restore * 画面の復元処理
DOS _EXIT * プログラムを終了
quit_flag: .dc.w 0
グローバル変数quit_flagを初期値0で用意し、メインルーチンの繰り返しを行う際に、確認しています。
なにかの要因で、quit_flagが0以外の値になると、繰り返しを抜け、画面を復元してプログラムを終了します。
quit_flagがいつ更新されるのか、上のプログラムには記述がありません。 しかし、このフラグについては既に別のページで説明しています。 その処理を組み合わせると、どうなるかわかりますよね?
Copyright©2026 カピバラ父さん