カピバラ父さんのプログラミング処方箋~プログラムの回し方

プログラムにも色々あって、例えばコマンドプロンプトから実行すると、所定の動作を行って コマンド入力に戻ってくるものもあれば、ゲームプログラムのように動きっぱなしのものや、 グラフィックエディタや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 カピバラ父さん