東方STGを作っているのですが、
ボスのHP切り替えのソースが思い通りに動かなくって困ってます。
■問題点■
BS_y(cnt) -= 1 ;ボスを↑に「移動」(問題点)
これを入れないと、HP減らしても「BS_HIT(1)」が判定がされない。
これを入れて1段階目を倒すと「BS_HIT(1)」の数値が上昇するがボスが上に移動して困る。
でも入れないと判定しない・・・どこか原因あるけど見つからない・・・orz
■仕様■
・ボスは1人
・ボスは移動しない
・ボスのHPが0になると、次のHPが設定される(2段階目はHPが増えます)
・1段階のボスHPを0にすると、絵が表示される(スペカ絵)
・2段階のボスHPを0にすると、絵が表示される(絵は同じです)
・絵は上に移動し画面外で「止める」か「消す」
■やりたいこと■
1.1段階のHPを0にしたとき、絵が表示される。
2.その後、2段階のHPを設定されボス戦を続行。
3.2段階のHPを0にしたとき、1段階目と同じ絵を表示させる。
ボスは1人だけど2人いるとして考えて、
1人目のボスのHPを減らせば、2人目(2つめのHP)が出てくるという考え方。
そんで段階ごとにHPを設定することができたんだけど、
同じ絵なのでまとめようとしたら何故かうまくいかない・・・orz
うまく伝わるといいんだけど、わからないところありましたら聞いてください。
それではよろしくお願いいたします。
---------------------------
screen 0,400,400 ;******************情報***************** ;自機の情報 JIKI_x = 160 : JIKI_y = 300 JIKI_Spd = 4 ;自機スピード ;ボスの情報 BS_MAX = 2 ;ボスの最大数(2) 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 SPE_MAX = 2 ;スペカ最大数 dim SPE_f,SPE_MAX ;スペカフラグ dim SPE_x,SPE_MAX ;X dim SPE_y,SPE_MAX ;Y ;***************ボスの配置************** BS_x(0,0) = 160,160 BS_y(0,0) = 160,160 ;**************ボスのHP*************** BS_HP(0,0) = 5,10 ;***********スペカ絵の配置************** SPE_x(0,0) = 200,200 SPE_y(0,0) = 160,160 ;***************メインループ************ *メイン redraw 0 : color : boxf ;************ゲームカウンター*********** color ,255 pos 50,20 : mes "BS_HIT(0) " + BS_HIT(0) pos 50,40 : mes "BS_HIT(1) " + BS_HIT(1) pos 50,70 : mes "SPE_y(0) " + SPE_y(0) pos 50,90 : mes "SPE_y(1) " + SPE_y(1) ;*************ラベルジャンプ************ gosub *スペカ絵 gosub *ボス処理 gosub *ボスVS自機弾 gosub *自機移動 gosub *自機弾の移動 ;*************************************** ;自機表示 color 255,255, : pos JIKI_x,JIKI_y : mes "自" ;ボス表示 repeat BS_MAX ;ボスの最大数(2) if BS_f(cnt) = 1 { ;ボスフラグが「立ってたら実行」 pos BS_x(cnt),BS_y(cnt) color 255 : mes "ボス" }loop ;スペカ絵 repeat SPE_MAX ;スペカ最大数(2) if BS_HIT(cnt) >= BS_HP(cnt) { ;ダメージ与えたら「実行」 pos SPE_x(cnt),SPE_y(cnt) color 255,255 : mes "絵" }loop ;自機弾表示 if JK_SHOT = 1 { ;自機弾フラグが「立ってたら実行」 pos JKSO_x,JKSO_y color ,255,255 : mes "弾" } redraw 1 : await 15 goto *メイン ;****************スペカ絵*************** *スペカ絵 repeat SPE_MAX ;スペカ最大数(2) if SPE_f(cnt) = 0 { ;スペカのフラグが「立ってなかったら実行」 SPE_f(cnt) = 1 ;スペカのフラグを「立てる」 } if SPE_y(cnt) >= -150 { ;絵が画面外に移動したら「実行しない」 if BS_HIT(cnt) >= BS_HP(cnt) { ;ダメージを与えたら「実行」 SPE_y(cnt) -= 1 ;絵を↑に「移動」 } }loop return ;*****************ボス処理************** *ボス処理 repeat BS_MAX ;ボスの最大数(2) if BS_f(cnt) = 0 { ;ボスのフラグが「立ってなかったら実行」 BS_f(cnt) = 1 ;ボスのフラグを「立てる」 } if BS_HIT(cnt) >= BS_HP(cnt) { ;ダメージ与えたら「実行」 BS_y(cnt) -= 1 ;ボスを↑に「移動」(問題点) ;↑これを入れないと、HP減らしても「BS_HIT(1)の判定がされない」 }loop return ;************ボスVS自機弾************* *ボスVS自機弾 repeat BS_MAX ;ボスの最大数(2) if BS_f(cnt) = 1 AND JK_SHOT = 1 { ;ボスがいて、自機弾がある場合「実行」 if (BS_x(cnt) < JKSO_x+15) AND (BS_x(cnt)+46 > JKSO_x) AND (BS_y(cnt) < JKSO_y+11) AND (BS_y(cnt)+30 > JKSO_y) { BS_HIT(cnt) += 1 ;自機弾の火力 JK_SHOT = 0 ;自機弾フラグを「戻す」 } }loop return ;***************自機移動**************** *自機移動 stick key,15 if key & 4 : JIKI_x + JIKI_Spd ;→の移動 if key & 1 : JIKI_x - JIKI_Spd ;←の移動 if key & 2 : JIKI_y - JIKI_Spd ;↑の移動 if key & 8 : JIKI_y + JIKI_Spd ;↓の移動 return ;************自機弾の移動*************** *自機弾の移動 getkey keyZ,90 ;キーチェック,Zキー if keyZ and JK_SHOT = 0 { ;Zキーが押されたら、自機弾フラグがない場合「実行」 JK_SHOT = 1 ;自機弾フラグを「立てる」 JKSO_x = JIKI_x ;X JKSO_y = JIKI_y ;Y } if JK_SHOT = 1 : JKSO_y -= 15 ;自機弾を↑に移動させる if JKSO_y < 0 : JK_SHOT = 0 ;一番上まで行ったら、自機弾フラグを「戻す」 return