シューティング
Posted: 2010年1月18日(月) 12:20
自分は4方向に打つプログラムを作っています。
下のが作成したプログラムです。
しかし玉の描画で、玉が消える前に方向キーを押すと、玉の画像が変わってしまいます。
どうしてでしょうか?コメントお願いします。
void PlayerShotCalc(){
int j;
if(Key[KEY_INPUT_Z]==1 && counter%30==0){
for(j=0;j<50;j++){
if(PlayerShot[j].flag==0){
PlayerShot[j].flag=1;
PlayerShot[j].x=ch1.x;
PlayerShot[j].y=ch1.y;
for(int a=0;a<4;a++)
PlayerShot[j].muki=3-ch1.muki;//上
break;
}
}
}
for(j=0;j<50;j++){
if(PlayerShot[j].flag==1){
PlayerShot[j].x+= SHOTSPEED * cos(90*PlayerShot[j].muki*PI/180);
PlayerShot[j].y+= SHOTSPEED * sin(90*PlayerShot[j].muki*PI/180);
if(PlayerShot[j].y < -32 || PlayerShot[j].x > 672 || PlayerShot[j].y > 512 || PlayerShot[j].x < -32 || can_or_cannot( PlayerShot[j].x ,PlayerShot[j].y ,PlayerShot[j].muki )==1 )
//もし画面外まで来たら、
PlayerShot[j].flag=0; //発射フラグを0に戻す
}
}
}
void PlayerShotDisp(){
int j;
for(j=0;j<50;j++){
PlayerShot[j].range=32;
if(PlayerShot[j].flag==1){
if(ch1.muki==0)
DrawGraph(PlayerShot[j].x,PlayerShot[j].y-18,tama[0],TRUE);
else if(ch1.muki==1)
DrawGraph(PlayerShot[j].x-18,PlayerShot[j].y,tama[1],TRUE);
else if(ch1.muki==2)
DrawGraph(PlayerShot[j].x,PlayerShot[j].y+18,tama[2],TRUE);
else if(ch1.muki==3)
DrawGraph(PlayerShot[j].x+18,PlayerShot[j].y,tama[3],TRUE);
}
}
}
void CollisionDetection(){
for(int i=0;i<100;i++){//ショットの全列分
if(PlayerShot.flag==1){//その弾が発射中なら
for(int s=0;s<100;s++){//全敵100体分
if(enemy.flag==1){//その敵のショットが出現中なら
double x,y;
int range;
x=(int)(PlayerShot.x-enemy.x);
y=(int)(PlayerShot.y-enemy.y);
switch(i){
case 0:
case 5:
case 6:
range=0;
break;
default:
range=9;
break;
}
if( (int)sqrt(x*x+y*y) < range+enemy.range){
enemy.flag=0;
ch1.point++;
PlayerShot.flag=0;
}
}
}
}
}
if(ch1.point == 1){
battle_loop=2;
}
}
下のが作成したプログラムです。
しかし玉の描画で、玉が消える前に方向キーを押すと、玉の画像が変わってしまいます。
どうしてでしょうか?コメントお願いします。
void PlayerShotCalc(){
int j;
if(Key[KEY_INPUT_Z]==1 && counter%30==0){
for(j=0;j<50;j++){
if(PlayerShot[j].flag==0){
PlayerShot[j].flag=1;
PlayerShot[j].x=ch1.x;
PlayerShot[j].y=ch1.y;
for(int a=0;a<4;a++)
PlayerShot[j].muki=3-ch1.muki;//上
break;
}
}
}
for(j=0;j<50;j++){
if(PlayerShot[j].flag==1){
PlayerShot[j].x+= SHOTSPEED * cos(90*PlayerShot[j].muki*PI/180);
PlayerShot[j].y+= SHOTSPEED * sin(90*PlayerShot[j].muki*PI/180);
if(PlayerShot[j].y < -32 || PlayerShot[j].x > 672 || PlayerShot[j].y > 512 || PlayerShot[j].x < -32 || can_or_cannot( PlayerShot[j].x ,PlayerShot[j].y ,PlayerShot[j].muki )==1 )
//もし画面外まで来たら、
PlayerShot[j].flag=0; //発射フラグを0に戻す
}
}
}
void PlayerShotDisp(){
int j;
for(j=0;j<50;j++){
PlayerShot[j].range=32;
if(PlayerShot[j].flag==1){
if(ch1.muki==0)
DrawGraph(PlayerShot[j].x,PlayerShot[j].y-18,tama[0],TRUE);
else if(ch1.muki==1)
DrawGraph(PlayerShot[j].x-18,PlayerShot[j].y,tama[1],TRUE);
else if(ch1.muki==2)
DrawGraph(PlayerShot[j].x,PlayerShot[j].y+18,tama[2],TRUE);
else if(ch1.muki==3)
DrawGraph(PlayerShot[j].x+18,PlayerShot[j].y,tama[3],TRUE);
}
}
}
void CollisionDetection(){
for(int i=0;i<100;i++){//ショットの全列分
if(PlayerShot.flag==1){//その弾が発射中なら
for(int s=0;s<100;s++){//全敵100体分
if(enemy.flag==1){//その敵のショットが出現中なら
double x,y;
int range;
x=(int)(PlayerShot.x-enemy.x);
y=(int)(PlayerShot.y-enemy.y);
switch(i){
case 0:
case 5:
case 6:
range=0;
break;
default:
range=9;
break;
}
if( (int)sqrt(x*x+y*y) < range+enemy.range){
enemy.flag=0;
ch1.point++;
PlayerShot.flag=0;
}
}
}
}
}
if(ch1.point == 1){
battle_loop=2;
}
}