【龍神録】スペルカードの制限時間実装

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

【龍神録】スペルカードの制限時間実装

#1

投稿記事 by amehirune » 10年前

お久しぶりです。アメヒルネと申します。
ただ今、勉強と兼ねて、龍神録のサンプルソースを見たりいじったりしながら学んでいます。
(↑あくまで勉強用としてだけしか使ってません)

今回お尋ねしたいのは、「スペルカードの制限時間の実装」です。
以下、サンプルソース

コード:

//通常弾:ばらまき弾幕
void boss_shot_bulletH012(){
#define TM002 650
    int i,k,t=boss_shot.cnt%TM002;
    int time=16-(t/60);                  //制限時間の設定。ここでは16秒
    if(t%100==0){
        //40<x<FMX-40  50<y<150 の範囲で100離れた位置に80カウントで移動する
        move_boss_pos(40,50,FMX-40,150,100, 80);
    }
	for(i=0;i<2;i++){//1カウントに2回発射
		if((k=search_boss_shot())!=-1){
            boss_shot.bullet[k].col   = GetRand(6);//7種類の色をランダムに。
            boss_shot.bullet[k].x     = boss.x;//発射初期座標はボスの位置に指定
            boss_shot.bullet[k].y     = boss.y;
            boss_shot.bullet[k].knd   = 4;//弾の種類。円弾。
            boss_shot.bullet[k].angle = rang(PI2/20)+PI2/10*t;
            boss_shot.bullet[k].flag  = 1;
            boss_shot.bullet[k].cnt   = 0;
            boss_shot.bullet[k].spd   = 5;//スピードは速め。
            boss_shot.bullet[k].state = 0;//弾のステータス
            boss_shot.bullet[k].kaiten= 0;//弾を回転するかどうかのフラグ。回転すると醜くなったのでOFF。        
        }
        if(t%10==0)
            se_flag[0]=1;
	}

	if(time==0)
		ch.num=-1;//やることがないからとりあえず死亡

	DrawRotaGraph(500-14*i,0,1.0f,0.0f,img_num[0][time%10],TRUE);
	time/=10;                                      //制限時間の表示。本当はここじゃない

	if(t%60==0&&time<10)
		se_flag[60]=1; //10秒切ったら警告音

}
お尋ねしたいことは、
・10秒切るまえから警告音が鳴りだしてしまいます。
・16秒たってもゲームオーバーになりません。
これら2つの解決法と、
・制限時間が表示されません。どこに(ソースを)描けば見えるようになりますか?
というあほらしい疑問です。

何度も検証してきましたが、治る気配がないのでここで投稿させていただきました。
どなたか、よろしくお願いします。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 【龍神録】スペルカードの制限時間実装

#2

投稿記事 by みけCAT » 10年前

amehirune さんが書きました:10秒切るまえから警告音が鳴りだしてしまいます。
この関数のローカル変数timeを10で割ってから10未満か判定しているため、
実質的には残り99秒以下で警告音を鳴らす仕様になっています。
amehirune さんが書きました:16秒たってもゲームオーバーになりません。
tはTM002未満にしかならないので、t/60は常に10以下です。
従って、この関数のローカル変数timeが0になることは(デバッガなどで書き換えなければ)無いはずです。
amehirune さんが書きました:制限時間が表示されません。どこに(ソースを)描けば見えるようになりますか?
ボスを描画する関数で、boss_shot.cntの値を用いて描画するのが1個の実装例だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
Tatu
記事: 445
登録日時: 13年前
住所: 北海道

Re: 【龍神録】スペルカードの制限時間実装

#3

投稿記事 by Tatu » 10年前

元のプロジェクトにボスの弾幕終了までのカウンタがあり、
カウンタが0になったらボスのHPを0にして弾幕を終了させるという処理があるはずです。
その変数を利用してみてはどうでしょうか。

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 【龍神録】スペルカードの制限時間実装

#4

投稿記事 by amehirune » 10年前

みけCATさんのアドバイスを受けて、今までtとしていた部分を、boss_shot.cntに変更し、場所もいろいろやったところきちんとなりました。
(残り時間の表示以外)
ありがとうございます。

ただ、Tatuさんの言うように、「カウンタが0になったらボスのHPを0にして弾幕を終了させるという処理」があるのならば、やっぱりそちらを使ったほうがいいのでしょうか?
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

閉鎖

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