14歳シリーズ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
akihito

14歳シリーズ

#1

投稿記事 by akihito » 16年前

今のゲームでは自キャラが一回やられるとすぐにゲームオーバーになってしまう。
自キャラの数を記憶するグローバル変数を用意し、3機までやられてもOKなように変更する。
DrawGameMain関数の修正で対応可能。ちょっとずるで自キャラのamodeをA_HARDに、lifeを3に修正するという方法もとれます。その場合はAtariHantei関数を修正する。

どちらの方法もわかりません(泣)

Mist

Re:14歳シリーズ

#2

投稿記事 by Mist » 16年前

> 自キャラの数を記憶するグローバル変数を用意し、3機までやられてもOKなように変更する。

この方法については前回の質問でMikanさんが答えてくれてますよ。

akihito

Re:14歳シリーズ

#3

投稿記事 by akihito » 16年前

さらに詳しくおしえてもらえるとうれしいです。
衝突した際やゲームオーバーの処理がまだ理解できません。

Dixq (管理人)

Re:14歳シリーズ

#4

投稿記事 by Dixq (管理人) » 16年前

jikidata.life = 3;

としてあるので、グローバル変数用意する必要ないんじゃないですか?
あたった瞬間これ減らして、ライフが0になったらゲームオーバーフラグを立てるみたいな感じでいいんじゃないでしょうか?
ゲームオーバーについての処理がよくわかりませんが、

.gameover

みたいな変数用意して、そのフラグがオンになってたら
操作や弾計算関数などの関数を呼ばず、「ゲームオーバー」みたいに表示すればいいと思います。

Mikan

Re:14歳シリーズ

#5

投稿記事 by Mikan » 16年前

うーんと、掲示されているソースファイルだけだと

全体が見えないので詳しい説明ができません。

ゲームの状態別に処理をしているソースファイルや、

ゲームオーバーの処理をしているソースファイルを掲示されますと

もう少し詳しく説明することができます。

akihito

Re:14歳シリーズ

#6

投稿記事 by akihito » 16年前

お願いします。

BEMANI

Re:14歳シリーズ

#7

投稿記事 by BEMANI » 16年前

>>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になった時だけゲームオーバーになるはずです。

ざっと見ただけなので、間違ってたら非常に申し訳ないのです;;

akihito

Re:14歳シリーズ

#8

投稿記事 by akihito » 16年前

>>BEMANIさん
このやり方でもだめみたいでした(泣)

Mikan

Re:14歳シリーズ

#9

投稿記事 by Mikan » 16年前

>このやり方でもだめみたいでした(泣)

うーん、やっぱりif(AtariHantei() == 1 || MapAtari() == 1) で
MapAtari()が必ず1を返してきているとかでしょうか?

上記if文の下で

if( jikidata.life <= 0 ){
//ゲームオーバーの処理
}
と変更してみてはいかがでしょうか?

BEMANI

Re:14歳シリーズ

#10

投稿記事 by BEMANI » 16年前

>>akihitoさん
すいません、内容を誤解していたみたいです;
上に書いたコードですと「ライフは残っているが、敵弾に当たった」
場合、retval に 1 が入らないですね;
申し訳ないです;
ですので、上のコードはスルーして頂いて、
Mikanさんが書かれている「jikidata.life が 0 の時にゲームオーバー処理」へ
というのが良さそうです;


>>Mikanさん
>うーん、やっぱりif(AtariHantei() == 1 || MapAtari() == 1) で
>MapAtari()が必ず1を返してきているとかでしょうか?
  ライフが0の時に1を返すように変えたので、おそらく、MapAtari()で 1 が返ってきてるっぽいです。
  

>if( jikidata.life <= 0 ){
>//ゲームオーバーの処理
>}
  これがいいかもしれませんね><
  

akihito

Re:14歳シリーズ

#11

投稿記事 by akihito » 16年前

BEMANIさんMikanさん!!
おかげさまで完成させることができました。
本当に感謝です。
ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る