[目次へ][前へ][次へ][表紙へ]
 カー・レースを作ろう その1

 スカッシュ・ゲームでは、バー1個とボール1個が出てくるだけでした。今度は、配列変数を使って複数の敵を扱う例として簡単なカー・レースを作ります。

ルール

1.サブルーチンを作る
2.プログラム実行時の初期設定
3.タイトル画面の表示
4.ゲームスタート時の初期設定
5.再スタート時の初期設定
6.自分の車の移動
7.敵の車の出現
8.敵の車の移動
9.スコアの処理
10.自分の車と敵の車の当たり判定
11.画面の更新
12.自分の車が爆発中の処理
13.6.に戻る

 1.サブルーチンを作る

「画面のクリア」と「メッセージの表示」はスカッシュ・ゲームと同じです。

	;画面のクリア
*Clear_Screen
	color 0, 0, 0
	boxf 0, 0, 639, 479
	return

	;メッセージの表示
*Write_Message
	;msx,msy	: 表示する座標
	;message	: メッセージの内容
	pos msx, msy
	color 255, 255, 255
	font "MS 明朝", 16
	mes message
	return

	;指定した絵を描画
*Graphic_Draw
	;gdx, gdy	: 描画する座標
	;wid		: ウィンドウID
	;div_no		: 分割画像No.
	pos gdx, gdy
	gmode 2
	celput wid, div_no
	return

 描画する座標と、仮想画面のウィンドウIDと、分割画像No.を変数に入れて呼ぶと、該当する絵を表示するサブルーチンを追加しています(wはwindow、divはdivision(分割)の略です)。

 2.プログラム実行時の初期設定
	;
	;プログラム実行時の初期設定
	;
	#define GWIDTH 480	; ゲーム画面の幅
	#define GHEIGHT 480	; ゲーム画面の高さ
	#define ENEMAX 64	; 敵の車の最大数
	
	screen 0, 640, 480
	title "CAR RACE"
	gsel 0
	gosub *Clear_Screen
	
	;仮想画面に絵を読み込む
	celload "graphics\\car.bmp", 1
	celdiv 1,32,32
	celload "graphics\\explosion.bmp", 2
	celdiv 2,64,64
	
	;効果音を読み込む
	mmload "sound\\loop04.wav", 0, 1	;走行音
	mmload "sound\\bom01.wav", 1		;爆発音

	randomize
	
	;敵の車の配列宣言
	dim enemy_f, ENEMAX
	dim enemy_x, ENEMAX
	dim enemy_y, ENEMAX
	dim tmp_enemy_x, 15
	
	hiscore = 5000


	#define GWIDTH 480	; ゲーム画面の幅
	#define GHEIGHT 480	; ゲーム画面の高さ
	#define ENEMAX 64	; 敵の車の最大数

 左側の480×480の領域をゲーム画面、右の残りの領域をスコア等の表示部とします。敵の車は最大64台まで出せるものとします。

 #defineは定義です。

	#define GWIDTH 480

 と書くと、480という数字にGWIDTHという別名を与えます。以降、GWIDTHと書くと480と書いたのと同じになります。480と書くよりGWIDTHと書いた方が「ゲーム画面の幅を表しているんだな」ということが分かりやすくなります。

 またプログラムのあちこちに64と書いた場合、後で敵の車の最大数を変えたくなった時に、それらを全部修正しなければなりません。このように書いておけば、

	#define ENEMAX 64

 の1行を修正するだけで済みます(Gはgame、ENEはenemy(敵)の略です)。

	;仮想画面に絵を読み込む
	celload "graphics\\car.bmp", 1
	celdiv 1,32,32
	celload "graphics\\explosion.bmp", 2
	celdiv 2,64,64

 "car.bmp"は64×32の画像で、32×32の絵が2つ並んでいます。赤い車(自分の車)には分割画像No.0が、青い車(敵の車)には分割画像No.1がつきます。

 "explosion.bmp"は64×64の爆発の画像です。画像と同じ大きさで分割すると、分割画像No.0がつきます。1つの絵からなる画像でも、あえてceldivを行って分割画像No.0をつけることによって、同じサブルーチンで描画できます。

	;効果音を読み込む
	mmload "sound\\loop04.wav", 0, 1	;走行音

 mmload命令の第3引数に1を指定すると、その音はループ再生(延々繰り返して再生されること)となります。

	;敵の車の配列宣言
	dim enemy_f, ENEMAX
	dim enemy_x, ENEMAX
	dim enemy_y, ENEMAX

 敵の車のx座標を配列変数enemy_x、y座標をenemy_yに入れます。enemy_fは存在フラグで、敵の車が存在する場合は1、存在しない場合は0を入れます。0番目のデータはenemy_f(0)、enemy_x(0)、enemy_y(0)、1番目のデータはenemy_f(1)、enemy_x(1)、enemy_y(1)……となります。要素数がENEMAXですから、0番目からENEMAX - 1番目までの要素が使えます。

enemy_f(n)が1である(存在する)場合 enemy_f(n)が0である(存在しない)場合
enemy_x(n)、enemy_y(n)を使って移動、描画、自分の車との当たり判定を行います。 移動、描画、自分の車との当たり判定を行いません。enemy_x(n)、enemy_y(n)に入っている値は関係ありません。
	dim tmp_enemy_x, 15

 敵のx座標を一時的に入れておくための配列変数です(詳細は後述)。

	hiscore = 5000

 ハイスコアです。初期値は5000点とします。


[目次へ][前へ][次へ][表紙へ] inserted by FC2 system