シューティングゲーム

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

シューティングゲーム

#1

投稿記事 by weda » 14年前

はじめて投稿します。

龍神録プログラムの館を参考にシューティングゲームを作製しています。

2面以降を作ろうとしているのですが、ステージ切り替えるにはどのような処理を行うのがベストなのかで迷っています。いまのところ、1面とは別の2面用の初期化関数を読み込んでステージを切り替えようと思っているのですが、他にいい方法はありませんか?

あと、スコアランキングをゲームオーバーとクリア時に表示したいのですが、やり方が全くわかりません。教えてください><

うしお

Re:シューティングゲーム

#2

投稿記事 by うしお » 14年前

物事の「状態」を管理する方法はたくさんあります。

単純な例としては、
switch case
があります。
たとえば
enum State{
  Opening,
  Play,
  Ending,
};
とあって、
State g_State = Opening;

switch(g_State)
{
case Opening:
  オープニングの関数();
  break;
...略
}
とg_Stateで場面を切り替えることが可能です。

もう少しつっこんだ方法では、
「関数ポインタ」や
C++になりますが、デザインパターンの「stateパターン」
などがあります。
こういった種類の動作をさせるプログラムに挑戦していってはいかがでしょうか?

また、スコアランキングなどは完全に別トピックとなりますので、
分割して取り掛かることをオススメします。
また、蛇足かもしれませんが、スコアランキングを作成するときに「具体的に」どこでつまずくか?
を書かれると解決の早道になると思われます
ご一考ください

ゆーずぃ

Re:シューティングゲーム

#3

投稿記事 by ゆーずぃ » 14年前

切り替え方とはまた違うのかもしれませんが、
http://www.play21.jp/board/formz.cgi?ac ... &rln=64503
で2面の作り方について管理人さんが回答してくれています。参考にどうぞ。

weda

Re:シューティングゲーム

#4

投稿記事 by weda » 14年前

返信ありがとうございます。

2面への切り替えが出来るようになりました。
スコアランキングについてはいろいろ試してみてからまた質問に来ます。

Dixq (管理人)

Re:シューティングゲーム

#5

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

1面が終わったかどうかは、

boss_shot.cppの

//ボスの弾幕メイン
void boss_shot_main(){

・・・(略)・・・

if(boss.state==2 && (boss.hp<=0 || boss.endtime<=0)){//弾幕中で体力が無くなったら
se_flag[1]=1;//敵のピチュリ音
se_flag[11]=1;
input_phy(30);//30カウントで定位置に戻す
memset(&boss_shot,0,sizeof(boss_shot_t));//ボスの弾幕情報を初期化
memset(&lazer,0,sizeof(lazer_t)*LAZER_MAX);//ボスのレーザー情報を初期化
flash.flag=0;//フラッシュを消す
if(boss.knd==boss.danmaku_num[0] || boss.knd==boss.danmaku_num[1]){//出すべき弾幕をだしきったら
boss.flag=0;//消す
enter_dn(10,40);//(45)
se_flag[9]=1;//ボスが死んだ音
return ;
}

ここでボスを倒したかどうかが解ります。
boss.knd==boss.danmaku_num[0]の時中ボスを倒したことがわかり、
boss.knd==boss.danmaku_num[1]の時ラスボスを倒したことがわかります。

1面が終わった時は、後者なので、ここで判定するとよいでしょう。

スコアボードを表示したいなら、スコアボード表示フラグをこの瞬間立て、
スコアボードを表示してやれば良いかと思います。

閉鎖

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