; シフトアップネット ; ガンシューティング ミニゲーム ; ご自由にスクリプトを改造して使用してください msg ロード中・・・ . ; 標的 SUU_NO_TGT_IMG = 3 2 3 3 3 ; 種類毎の、1度に画面に出る最大数 ; SUU_KIND_TGT個以上 TGT_IMG = "koumori.png" "medama.png" "farao.png" "ha-pi-.png" "yadokari.png" ; 種類毎の画像 SUU_KIND_TGT = 5 ; 種類数 MAX_KIND_TGT < SUU_KIND_TGT - 1 ; 標的の出る順番と間隔(種類、間隔、種類、間隔・・・最後は-1) TGT = 4 5 4 5 4 20 3 5 3 5 3 20 2 5 2 5 2 20 1 20 1 20 0 5 0 5 0 20 2 5 3 5 2 5 3 5 2 5 3 20 4 5 0 5 4 5 0 5 4 5 0 20 3 5 4 5 2 5 3 5 4 5 2 20 0 1 0 1 0 1 1 1 1 1 2 1 2 1 2 1 3 1 3 1 3 1 4 1 4 1 4 60 -1 ; 当たり判定範囲 GUN_SIZE < 48 * 2 GUN_SIZE_HURF < GUN_SIZE / 2 load "gun1.gif" grpGun 2000 ; 照準画像 load "other1_1b" grpBack 100 ; 背景画像 fit grpBack paint grpBack ; 爆発エフェクト SUU_BOMB = 4 MAX_BOMB < SUU_BOMB - 1 FNM_BOMB = "circle.gif" no_tgt_img_from = 0 0 0 0 0 0 0 0 0 0 ; SUU_KIND_TGT個以上 no_tgt_img = 0 0 0 0 0 0 0 0 0 0 ; SUU_KIND_TGT個以上 hiscore = 0 flgBgm = 1 flgBack = 1 wk0 = 0 wk2 = 1000 for i = 0 to MAX_KIND_TGT no_tgt_img_from[i] = wk0 wk1 < SUU_NO_TGT_IMG[i] - 1 for j = 0 to wk1 load $TGT_IMG[i]$ grpTarget[wk0] wk2 locate grpTarget[wk0] -500 0 ; 当たり判定しないように wk0 + 1 wk2 + 1 endfor endfor max_all_tgt < wk0 - 1 ; 全標的画像数 - 1 wk2 = 1500 for i = 0 to MAX_BOMB load $FNM_BOMB$ grpBomb[i] wk2 locateCenter grpBomb[i] -500 0 addAnimAlpha grpBomb[i] 0 3 0 addAnimZoom grpBomb[i] 1 3 150 150 addAnimAlpha grpBomb[i] 0 1 100 addAnimZoom grpBomb[i] 0 1 100 100 addAnimLocate grpBomb[i] 1 1 -500 0 wk2 + 1 endfor loads SE_ATK loads SE_POW clear 0 ; タイトル *title stopm text ガンシューティング ミニゲーム Ver.0.1 *ハイスコア $hiscore$ . *title_500 if flgBgm = 1 then wk0 = "出さない" else wk0 = "出す" endif if flgBack = 1 then wk1 = "出さない" else wk1 = "出す" endif wk2 = "" menu m0 ゲームスタート $wk2$ 音を $wk0$ 背景を $wk1$ ハイスコアクリア $wk2$ endmenu if m0 = 3 then end else if m0 = 1 then if flgBgm = 1 then flgBgm = 0 else flgBgm = 1 sound SE_POW endif goto title_500 else if m0 = 2 then if flgBack = 1 then flgBack = 0 erase grpBack else flgBack = 1 paint grpBack endif goto title_500 endif clear 0 ; ゲーム毎の初期化 cntTgt = 10 ixTgt = 0 cntMDown = 0 maxCntMDown = 1 ; 連射間隔 suuTgt = 0 suuFire = 0 suuHit = 0 score = 0 gosub paintScore if flgBgm = 1 then music B16_079 endif paint grpGun ; メインループ *loop mouse mx my mdown locateCenter grpGun mx my gosub isOkFire if ret > 0 then gosub lblFire else zoom grpGun 100 100 endif wait 1 gosub nextTarget if ret = 0 goto loop ; ゲーム終了 if flgBgm = 1 then music A16_058 endif if suuTgt > 0 then wk0 < suuHit * 100 / suuTgt if wk0 = 100 then wk1 = 1000 else if wk0 >= 80 then wk1 = 500 else wk1 = 0 endif else wk0 = 0 wk1 = 0 endif score + wk1 撃破率 $wk0$% ボーナス $wk1$ gosub paintScore if suuFire > 0 then wk0 < suuHit * 100 / suuFire wk1 < wk0 * 10 else wk0 = 0 wk1 = 0 endif score + wk1 命中率 $wk0$% ボーナス $wk1$ gosub paintScore if score >= hiscore then ハイスコアです! hiscore = score ※ランキングは準備中です・・・ endif erase if flgBack = 1 then paint grpBack endif clear 0 goto title ; 発射可能か(ret=0,1) ------------------------------------------------------------------------------------------ *isOkFire ret = 0 if mdown > 0 then cntMDown - 1 if cntMDown < 0 then ret = 1 cntMDown = maxCntMDown endif else cntMDown = 0 endif return ; 攻撃 ------------------------------------------------------------------------------------------ *lblFire suuFire + 1 ; 効果音 if flgBgm = 1 then sound SE_ATK endif ; エフェクト zoom grpGun 200 200 ; 当たり判定 for i = 0 to max_all_tgt getGrpPos grpTarget[i] wk0 wk1 ; 画像の情報(X、Y、) ;msg ; $wk0$ $wk1$ ;. wk < mx - GUN_SIZE_HURF if wk <= wk0 then wk < mx + GUN_SIZE_HURF if wk >= wk0 then wk < my - GUN_SIZE_HURF if wk <= wk1 then wk < my + GUN_SIZE_HURF if wk >= wk1 then ; 当たり if flgBgm = 1 then sound SE_POW endif stopAnim grpTarget[i] zoom grpTarget[i] 100 100 alpha grpTarget[i] 100 ; 消滅アニメ getGrpPos grpTarget[i] arg0 arg1 gosub effectBomb locate grpTarget[i] -500 0 ; 当たり判定しないように i = max_all_tgt ; forを抜ける suuHit + 1 score + 100 gosub paintScore endif endif endif endif endfor return ; 指定位置に爆発エフェクト(引数:arg0=x、arg1=y)------------------------------------------------------------------------------------------ *effectBomb arg2 = 0 for arg5 = 0 to MAX_BOMB getGrpPos grpBomb[arg5] arg3 arg4 if arg3 <= -500 then arg2 = arg5 arg5 = MAX_BOMB endif endfor locateCenter grpBomb[arg2] arg0 arg1 paint grpBomb[arg2] startAnim grpBomb[arg2] return ; ターゲットを1つ追加するか(戻り:ret=終了)------------------------------------------------------------------------------------------ *nextTarget cntTgt - 1 if cntTgt <= 0 then if TGT[ixTgt] < 0 then ret = 1 return endif arg0 = TGT[ixTgt] gosub addTarget ixTgt + 1 cntTgt = TGT[ixTgt] ixTgt + 1 ;ixTgt=$ixTgt$ cntTgt=$cntTgt$ endif ret = 0 return ; ターゲットを1つ追加(引数:arg0=種類)------------------------------------------------------------------------------------------ *addTarget no_tgt_img[arg0] + 1 if no_tgt_img[arg0] >= SUU_NO_TGT_IMG[arg0] then no_tgt_img[arg0] = 0 endif wk0 < no_tgt_img_from[arg0] + no_tgt_img[arg0] rotate grpTarget[wk0] 0 zoom grpTarget[wk0] 100 100 alpha grpTarget[wk0] 100 clearAnim grpTarget[wk0] ; 種類毎に動き、出現位置初期化 if arg0 = 0 then rand 200 wk1 wk_x < wk1 - 100 wk_y = 250 if wk_x < 0 then wk1 = 0 else wk1 = 1 endif addAnimMove grpTarget[wk0] 1 10 0 -200 ; 上に真っ直ぐ移動して addAnimRotate grpTarget[wk0] 1 4 60 wk1 ; 左右どちらかに回転して addAnimCruise grpTarget[wk0] 1 24 20 ; 向いた方に飛び去る else if arg0 = 1 then wk_x = -500 wk_y = 0 alpha grpTarget[wk0] 0 for j = 0 to 3 rand 200 wk1 wk1 - 100 rand 200 wk2 wk2 - 100 addAnimLocate grpTarget[wk0] 1 1 wk1 wk2 ; ランダムな位置に addAnimAlpha grpTarget[wk0] 1 3 100 ; ボーッと現れる addAnimAlpha grpTarget[wk0] 1 3 0 ; ボーッと消える endfor else if arg0 = 2 then rand 1 wk1 wk_x < wk1 * 600 - 300 ; -300 or 300 wk_y = 0 if wk_x < 0 then wk1 = 100 else wk1 = -100 endif zoom grpTarget[wk0] 0 100 addAnimZoom grpTarget[wk0] 0 10 100 100 ; 拡大しながら addAnimMove grpTarget[wk0] 1 10 wk1 0 ; 横から現れ addAnimZoom grpTarget[wk0] 0 20 0 100 ; 縮小しながら addAnimMove grpTarget[wk0] 1 20 wk1 -250 ; 上へ飛び去る else if arg0 = 3 then rand 200 wk_x wk_x - 100 wk_y = -250 rotate grpTarget[wk0] 180 addAnimMove grpTarget[wk0] 1 5 0 100 for j = 0 to 3 rand 1 wk1 if wk1 = 0 then wk2 = 1 wk3 = 270 else wk2 = 0 wk3 = 90 endif addAnimRotate grpTarget[wk0] 0 3 90 wk1 ; 横へ向きながら addAnimCruise grpTarget[wk0] 1 6 15 wk3 ; 横へ進む addAnimRotateTo grpTarget[wk0] 0 3 180 wk2 ; 下へ向きながら addAnimCruise grpTarget[wk0] 1 6 15 180 ; 下へ進む endfor else if arg0 = 4 then rand 200 wk_x wk_x - 100 wk_y = 100 zoom grpTarget[wk0] 0 0 addAnimZoom grpTarget[wk0] 0 6 100 100 ; 拡大しながら addAnimRotateLoop grpTarget[wk0] 0 20 180 0 ; 回転しながら for j = 0 to 2 rand 6 wk1 wk1 + 6 addAnimCruise grpTarget[wk0] 1 wk1 15 ; 角度を変えて進む endfor addAnimZoom grpTarget[wk0] 1 6 0 0 ; 縮小しながら消える endif addAnimLocate grpTarget[wk0] 1 1 -500 0 ; 当たり判定しないように startAnim grpTarget[wk0] locateCenter grpTarget[wk0] wk_x wk_y paint grpTarget[wk0] suuTgt + 1 return *paintScore msg 1 375 0 150 1 FFFFFF 0000FF 0000FF left SCORE:$score$ . return