[目次へ][前へ][次へ][表紙へ]
 シューティングゲームを作ろう その11

 20-3.自機の弾、敵の弾の描画
	;自機の弾の描画
	if shot_f == 1 {
		gdx = shot_x : gdy = shot_y
		wid = 1
		div_no = 1
		gosub *Graphic_Draw
	}

 自機の弾が存在する場合、自機の弾を描きます。

	;敵の弾の描画
	for i, 0, ESHOTMAX
		if eshot_f(i) == 1 {
			gdx = eshot_x(i) : gdy = eshot_y(i)
			wid = 3
			div_no = 1
			gosub *Graphic_Draw
		}
	next

 敵の弾が存在する場合、敵の弾を描きます。

 20-4.スコアの表示、残機表示
	;スコアの表示
	color 64, 64, 64
	boxf GWIDTH, 0, 639, 479
	msx = GWIDTH + 16 : msy = 32
	message = "SCORE:"
	gosub *Write_Message
	msx = GWIDTH + 32 : msy = 52
	s = "000000" + score
	message = strmid(s, -1, 7)
	gosub *Write_Message
	msx = GWIDTH + 16 : msy = 72
	message = "HI-SCORE:"
	gosub *Write_Message
	msx = GWIDTH + 32 : msy = 92
	s = "000000" + hiscore
	message = strmid(s, -1, 7)
	gosub *Write_Message


	strmid(文字列が入った変数, n, m)

 文字列の一部を取り出して返す関数です。nは何文字目から取り出すか(先頭を0文字目として数えます)、mは何文字取り出すかを指定します。nもmも半角文字換算です。全角文字1文字は半角文字2文字分です。

	s = "abcdefg"
	mes strmid(s, 2, 3)

実行結果

cde

 nに-1を指定すると、文字列の右からmで指定した文字数だけ取り出します。

	s = "abcdefg"
	mes strmid(s, -1, 3)

実行結果

efg

	s = "000000" + score
	message = strmid(s, -1, 7)

 スコアを7桁にします。足りない左の桁には0を入れます。scoreが200なら"0000200"、1000なら"0001000"という具合です。
 scoreが一番桁数が少ないのは0の時で、1桁です。ですから左に0を6つつければ7桁以上の数字になります。それを右から7文字取り出すのですから7桁の数字になります。

	;残機表示
	for i, 0, n_myship - 1
		gdx = GWIDTH + 16 + 40 * i : gdy = 128
		wid = 1
		div_no = 0
		gosub *Graphic_Draw
	next
	redraw 1

 残機数より1つ少なく自機を描きます。

 21.ステージクリア処理
	scroll_cnt++
	
	;ステージクリア処理
	if scroll_cnt == 3072 {
		mci "stop bgm"
		stage_no++
		if interval > 32 { interval -= 32 }
		goto *Stage_Start
	}
	
	goto *Main_Loop

 メイン・ループの最後にscroll_cntを1増やします。
 この時、scroll_cntが3072になったらステージクリアとします。
 BGMを止めます。
 stage_noを1増やします。
 intervalを32減らします。ただしintervalの下限は32とします(ということは難易度は4面で最高となり、以降変わりません)。
 「ステージスタート時の初期設定」に戻ります。


[サンプルをダウンロード]

補足
・文字コード
 全角文字1文字は半角文字2文字分であると書きました。実は、文字には対応する数字が割り当てられているのです。例えば"a"は97、"b"は98、といった具合です。これを文字コードといいます。コンピュータは、文字列を文字コードに直して記憶しています。この割り当て方は1種類ではありません。何種類かが規格として定められています。シフトJISコード、EUCコード、ASCIIコード、Unicode等の規格です。
 全角文字は扱わず、すべてを1バイトで表すASCIIコード、半角か全角かに関わらず、すべてを2バイトで表すUnicodeもありますが、HSPでは文字列はシフトJISコードで表されます。シフトJISコードでは半角文字は1バイト、全角文字は2バイトです。
「半角文字は1バイト」というのは、半角文字には1バイトの数値が割り当てられているということです。つまり0(= %00000000)から255(= %11111111)までの数値です。半角文字は数が少ないので1バイトで足りるのです。全角文字は数が多いので2バイト、つまり0(= %00……00、0は16個)から65535(= %11……11、1は16個)までの数値が割り当てられています。
  "abcdあいうed"
 この文字列で、"e"は半角文字換算で10文字目です。
 "bc"は2文字分の文字列です。"あい"は4文字分、"うe"は3文字分の文字列です。
 上の場合、5文字目から4文字分取り出したり、3文字目から2文字分取り出したりすると、変な文字列になってしまいますのでご注意下さい。
 
・配色
 背景を暗めの色に、キャラクタ(自機、敵等)を明るめの色にすると、見やすいかと思います。背景もキャラクタも明るい色にしたい場合、キャラクタに暗い色で縁をつけると、見やすいと思います。

 
・矢印キーで斜め移動できない場合
 環境によっては、Zキーを押しっぱなしにしたまま矢印キーで斜め移動ができない方もいるかと思います。これはハードウェアの仕様で、ソフトウェア側ではどうしようもありません。大抵の人はジョイパッドで遊ぶであろうことを前提にして、伝統的に矢印キーにも対応すると割り切るか、テンキーでも操作できるようにするかのどちらかだと思います。

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