ある敵を正面からは射撃でダメージが通らず、回り込んで背面もしくは側面から攻撃しなければならないようにしたいのですがうまくいきません。
プログラムを走らせると最初は正面からの攻撃は判定をとらないのですが、
しばらく適当に動いていると何故か攻撃が正面から通るようになってしまいます。
VC++2008 DXライブラリ使用 OSは7です。
プログラミングは初心者です。
↓判定の関数です
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;
int x,y;
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;
if(j!=4){//四番が正面から通したくない敵です
ene->HP[j]=ene->HP[j]-1;
}else{
if(abs(ene->rad[j]-bullet[i].rad)>(PI)){//ここで角度の差を出そうとしてます
ene->HP[j]-=3;
}
}
if(ene->HP[j]<=0){
ene->cdie[j]=25;
}
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);
}
x=(int)(mainuni->x+(sin(mainuni->rad)*10)+cos(mainuni->rad)*30);
y=(int)(mainuni->y+(cos(mainuni->rad)*-10)+sin(mainuni->rad)*30);
for(j=0;j<32;j++){
range=ene->size[j]*ene->size[j];
if((mainuni->clock>12)&&(mainuni->clock<30)){
if((range>((ene->x[j]-x)*(ene->x[j]-x)+(ene->y[j]-y)*(ene->y[j]-y)))){
if(ene->HP[j]>0){
ene->HP[j]=ene->HP[j]-3; //ここは格闘なのでスルーしてください
//mainuni->clock=30;
}
if(ene->HP[j]<=0){
ene->cdie[j]=35;
}
}
}
}
}