シューティングゲームを作ろう その3 |
3.タイトル画面 |
; ;タイトル画面 ; *Title_Screen menu_no = 0 *Title_Loop await 16 gosub *Input_Key if menu_no == 1 & pre_upkey == 0 & upkey == 1 { menu_no = 0 } if menu_no == 0 & pre_downkey == 0 & downkey == 1 { menu_no = 1 } if pre_zkey == 0 & zkey == 1 { if menu_no == 0 { goto *Game_Start } if menu_no == 1 { dsend diend end } } redraw 0 gosub *Clear_Screen color 0, 255, 255 pos 80, 128 font "Times New Roman", 72 mes "THE SHOOTER" msx = 288 : msy = 320 message = "START" gosub *Write_Message msx = 288 : msy = 352 message = "EXIT" gosub *Write_Message gdx = 272 : gdy = 320 + menu_no * 32 wid = 3 div_no = 0 gosub *Graphic_Draw redraw 1 goto *Title_Loop
メニュー項目の番号を、STARTが0番、EXITが1番とします。現在カーソル(三角形のマーク)があるメニューの番号をmenu_noに入れます。
カーソルがEXITにある状態で上を押すとmenu_noが0に、STARTにある状態で下を押すとmenu_noが1になります。
Zキーまたはボタン1が押された時に、カーソルがSTARTにあれば「ゲームスタート時の初期設定」に飛びます。EXITにあればプログラムを終了します。
"THE SHOOTER"、"START"、"EXIT"を書き、menu_noに対応する位置にカーソルを描きます。
今まではタイトル画面を1回だけ描いて、あとはZキーが押されるのを待つだけだったのですが、今回はそうはいきません。カーソルの位置が変わるからです。ではカーソルだけ消して描き直せばいいかというとそんなことはせず、毎回全部消して描き直します。その方がプログラムがシンプルになります。
4.ゲームスタート時の初期設定 |
; ;ゲームスタート時の初期設定 ; *Game_Start score = 0 stage_no = 1 interval = 128 n_myship = 3 myship_state = 1 ;1:通常 2:爆発中 3:復活中
stage_noは今ステージいくつかを入れます。初期値は1面です。
interval(間隔)は、何ドットスクロールするだびに敵を出すかを表します。これを減らしていくと、敵がどんどん出て来るようになります。
n_myshipは残機数です。
myship_stateは自機の状態です。1なら通常の状態、2なら爆発中、3なら復活中を表します。自機が爆発した後、残機が残っていればまた自機を出しますが、この時しばらく点滅させて、点滅中は無敵(敵や敵の弾に当たらない)とします。この状態を「復活中」と呼ぶことにします。これがなく、爆発後すぐ「通常」にすると、復活時に自機の位置に敵や敵の弾があったら、連続してやられてしまいます。
5.ステージスタート時の初期設定 |
; ;ステージスタート時の初期設定 ; *Stage_Start gosub *Clear_Screen msx = 296 : msy = 232 message = "STAGE " + stage_no gosub *Write_Message wait 200 myship_x = (GWIDTH - 32) / 2 myship_y = GHEIGHT - 64 shot_f = 0 for i, 0, ENEMAX enemy_state(i) = 0 next for i, 0, ESHOTMAX eshot_f(i) = 0 next scroll_cnt = 0 mci "play bgm from 0"
"STAGE 1"や"STAGE 2"といったステージ番号を表示し、2秒待ちます。
自機の座標をmyship_x、myship_yに入れます。
shot_fは自機の弾の存在フラグで、最初は存在しないので0を入れます。
ステージスタート時には敵も敵の弾もまだ存在しないので、enemy_state、eshot_fをすべて0にします。
scroll_cntはステージが始まってから何ドットスクロールしたかを表します。ステージスタート時には1ドットもスクロールしていないので0を入れます。
ステージスタート時に音楽を流します。