STG製作でまたつまずいてしまいました・・・orz
なんで配列の要素がないと怒られてしまうのかわかりません(。´Д⊂)
いつもならわかりそうなのに・・・なんだろうこの最近のスランプ気味なのは・・・
■不具合■
ボスの1段階目のHPをなくした後に自機弾を撃つと、
「配列の要素が無効です」ってエラーが表示されてしまう。
(BS_HIT(0)が5行った後に自機弾(Zキー)を出すとエラーになってしまう)
■仕様■
・ボスは1体 (1体なので描画は複数おこなう必要はない)
・ボスのHPを複数用意することにより、ボスのHP切り替えをしている
・ボスのHPは、段階ごとに違う (例:1段階:5、2段階:10)
・1段階のボスに自機弾を当ててダメージを与えると、2段階に移項する
・ボスの1段階目のHPがなくなったとき、ボスは中心点に移動する
・ボスが中心点に移動するときは、一定のスピードで移動する (ワープはNG)
・中心点は固定の位置にある
----------------------------------------------
;ボスを中心点に移動させる
から
return
手前までコメントアウトすればわかると思うけど、
「ボスを中心点に移動させる」さえなければ正常に動作するんだ。
しかしこれを入れると、何故かエラーが表示されてしますorz
どこか間違っていると思うので指摘やアドバイスをお願いいたします><
screen 0,400,400 ;******************情報***************** ;自機の情報 JIKI_x = 160 : JIKI_y = 300 ;ボスの情報 BS_MAX = 3 ;ボスの最大数(3) dim BS_f,BS_MAX ;ボスフラグ dim BS_x,BS_MAX ;X dim BS_y,BS_MAX ;Y dim BS_HIT,BS_MAX ;ヒット数 dim BS_HP,BS_MAX ;HP ;ボスが移動する中心点 TUSN_x = 256 : TUSN_y = 100 ;***************ボスの配置************** BS_x(0,0) = 160, 160, 160 BS_y(0,0) = 160, 130, 110 ;**************ボスのHP*************** BS_HP(0,0) = 5,10,15 ;***************メインループ************ *メイン redraw 0 : color : boxf ;************ゲームカウンター*********** color ,255 pos 20,20 : mes "BS_HIT(0) " + BS_HIT(0) pos 20,40 : mes "BS_HIT(1) " + BS_HIT(1) pos 20,60 : mes "BS_HIT(2) " + BS_HIT(2) pos 20,90 : mes "BS_f(0) " + BS_f(0) pos 20,110 : mes "BS_f(1) " + BS_f(1) pos 20,130 : mes "BS_f(2) " + BS_f(2) pos 20,160 : mes "BS_x(0) " + BS_x(0) // pos 20,180 : mes "BS_x(1) " + BS_x(1) // pos 20,180 : mes "BS_x(2) " + BS_x(2) ;*************ラベルジャンプ************ gosub *ボス処理 gosub *ボスVS自機弾 gosub *自機弾の移動 ;*************************************** ;自機表示 pos JIKI_x,JIKI_y color 255,255, : mes "自" ;自機弾を表示 pos JK_SHOT_x,JK_SHOT_y color 255,,255 : mes "弾" ;ボス表示 pos BS_x,BS_y color 255 : mes "ボス" ;中心点 pos TUSN_x,TUSN_y color ,255,255 : mes "中" redraw 1 : await 15 goto *メイン ;*****************ボス処理************** *ボス処理 repeat BS_MAX ;ボスの最大数(3) if BS_f(cnt) = 0 { ;ボスのフラグが「立ってなかったら実行」 BS_f(cnt) = 1 ;ボスのフラグを「立てる」 } if BS_HIT(cnt) >= BS_HP(cnt) { BS_f(cnt) = -1 ;ボスのフラグを-1にする }loop ;ボスを中心点に移動させる if BS_HIT(0) >= BS_HP(0) { ;ボスのHPが減ったら実行 if BS_IDO_f = 0 { ;ボス移動フラグが「立って無かったら実効」 BS_IDO_f = 1 ;ボス移動フラグを「立てる」 BS_V = atan(TUSN_y - BS_y , TUSN_x - BS_x) ;中心とボスとの角度を求める BS_xv = cos(BS_V) * 2 ;ボスXの移動量(2) BS_yv = sin(BS_V) * 2 ;ボスYの移動量(2) BS_x = double(BS_x) ;ボスの初期座標 BS_y = double(BS_y) ;ボスの初期座標 } if BS_IDO_f = 1 { ;ボス移動フラグが「立ってたら実行」 BS_x = BS_xv + BS_x ;ボスXの座標 BS_y = BS_yv + BS_y ;ボスYの座標 if (TUSN_x < BS_x+31) and (TUSN_x+28 > BS_x) and (TUSN_y < BS_y+32) and (TUSN_y+32 > BS_y) { BS_S = 0 ;ボスの移動量を無くす BS_x = 256 : BS_y = 100 ;ボスの座標を固定させる } } } return ;************ボスVS自機弾************* *ボスVS自機弾 repeat BS_MAX ;ボスの最大数(3) if BS_f(cnt) = 1 AND JK_SHOT_f = 1 { ;ボスがいて、自機弾がある場合「実行」 if (BS_x(cnt) < JK_SHOT_x+15) AND (BS_x(cnt)+46 > JK_SHOT_x) AND (BS_y(cnt) < JK_SHOT_y+11) AND (BS_y(cnt)+30 > JK_SHOT_y) { JK_SHOT_f = 0 ;自機弾フラグを「戻す」 BS_HIT(cnt) += 1 ;自機弾の火力 } }loop return ;************自機弾の移動*************** *自機弾の移動 getkey keyZ,90 ;キーチェック,Zキー if keyZ and JK_SHOT_f = 0 { JK_SHOT_f = 1 ;自機弾フラグを「立てる」 JK_SHOT_x = JIKI_x ;自機のX座標を代入 JK_SHOT_y = JIKI_y ;自機のY座標を代入 } if JK_SHOT_f = 1 : JK_SHOT_y -= 15 ;自機弾フラグが立ってたら、自機弾を↑に移動させる if JK_SHOT_y < 0 : JK_SHOT_f = 0 ;自機弾が一番上まで行ったら、自機弾フラグを「戻す」 return