シューティングゲームを作ろう その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キーを押しっぱなしにしたまま矢印キーで斜め移動ができない方もいるかと思います。これはハードウェアの仕様で、ソフトウェア側ではどうしようもありません。大抵の人はジョイパッドで遊ぶであろうことを前提にして、伝統的に矢印キーにも対応すると割り切るか、テンキーでも操作できるようにするかのどちらかだと思います。 |