ページ 11

STGでボムを実装したのですが・・・

Posted: 2011年4月02日(土) 18:56
by tt
C言語でSTGを作っています。環境はVisual C++ Expressで、ライブラリはDXライブラリです。
http://www.c3.club.kyutech.ac.jp/gamewi ... ontent_1_2
こちらのサイト様を参考にして、ボムを実装してみました。その結果が下記のコードです(もちろん別のところにボムの構造体を用意しました)。

コード:

void BombEffect()
{
   if(bomb.counter == bomb.maxcounter)
   {
       for(int i = 0; i < ENEMY_TOTAL_SHOT_NUM; i++)
       {
           if(EnemyShot[i].flag == 1)
           {
               EnemyShot[i].flag = 0;
           }
       

		   for(int i = 0; i < ENEMY_TOTAL_NUM; i++)
		   {
			   if(enemy[i].flag == 1)
			   {
				   enemy[i].hp-=20;
				   if(enemy[i].hp<=0){
					   enemy[i].flag=0;
				   }
			   }
		   }
	   }
   }
}
void EnemyCreateShot()
{
   if(bomb.counter == 0)
   {
	   for(int i=0;i<ENEMY_TOTAL_NUM;i++){
		   for(int j = 0; j < ENEMY_TOTAL_SHOT_NUM; j++)
		   {
			   EnemyShot[i].flag= 1;
			   EnemyShot[i].EnemyShots[j].x = enemy[i].x; 
			   EnemyShot[i].EnemyShots[j].y = enemy[i].y;
		   }
	   }
   }
}

void Bomb()
{
	if(Player.flag==1)
		if(Key[KEY_INPUT_X]==1 && bomb.counter == 0 && bomb.kosuu > 0)
		{
        bomb.kosuu--;
		bomb.counter = bomb.maxcounter;
		}
   
		if(bomb.counter> 0)
		{
			BombEffect();   
			bomb.counter--;
		}
仕様は、ボムを撃つと敵に20のダメージを与え、敵の弾をすべて消すというものです。
しかしこれだと、ボムを撃った後しばらくすると敵の弾がまた表示されて、そこで固まってしまいます。1度消した弾は二度と表示させたくないのですが、どのようにすればよろしいでしょうか?

Re: STGでボムを実装したのですが・・・

Posted: 2011年4月03日(日) 11:51
by h2so5
tt さんが書きました:

コード:

       for(int i = 0; i < ENEMY_TOTAL_SHOT_NUM; i++)
       {
           if(EnemyShot[i].flag == 1)
           {
               EnemyShot[i].flag = 0;
           }
ここだけ見ると、EnemyShotの要素数はENEMY_TOTAL_SHOT_NUM個に見えるのですが
tt さんが書きました:

コード:


	   for(int i=0;i<ENEMY_TOTAL_NUM;i++){
		   for(int j = 0; j < ENEMY_TOTAL_SHOT_NUM; j++)
		   {
			   EnemyShot[i].flag= 1;

ここを見るとEnemyShotをENEMY_TOTAL_NUM分しかループ回していないのが変ですね

Re: STGでボムを実装したのですが・・・

Posted: 2011年4月03日(日) 11:58
by softya(ソフト屋)
敵の弾の生存フラグの数が敵の数と同じなのは何故でしょうか?
敵の弾の生存フラグは弾の数だけ必要なはずです。

Re: STGでボムを実装したのですが・・・

Posted: 2011年4月04日(月) 22:02
by tt
すいません、for文のところが間違ってました。直りました。