ページ 11

複数の敵同士の判定がでできません

Posted: 2011年6月10日(金) 20:57
by 奥兵
 シューティングゲームのようなものを製作しているのですが、敵同士の移動時の判定がうまくいいきません。
最初の一機だけは他の機体をしっかりと判定してくれるのですが、残りの機体は他の機体をスルーしてしまいます。
自分ではbattle内の関数emoveに問題があると思うのですが自分では全くどこが問題なのかわかりませんので一応全てのソースコードを載せます。
VC++2008 DXライブラリ使用 OSは7です。プログラミングは初心者です。
初心者故汚く読みにくいと思いますが何卒よろしくお願いします。

コード:

///////////////////////////////////////////////////////
#include <math.h>

#include "DxLib.h"
#include "enemyai.h"
#include "battle.h"

#define PI 3.141592654

char Key[256];
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
		SetGraphMode( 800 , 600 , 32 ) ;

        if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
        SetDrawScreen( DX_SCREEN_BACK );        //裏画面に設定
		
		while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            
                //int story();
				battle_m();
                ScreenFlip();
        }
 
        DxLib_End();
        return 0;
}

////////////////////↓battleです////////////////////////////////////
#include <math.h>

#include "DxLib.h"
#include "enemyai.h"

#define PI 3.141592654

char bKey[256];
struct uni{

		int image[20];
		double x,y;
		double rad;
		int HP;
		int size;
		int walk;
		int zyoutai;
		int move,rock;
		 
	};
struct enemys{

		int image[128];	 
		int x[32],y[32];
		int    ecx[32],ecy[32];
		double rad[32];
		int HP[32];
		int size[32];
		int trigger[32];

		int cHP[32];
		int move[32];
		int aicount[32];
		int hitbullet[32];
		int uniHP[32];
		int bx[32],by[32];
		int step[32];
		int movech[32];

	};

struct bullet{
		 	 
		double x,y;
		int    fl;
		double rad;

};
struct enebullet{
		double x[30],y[30];
		int    fl[30];
		double rad[30];

};
struct obj{
		int image[32];
		int x[16],y[16];
		int HP[16];
		int size[16];

};
struct zyoukyou {
		 
		int image[5];
		int speed;
		int count;
		int ecount;
		int tyakudann,etyakudann;
		int x,y,ex,ey;
		//int hunteicount;
	
};
/*void battle_m(){

		DrawFormatString( 0, 20, GetColor(0,0,0), "分割出来ています " );

}*/


void dainyuu(struct uni *mainuni,struct enemys *ene ,struct bullet *bullet,struct zyoukyou *fase,struct obj *obj,struct enebullet *ebullet){
	int i,j;
	
	mainuni->x=300;
	mainuni->y=600;

	mainuni->image[0]=LoadGraph("usvmm,body.png");
	mainuni->image[1]=LoadGraph("leg1.png");
	mainuni->image[2]=LoadGraph("leg10.png");
	mainuni->image[3]=LoadGraph("leg11.png");
	mainuni->image[4]=LoadGraph("mfl.png");
	mainuni->image[5]=LoadGraph("mfl1.png");
	mainuni->image[6]=LoadGraph("bom.png");
	mainuni->image[7]=LoadGraph("bom1.png");
	mainuni->image[8]=LoadGraph("bom2.png");

	mainuni->walk=0;
	mainuni->zyoutai=0;
	mainuni->move;
	mainuni->rock=0;
	mainuni->size=20;
	mainuni->HP=100000;
	//mainuni->tyakudann;

	ene->image[0]=LoadGraph("ene1.png");
	ene->rad[0]=0;
	ene->x[0]=300;
	ene->y[0]=100;
	ene->HP[0]=400;
	ene->size[0]=60;

	ene->image[1]=LoadGraph("usvmob1,2.png");
	ene->rad[1]=0;
	ene->x[1]=400;
	ene->y[1]=300;
	ene->HP[1]=200;
	ene->size[1]=20;
	 
	ene->image[2]=LoadGraph("usvmob1,2.png");
	ene->rad[2]=0;
	ene->x[2]=500;
	ene->y[2]=500;
	ene->HP[2]=200;
	ene->size[2]=20;//大きくしてみるか


	ene->image[3]=LoadGraph("usvmob1,2.png");
	ene->rad[3]=0;
	ene->x[3]=100;
	ene->y[3]=400;
	ene->HP[3]=300;
	ene->size[3]=20;

	ene->image[4]=LoadGraph("usvmob1,2.png");
	ene->rad[4]=0;
	ene->x[4]=600;
	ene->y[4]=250;
	ene->HP[4]=300;
	ene->size[4]=20;

	ene->image[5]=LoadGraph("usvmob1,2.png");
	ene->rad[5]=0;
	ene->x[5]=700;
	ene->y[5]=100;
	ene->HP[5]=300;
	ene->size[5]=20;



	for(i=0;i<32;i++){
		ene->trigger[i]=0;   // 敵のtriggerですが、 
		ene->move[i]=0;      //そうですか、私はmoveです
		ene->aicount[i]=0;   // あ、私はenemyaiで数、数えてます
		ene->hitbullet[i]=0; //私は弾が当たるか見てます、最近目が疲れてきて・・・
		ene->bx[i]=0;
		ene->by[i]=0;
		ene->step[i]=0;
		ene->movech[i]=0;
	}



	obj->image[0]=LoadGraph("obj2.png");
	obj->x[0]=400;
	obj->y[0]=400;
	obj->HP[0]=1000000000;
	obj->size[0]=20;

	obj->image[1]=LoadGraph("obj2.png");
	obj->x[1]=80;
	obj->y[1]=250;
	obj->HP[1]=1000000000;
	obj->size[1]=20;
	
	for(j=0;j<32;j++){
		for(i=0;i<30;i++){
			ebullet[j].fl[i]=0;	 
		}
		ene->ecx[j]=0;
		ene->ecy[j]=0;
	}


	for(i=0;i<30;i++){
	     bullet[i].fl=0;	
	}
		fase->image[0]=LoadGraph("bullet.png");
		fase->speed=10;
		fase->count=5;
		fase->ecount=5;
		fase->tyakudann=0;
		fase->etyakudann=0;
	//	fase->hunteicount=0;
	
} 
void attack(struct bullet *bullet,struct uni *mainuni,struct zyoukyou *fase){	
	 	int i,mfl,mflc;
		double x,y;
		mfl=0;
		mflc=0;
		fase->count++;
	 
		if( CheckHitKey( KEY_INPUT_RETURN ) == 1  ){ 
			mfl=1;
			for(i=0;i<30;i++){
				if(bullet[i].fl==0&&fase->count>=5){
					bullet[i].fl=1;

					bullet[i].rad=mainuni->rad;
					bullet[i].x=mainuni->x+(sin(mainuni->rad)*-10)+cos(bullet[i].rad)*20;
					bullet[i].y=mainuni->y+(cos(mainuni->rad)*10)+sin(bullet[i].rad)*20;
					fase->count=0;
				}
			}///////
		}

		for(i=0;i<30;i++){
			if((bullet[i].fl)==1){
			   bullet[i].x+=cos(bullet[i].rad)*fase->speed;
			   bullet[i].y+=sin(bullet[i].rad)*fase->speed;
			   DrawRotaGraph( (int)bullet[i].x, (int)bullet[i].y,1.0,bullet[i].rad+PI/2,fase->image[0], TRUE );

			   if(bullet[i].x>900||bullet[i].x<-100||bullet[i].y<-100||bullet[i].y>700){
			      bullet[i].fl=0;
			   }

			}
		}
		if(mfl==1){
			
			x=(int)mainuni->x+(int)(sin(mainuni->rad)*-10)+cos(mainuni->rad)*35;
			y=(int)mainuni->y+(int)(cos(mainuni->rad)*10)+sin(mainuni->rad)*35;

			mflc=GetRand(1)+4;
			DrawRotaGraph((int) x ,(int) y , 1.0,mainuni->rad+PI/2, mainuni->image[mflc], TRUE );
		}
		 
}
///* 敵の射撃
void eneattack(struct enebullet *ebullet,struct zyoukyou *fase,struct enemys *ene,struct uni *mainuni){	
		 int i,mflc;
		double x[32];
		double	y[32];
		int mfl[32];
		for(i=0;i<32;i++){
			mfl[i]=0;
		}
		int j;
	for(j=0;j<32;j++){//仮につけマスタ
	if (ene->HP[j]>0){
	//	mflc=0;
		fase->ecount++;
	 
		if( ene->trigger[j] == 1  ){ 
			mfl[j]=1;
			for(i=0;i<30;i++){
				if(ebullet[j].fl[i]==0&&fase->ecount>=5){
				    ebullet[j].fl[i]=1;
					ebullet[j].rad[i]=ene->rad[j]+PI/2;
					ebullet[j].x[i]=ene->x[j]; 
					ebullet[j].y[i]=ene->y[j]; 
					fase->ecount=0;
					if(j==1){
						//ebullet[j].x[i]+=(sin(ene->rad[j])*20);//+(cos(ebullet[j].rad[i])*20);
						//ebullet[j].y[i]+=(cos(ene->rad[j])*20)+(sin(ebullet[j].rad[i])*20);
						ebullet[j].x[i]+=(sin(ene->rad[j])* 16)+cos(ene->rad[j])* -8;
						ebullet[j].y[i]+=(sin(ene->rad[j])*-8)+cos(ene->rad[j])* -16;
					}
				}
			} 
		}

	}
	//	int White=GetColor(0,0,0);
	//	DrawFormatString(100,200, White , "%d , %d" , (int)ebullet[j].x[i],i);
	//for(j=0;j<32;j++){//仮に外しました
		if(mfl[j]==1){
			
			x[j]=(int)ene->x[j]+(int)(sin(ene->rad[j])*-26)+(int)(cos(ene->rad[j])* -8);
			y[j]=(int)ene->y[j]+(int)(sin(ene->rad[j])*-8)+(int)(cos(ene->rad[j])*26);

			mflc=GetRand(1)+4;
			DrawRotaGraph((int) x[j] ,(int) y[j] , 1.0,ene->rad[j]-PI, mainuni->image[mflc], TRUE );
		}
		
		for(i=0;i<30;i++){
			if((ebullet[j].fl[i])==1){
			   ebullet[j].x[i]+=cos(ebullet[j].rad[i])*fase->speed;
			   ebullet[j].y[i]+=sin(ebullet[j].rad[i])*fase->speed;

			   DrawRotaGraph( (int)ebullet[j].x[i], (int)ebullet[j].y[i],1.0,ebullet[j].rad[i]+PI/2,fase->image[0], TRUE );

			   if(ebullet[j].x[i]>900||ebullet[j].x[i]<-100||ebullet[j].y[i]<-100||ebullet[j].y[i]>700){
			      ebullet[j].fl[i]=0;
			   }

			}
		}
	}	 
	
}


 //↑敵の射撃
 void enemy(struct enemys *ene,struct uni *mainuni,struct bullet *bullet,struct enebullet *ebullet,struct zyoukyou *fase){
	int White;
	int Green;
	White=GetColor(0,0,0);
	Green=GetColor(0,255,0);
    int i=0;
	double d[32];
	double rad[32];

	for(i=0;i<32;i++){		
		rad[i] = atan2(mainuni->y - ene->y[i], mainuni->x - ene->x[i])-(PI/2);
	
	 d[i] = rad[i] - ene->rad[i];
	 
		if (sin(d[i]) > 0) {
			ene->rad[i] += 0.02;
		} else {
			ene->rad[i] -= 0.02;
		}
	
	DrawBox   ( (int) ene->x[i] , (int)ene->y[i]-60 , (int)ene->x[i]+ene->HP[i] , (int)ene->y[i]-50 , Green , TRUE ) ;

		if(ene->HP[i]>0){
			DrawRotaGraph((int)ene->x[i],(int)ene->y[i],1.0,ene->rad[i], ene->image[i], TRUE );
		}
	}
	
	//DrawFormatString(100,200, White , "x=%d    y=%d      " ,ene->HP,sin(d));
	 
}
void huntei(struct bullet *bullet,struct uni *mainuni,struct zyoukyou *fase,struct enemys *ene,struct obj *obj){
		int White;
		White=GetColor(0,0,0);
		int i,j,range;
		 		  
	for(j=0;j<32;j++){		
		range=ene->size[j]*ene->size[j];
	for(i=0;i<30;i++){
		if((range>((ene->x[j]-bullet[i].x)*(ene->x[j]-bullet[i].x)+(ene->y[j]-bullet[i].y)*(ene->y[j]-bullet[i].y))&&(bullet[i].fl==1))){	
				if(ene->HP[j]>0){
					bullet[i].fl=0;
					ene->HP[j]=ene->HP[j]-2;
					if(fase->tyakudann==0){
						fase->tyakudann=5;
						fase->x=(int)bullet[i].x-10;
						fase->y=(int)bullet[i].y-20;
					}
				}
		}
	}
	}
	//DrawFormatString(100,200, White , "x=%d y=%d mx=%d " ,ene->HP,3,3);
	//obj のテスト
	for(j=0;j<32;j++){
		range=obj->size[j]*obj->size[j];
	for(i=0;i<30;i++){
		if((range>((obj->x[j]-bullet[i].x)*(obj->x[j]-bullet[i].x)
				  +(obj->y[j]-bullet[i].y)*(obj->y[j]-bullet[i].y))&&(bullet[i].fl==1))){	
				if(obj->HP[j]>0){
					bullet[i].fl=0;
					if(fase->tyakudann==0){
						fase->tyakudann=10;
						fase->x=(int)bullet[i].x-10;
						fase->y=(int)bullet[i].y-20;
					}
				}
		}
	}
	}

	if(fase->tyakudann>0){
		fase->tyakudann-=1;
		DrawGraph( fase->x , fase->y ,mainuni->image[6+(GetRand(2))],TRUE);
	}


}
void enehuntei(struct enebullet *ebullet,struct uni *mainuni,struct zyoukyou *fase,struct enemys *ene,struct obj *obj){
		int White;
		White=GetColor(0,0,0);
		int i,j,k,range;
		 

	for(j=0;j<32;j++){	
		range=mainuni->size*mainuni->size;
		for(i=0;i<30;i++){
			if((range>((mainuni->x-ebullet[j].x[i])*(mainuni->x-ebullet[j].x[i])+
				       (mainuni->y-ebullet[j].y[i])*(mainuni->y-ebullet[j].y[i]))&&(ebullet[j].fl[i]==1))){	
					if(mainuni->HP>0){
						ebullet[j].fl[i]=0;

						mainuni->HP=mainuni->HP-2;
						if(fase->etyakudann==0){

							fase->etyakudann=10;
							fase->ex=(int)ebullet[j].x[i]-10;
							fase->ey=(int)ebullet[j].y[i]-20;
		
						}
					}
			}
		}
	}
 
	for(k=0;k<16;k++){//自機
		for(j=0;j<16;j++){//僚機
			range=obj->size[j]*obj->size[j];
			for(i=0;i<30;i++){
				if((range>((obj->x[j]-ebullet[k].x[i])*(obj->x[j]-ebullet[k].x[i])+(obj->y[j]-ebullet[k].y[i])
				          *(obj->y[j]-ebullet[k].y[i]))&&(ebullet[k].fl[i]==1))){	
					if(obj->HP[j]>0){
						ebullet[k].fl[i]=0;
						if(fase->etyakudann==0){
							fase->etyakudann=10;
							fase->ex=(int)ebullet[k].x[i]-10;
							fase->ey=(int)ebullet[k].y[i]-20;
						}
					}
				}
			}
		}
	}
 
 	//	以下敵のフレンドリファイア判定

	for(k=0;k<32;k++){//kは自機
		for(j=0;j<32;j++){//jは他の敵機
			 
				range=ene->size[j]*ene->size[j];
				if(j==k){
					range=0;
				}
		for(i=0;i<30;i++){
			if((range>((ene->x[j]-ebullet[k].x[i])*(ene->x[j]-ebullet[k].x[i])
					  +(ene->y[j]-ebullet[k].y[i])*(ene->y[j]-ebullet[k].y[i]))&&(ebullet[k].fl[i]==1))){	
					if(ene->HP[j]>0){
						ebullet[k].fl[i]=0;
						ene->HP[j]=ene->HP[j]-1;
						if(fase->etyakudann==0){
							fase->etyakudann=10;
							fase->ex=(int)ebullet[k].x[i]-10;
							fase->ey=(int)ebullet[k].y[i]-20;
		
						}
					}
			}
		}
		}
	}
 
	if(fase->etyakudann>0){
		fase->etyakudann-=1;
		DrawGraph( fase->ex , fase->ey ,mainuni->image[6+(GetRand(2))],TRUE);
	}

}
		  

//}
void move(struct uni *mainuni,struct enemys *ene,struct obj *obj,struct zyoukyou *fase){
	double x,y,cx[32],cy[32],s;

	x=0;
	y=0;
	s=2;
	int i;
	int	huntei=0;
    int White;
	White=GetColor(0,0,0);
	mainuni->move=0;
	if((mainuni->x>0)){
		if( CheckHitKey(  KEY_INPUT_A ) == 1 ){
		x=-s;
		mainuni->move=1;
		}
	}
	if((mainuni->y<590)){
		if( CheckHitKey( KEY_INPUT_S ) == 1 ){
			y=s;
			mainuni->move=1;
		}
	}
	if((mainuni->x<790)){
		if( CheckHitKey( KEY_INPUT_D ) == 1 ){
			x=s;
			mainuni->move=1;
		}
	}
	if((mainuni->y>0)){
		if( CheckHitKey( KEY_INPUT_W) == 1 ){
			y=-s;
			mainuni->move=1;
		}
	}

	for(i=0;i<32;i++){
		cx[i]=pow((ene->x[i]-(mainuni->x+x)),2);
		cy[i]=pow((ene->y[i]-(mainuni->y+y)),2);	
		if(ene->HP[i]<=0){
			ene->size[i]=0;
		}
		if((cx[i]+cy[i])<(ene->size[i]*ene->size[i])+(mainuni->size*mainuni->size)){
				huntei=1;
		}
	}

	for(i=0;i<32;i++){
		cx[i]=pow((obj->x[i]-(mainuni->x+x)),2);
		cy[i]=pow((obj->y[i]-(mainuni->y+y)),2);	
		 
		if((cx[i]+cy[i])<(obj->size[i]*obj->size[i])+(mainuni->size*mainuni->size)){
				huntei=1;
		}
	}


	if(huntei==0){
			DrawFormatString(100,140, White , "判定発生"  );
			mainuni->x=mainuni->x+x;	
			mainuni->y=mainuni->y+y;
	}
///////////////////////// 
	if(fase->count%5==0){
	if( CheckHitKey( KEY_INPUT_UP) == 1 ){
		if(ene->HP[mainuni->rock+1]>0){
			mainuni->rock+=1;
		}
	}
	if( CheckHitKey( KEY_INPUT_DOWN) == 1 ){
		if(ene->HP[mainuni->rock-1]>0){
			mainuni->rock-=1;
		}
	}
	}
////////////////////
		if(ene->HP[mainuni->rock]>0){
			mainuni->rad=atan2(ene->y[mainuni->rock]-mainuni->y,ene->x[mainuni->rock]-mainuni->x);
		}else{
			mainuni->rad=-PI/2;
		}

	mainuni->zyoutai=mainuni->zyoutai+1;
	if((mainuni->zyoutai%10)==1){
			if(mainuni->move==1){
				mainuni->walk=mainuni->walk+1;
			}
	}
	if(mainuni->walk==4){
		mainuni->walk=0;
		//mainuni->zyoutai=0;
	}
	if(mainuni->walk==0||mainuni->walk==2){
		DrawRotaGraph( (int)mainuni->x, (int)mainuni->y,1.0,mainuni->rad+PI/2, mainuni->image[1], TRUE ); //静止
	}
	if(mainuni->walk==1){
		DrawRotaGraph( (int)mainuni->x, (int)mainuni->y,1.0,mainuni->rad+PI/2, mainuni->image[2], TRUE ); //移動
	}
	if(mainuni->walk==3){
		DrawRotaGraph( (int)mainuni->x, (int)mainuni->y,1.0,mainuni->rad+PI/2, mainuni->image[3], TRUE ); //移動
	}

	DrawRotaGraph( (int)mainuni->x, (int)mainuni->y,1.0,mainuni->rad+PI/2, mainuni->image[0], TRUE );//上半身

	DrawFormatString(100,100, White , "x=%d y=%d mx=%d " ,(int)mainuni->x,(int)mainuni->y,10);
	 
}

int map(int mapimg){
		
		DrawGraph(0,0,mapimg,TRUE);
	
return 0;
}

void object(struct obj *obj){
	int i;

	for(i=0;i<32;i++){
		if(obj->HP[i]>0){
			DrawRotaGraph(obj->x[i],obj->y[i],1.0,0,obj->image[i],TRUE);
		}
	}
	 
}

void emove(struct uni *mainuni,struct enemys *ene,struct obj *obj){
	double cx[32],cy[32];
	int huntei[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
	int i,j;

//xとyは移動分 構造体を e aiから
	for(j=0;j<32;j++){
		 
		for(i=0;i<32;i++){
			if(i==!j){
				cx[i]=pow((double)(ene->x[i]-(ene->x[j]+ene->ecx[j])),2);
				cy[i]=pow((double)(ene->y[i]-(ene->y[j]+ene->ecy[j])),2);	
				if(ene->HP[i]<=0){
					ene->size[i]=0;
				}
				if((cx[i]+cy[i])<((ene->size[i]*ene->size[i])+(ene->size[j]*ene->size[j]))){
						huntei[j]=1;
				}
			}
		}
 
			cx[j]=pow((double)(mainuni->x-(ene->x[j]+ene->ecx[j])),2);
			cy[j]=pow((double)(mainuni->y-(ene->y[j]+ene->ecy[j])),2);	
		 
			if((cx[j]+cy[j])<((mainuni->size*mainuni->size)+(ene->size[j]*ene->size[j]))){
				huntei[j]=1;
			}
		
		for(i=0;i<32;i++){
			cx[i]=pow((double)(obj->x[i]-(ene->x[j]+ene->ecx[j])),2);
			cy[i]=pow((double)(obj->y[i]-(ene->y[j]+ene->ecy[j])),2);	
		 
			if((cx[i]+cy[i])<(obj->size[i]*obj->size[i])+(ene->size[j]*ene->size[j])){
				huntei[j]=1;
			}
		}
		if(((ene->x[j]+ene->ecx[j])>(790))||((ene->x[j]+ene->ecx[j])<(0))
		 ||((ene->y[j]+ene->ecy[j])<(0))  ||((ene->y[j]+ene->ecy[j])>(590))){
				huntei[j]=1;
		}
				
		if(huntei[j]==0){
			ene->x[j]+=ene->ecx[j];	
			ene->y[j]+=ene->ecy[j];
		}
	}
	

}

void battle_m(){
	int i;
	int mapimg;
	mapimg=LoadGraph("usmap1.png");	
	 
	struct uni mainuni;
	struct enemys ene;
	struct zyoukyou fase;
	struct bullet bullet[30];
	struct enebullet ebullet[32];
	struct obj obj; 
	
	dainyuu(&mainuni,&ene,bullet,&fase,&obj,ebullet);

	while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( bKey ) && !bKey[KEY_INPUT_ESCAPE]){
 
	map(mapimg);
	object(&obj);
	
	eneattack(ebullet,&fase,&ene,&mainuni);
	enemyai_ai(bullet,ebullet,&ene,&mainuni,&fase,&obj);

			enemy(&ene,&mainuni,bullet,ebullet,&fase);
			emove(&mainuni,&ene,&obj);		 
	 	
	if(mainuni.HP>0){
		move(&mainuni,&ene,&obj,&fase);
		attack(bullet,&mainuni,&fase);
	}

	huntei(bullet,&mainuni,&fase,&ene,&obj);
	enehuntei(ebullet,&mainuni,&fase,&ene,&obj);
		
	ScreenFlip();

	}
 
}	
/////////////////////////↓enemyaiです//////////////////////////////////
#include"DxLib.h"
 struct uni{
		int image[20];
		double x,y;
		double rad;
		int HP;
		int size;
		int walk;
		int zyoutai;
		int move,rock;
		 
	};
struct enemys{

		int image[128];	 
		int x[32],y[32];
		int  ecx[32],ecy[32];
		double rad[32];
		int HP[32];
		int size[32];
		int trigger[32];


		int cHP[32];
		int move[32];
		int aicount[32];
		int hitbullet[32];
		int uniHP[32];
		int bx[32],by[32];
		int step[32];
		int movech[32];

	};
struct bullet{
		 	 
		double x,y;
		int    fl;
		double rad;

};
struct enebullet{
		double x[30],y[30];
		int    fl[30];
		double rad[30];

};
struct obj{
		int image[32];
		int x[16],y[16];
		int HP[16];
		int size[16];

};
struct zyoukyou {
		 
		int image[5];
		int speed;
		int count;
		int ecount;
		int tyakudann,etyakudann;
		int x,y,ex,ey;
	 
};
void mainai(int i,struct enemys *ene,struct enebullet *ebullet){
	 
	DrawFormatString( 0, 0, GetColor(0,0,0), " %d" ,ene->aicount[i]%5);// ene->trigger[1]);
	ene->aicount[i]+=1;
	int x,y;
	x=0;
	y=0;

	DrawFormatString( 0, 160, GetColor(0,0,0), "ene 1 HP %d  ene 2 HP %d ",ene->HP[1],ene->HP[2] );	

//↓攻撃されたら移動する
	if(ene->aicount[i]%5==0){
		ene->cHP[i]=ene->HP[i];
	}

	if(ene->HP[i]<(ene->cHP[i])){
		ene->move[i]=1;
	}

	if(ene->move[i]==1){

		if((ene->bx[i]==ene->x[i])&&(ene->by[i]==ene->y[i])){	
			ene->step[i]+=1;
			if(ene->step[i]==9){
				ene->step[i]=0;
			}
			ene->movech[i]+=1;
			//	ene->movech[i]=0;
		//	if(ene->movech[i]==3){
		//		ene->step[i]-=1;
		//		ene->ecx[i]*=-8;
		//		ene->ecy[i]*=-8;
		//		
			//DrawFormatString( 0, 20, GetColor(0,0,0), "前座標と同一 %d  %d" ,ene->bx[1],(int)ene->x[1]); 
		
		DrawFormatString( 0, 20, GetColor(0,0,0), "step0 %d  ",ene->step[0] );	
		DrawFormatString( 0, 40, GetColor(0,0,0), "step1 %d  ",ene->step[1] );
		

		if(ene->step[i]==1){
			ene->ecx[i]=3;	 
		}	
		if(ene->step[i]==2){
			ene->ecx[i]=0;
			ene->ecy[i]=2;
		}
		if(ene->step[i]==3){	
			ene->ecx[i]=-1;
			ene->ecy[i]=-2;
		}
		if(ene->step[i]==4){
			ene->ecx[i]=0;
			ene->ecy[i]=1;
		}
		if(ene->step[i]==5){
			ene->ecy[i]=2;
		}
		if(ene->step[i]==6){
			ene->ecy[i]=-2;
		}
		if(ene->step[i]==7){
			ene->ecx[i]=-2;
			ene->ecy[i]=-2;
		}
		if(ene->step[i]==8){
			ene->ecx[i]=2;
			ene->ecy[i]=0;
		}
		
		//	DrawFormatString( 0, 40, GetColor(0,0,0), "敵座標 %d  %d" ,ene->x[1],(int)ene->y[1]); 
		DrawFormatString( 0, 60, GetColor(0,0,0), "敵前回座標との差分 %d  %d" ,(ene->bx[i]-ene->x[i]),ene->by[i]-ene->y[i]);	
		
	}
	//if(ene->aicount[1]%5==0){
			ene->bx[i]=ene->x[i];
			ene->by[i]=ene->y[i];
	}
	

	ene->trigger[i]=0;
//↑
//攻撃当たって無かったら移動する
	//if(ebullet[1]->fl[5]==1){
		//	
//	}
//

	//ene->cHP[1]=ene->HP[1];
		//ene->ecy[i]=-1;

}
void enemyai_ai(struct bullet *bullet,struct enebullet *ebullet,struct enemys *ene,struct uni *mainuni,struct zyoukyou  *fase,struct obj *obj){
				int i;
				
				for(i=0;i<32;i++){
				//i=1;
					if(ene->HP[i]>0){
						mainai(i,ene,ebullet);
					}
				}
					//ene->trigger[1]=1;
					//ene->ecx[1]=-1;
			//	DrawFormatString( 0, 0, GetColor(0,0,0), " %d" ,);// ene->trigger[1]);
				 
}

Re: 複数の敵同士の判定がでできません

Posted: 2011年6月10日(金) 21:21
by a5ua
627行目
×if(i==!j){
○if(i!=j){

Re: 複数の敵同士の判定がでできません

Posted: 2011年6月10日(金) 21:33
by 奥兵
非常に素早い返信ありがとうございます。
おかげさまでしっかり動いてくれました^^
もう少ししっかり基本を押さえたいと思います。
本当にありがとうございました。

Re: 複数の敵同士の判定がでできません

Posted: 2011年6月10日(金) 21:33
by 奥兵
非常に素早い返信ありがとうございます。
おかげさまでしっかり動いてくれました^^
もう少ししっかり基本を押さえたいと思います。
本当にありがとうございました。