プログラムの構造

部分部分の解説に移る前に、プログラムの構造の基本的な事をお話しておきましょう。

鑑賞系のものを除けば、ほとんどのプログラムは次のような流れで成り立っています。

ユーザーからの入力その結果がどうなったかを判定画面に表示(音声の出力)

この一連の流れを、シューティングゲームのようなリアルタイムで進行するプログラムの場合、秒間に何十回というすさまじい速さで更新していく事になります。よく「FPS」というのが表示されているのを見かけますが、これは「Frame Par Second」の略で、要するに「1秒間に何コマ書き換えをしているか?」という数字になります。一般的なTVアニメの場合、秒間16コマの書き換えを行っています。このサンプルゲームの場合動作環境にもよりけりですが、秒間30コマ(30FPS)の書き換えを行うようになってます。この書き換え数が大きければ大きいほど、滑らかな動きを表現する事ができます。

その一連の流れを制御しているのが、メインルーチンになります。


;■ メインルーチン
*main
	redraw 2
	color bgcolor,0,0 : bgcolor=0
	boxf 0,0,640,480
	gosub *message					;ゲーム情報
	gosub *haikei					;星の描写
	gosub *jikimove					;自機移動
	gosub *weapon					;自機弾
	if frame\(25-level)=0 : gosub *enemyborn			;敵生成
	gosub *enemymove					;敵移動
	gosub *tekitamamove					;敵弾移動
	if pat&128>0 : gosub *pausegame				;ポーズ
	getkey returntop,121 : if returntop=1 : end 		;強制終了(F10)
	if mf<1 : mxv=0 : myv=0 : gameovertime++ : gosub *bomb	;ゲームオーバー寸前
	if gameovertime>100 : goto *gameover			;ゲームオーバー
	await 30
	redraw 1
	frame++
	level=frame/500+1
	if level>20 : level=20
goto *main

見て頂ければ分かると思いますが、このメインルーチンでは、画面の消去・再表示(赤い部分)以外は、ほとんどが gosub 命令でサブルーチンにジャンプするようになってます。ポイントとなるのは「どういう順番で画面に表示するか?」です。例えば自機の移動より後に星の描写を行うと、自機の手前を星が流れるようになってしまいます。敵の移動より前に敵弾の移動を行うと、敵の影に弾が隠れて見えないようになってしまいます。様々な処理をサブルーチン化するのは、デバッグをし易くする(どの部分でエラーになったのかがわかりやすい)というのと、画面表示の順番を簡単に制御できるという事が大きいと思います。

ちなみにこのメインルーチンでは、ダメージを受けた場合に画面を赤くする(bgcolor変数で制御)処理と、時間経過(frame変数)によってレベルが上がっていく(level変数)という処理F10を押すと強制終了するという処理も行っています。

前のページに戻る 解剖記のメニューへ戻る 次のページへ進む