今のゲームでは自キャラが一回やられるとすぐにゲームオーバーになってしまう。
自キャラの数を記憶するグローバル変数を用意し、3機までやられてもOKなように変更する。
DrawGameMain関数の修正で対応可能。ちょっとずるで自キャラのamodeをA_HARDに、lifeを3に修正するという方法もとれます。その場合はAtariHantei関数を修正する。
どちらの方法もわかりません(泣)
14歳シリーズ
Re:14歳シリーズ
> 自キャラの数を記憶するグローバル変数を用意し、3機までやられてもOKなように変更する。
この方法については前回の質問でMikanさんが答えてくれてますよ。
この方法については前回の質問でMikanさんが答えてくれてますよ。
Re:14歳シリーズ
jikidata.life = 3;
としてあるので、グローバル変数用意する必要ないんじゃないですか?
あたった瞬間これ減らして、ライフが0になったらゲームオーバーフラグを立てるみたいな感じでいいんじゃないでしょうか?
ゲームオーバーについての処理がよくわかりませんが、
.gameover
みたいな変数用意して、そのフラグがオンになってたら
操作や弾計算関数などの関数を呼ばず、「ゲームオーバー」みたいに表示すればいいと思います。
としてあるので、グローバル変数用意する必要ないんじゃないですか?
あたった瞬間これ減らして、ライフが0になったらゲームオーバーフラグを立てるみたいな感じでいいんじゃないでしょうか?
ゲームオーバーについての処理がよくわかりませんが、
.gameover
みたいな変数用意して、そのフラグがオンになってたら
操作や弾計算関数などの関数を呼ばず、「ゲームオーバー」みたいに表示すればいいと思います。
Re:14歳シリーズ
うーんと、掲示されているソースファイルだけだと
全体が見えないので詳しい説明ができません。
ゲームの状態別に処理をしているソースファイルや、
ゲームオーバーの処理をしているソースファイルを掲示されますと
もう少し詳しく説明することができます。
全体が見えないので詳しい説明ができません。
ゲームの状態別に処理をしているソースファイルや、
ゲームオーバーの処理をしているソースファイルを掲示されますと
もう少し詳しく説明することができます。
Re:14歳シリーズ
>>akihitoさん
ゲーム本体の実行という場所で、
if(AtariHantei() == 1 || MapAtari() == 1) {
gstate = GAME_OVER;
と書かれていました。
で、AtariHantei()を見させて頂いたところ、IsAtari()が呼ばれており、
その中で、当たったら retval = 1 として、retvalを戻り値としています。
そして、retval が 1 であれば AtariHantei() の中で return(1) として戻り値を返しています。
ですので、if(AtariHantei() == 1 || MapAtari() == 1) の部分で、
一度当たると AtariHantei の戻り値が 1 となりますので、結果、
gstate = GAME_OVER となり、ゲームーオーバーになってしまうんだと思います。
「自機のライフが0になったらゲームオーバー」とするには、
retval = 1; の描く場所を変えればいいような気がします。
今のままですと、当たったら100% retval = 1 となり、ゲームオーバーになります。
ですので、retval = 1 を a->life = 0; と b->life = 0; の次の行に書けばいいんだと思います。
そうしてあげれば、ライフが0になった時だけゲームオーバーになるはずです。
ざっと見ただけなので、間違ってたら非常に申し訳ないのです;;
ゲーム本体の実行という場所で、
if(AtariHantei() == 1 || MapAtari() == 1) {
gstate = GAME_OVER;
と書かれていました。
で、AtariHantei()を見させて頂いたところ、IsAtari()が呼ばれており、
その中で、当たったら retval = 1 として、retvalを戻り値としています。
そして、retval が 1 であれば AtariHantei() の中で return(1) として戻り値を返しています。
ですので、if(AtariHantei() == 1 || MapAtari() == 1) の部分で、
一度当たると AtariHantei の戻り値が 1 となりますので、結果、
gstate = GAME_OVER となり、ゲームーオーバーになってしまうんだと思います。
「自機のライフが0になったらゲームオーバー」とするには、
retval = 1; の描く場所を変えればいいような気がします。
今のままですと、当たったら100% retval = 1 となり、ゲームオーバーになります。
ですので、retval = 1 を a->life = 0; と b->life = 0; の次の行に書けばいいんだと思います。
そうしてあげれば、ライフが0になった時だけゲームオーバーになるはずです。
ざっと見ただけなので、間違ってたら非常に申し訳ないのです;;
Re:14歳シリーズ
>このやり方でもだめみたいでした(泣)
うーん、やっぱりif(AtariHantei() == 1 || MapAtari() == 1) で
MapAtari()が必ず1を返してきているとかでしょうか?
上記if文の下で
if( jikidata.life <= 0 ){
//ゲームオーバーの処理
}
と変更してみてはいかがでしょうか?
うーん、やっぱりif(AtariHantei() == 1 || MapAtari() == 1) で
MapAtari()が必ず1を返してきているとかでしょうか?
上記if文の下で
if( jikidata.life <= 0 ){
//ゲームオーバーの処理
}
と変更してみてはいかがでしょうか?
Re:14歳シリーズ
>>akihitoさん
すいません、内容を誤解していたみたいです;
上に書いたコードですと「ライフは残っているが、敵弾に当たった」
場合、retval に 1 が入らないですね;
申し訳ないです;
ですので、上のコードはスルーして頂いて、
Mikanさんが書かれている「jikidata.life が 0 の時にゲームオーバー処理」へ
というのが良さそうです;
>>Mikanさん
>うーん、やっぱりif(AtariHantei() == 1 || MapAtari() == 1) で
>MapAtari()が必ず1を返してきているとかでしょうか?
ライフが0の時に1を返すように変えたので、おそらく、MapAtari()で 1 が返ってきてるっぽいです。
>if( jikidata.life <= 0 ){
>//ゲームオーバーの処理
>}
これがいいかもしれませんね><
すいません、内容を誤解していたみたいです;
上に書いたコードですと「ライフは残っているが、敵弾に当たった」
場合、retval に 1 が入らないですね;
申し訳ないです;
ですので、上のコードはスルーして頂いて、
Mikanさんが書かれている「jikidata.life が 0 の時にゲームオーバー処理」へ
というのが良さそうです;
>>Mikanさん
>うーん、やっぱりif(AtariHantei() == 1 || MapAtari() == 1) で
>MapAtari()が必ず1を返してきているとかでしょうか?
ライフが0の時に1を返すように変えたので、おそらく、MapAtari()で 1 が返ってきてるっぽいです。
>if( jikidata.life <= 0 ){
>//ゲームオーバーの処理
>}
これがいいかもしれませんね><