里面的元素会突然不动而且飞机出现了两个
#include<stdio.h>
#include <windows.h>
#include<stdlib.h>
#include<conio.h>
#define enemynum 3
int element [20][30];//游戏元素设定
int position_x,position_y;//飞机位置
int enemy_x[enemynum],enemy_y[enemynum];//敌机位置
int score;
int width;
int left,right;
int speedeny;
void gotoxy(int x, int y)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
//隐藏光标函数
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1,0};//第二个值为0表示隐藏光标
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void startup()//游戏初始化
{ element[20][30]={0};
position_x=10;position_y=15;
element[position_x][position_y]=1;
for(int k=0;k<enemynum;k++)
{
enemy_x[k]=rand()%3;enemy_y[k]=rand()%20;
element[enemy_x[k]][enemy_y[k]]=3;
}
width=1;
score=0;
speedeny=1;
HideCursor();
}
void show()//显示画面
{ int i,j;
gotoxy(0,0);
for(i=0;i<20;i++)
{
for(j=0;j<30;j++)
{ if(element[i][j]==1)
{
printf("*");
}else if(element[i][j]==2)
{
printf("|");
}else if(element[i][j]==3)
{
printf("@");
}
else
printf(" ");
}
printf("\n");
} printf("得分为%d\n",score);
}
void updatewhithout()//和用户无关的更新
{
int i,j;
for(i=0;i<20;i++) //子弹滑行
{
for(j=0;j<30;j++)
{
if(element[i][j]==2)
{
element[i][j]=0;
if(i>0)
element[i-1][j]=2;
} for(int x=0;x<enemynum;x++) //当子弹打到敌机时
{
if(element[enemy_x[x]][enemy_y[x]]==2)
{
element[enemy_x[x]][enemy_y[x]]=0;
enemy_x[x]=rand()%3;
enemy_y[x]=rand()%20;
score++;
}
}
}
} static int flag;
if(flag<20)
flag++;
if(flag==20)
{ for(int k=0;k<enemynum;k++)
{
if(enemy_x[k]==20)
{
enemy_x[k]=rand()%3;
enemy_y[k]=rand()%20;
}
element[enemy_x[k]][enemy_y[k]]=0;
enemy_x[k]++;
if(enemy_x[k]==position_x&&enemy_y[k]==position_y)
{ printf("game over");
}
element[enemy_x[k]][enemy_y[k]]=3;
flag=0;
}
}
left=position_y-width;
right=position_y+width;
}
void updatewhith()//和用户有关的更新
{ char ch;
if( kbhit())
ch=getch();
if(ch=='a')
{ element[position_x][position_y]=0;
position_y--;
element[position_x][position_y]=1;
}
if(ch=='d')
{ element[position_x][position_y]=0;
position_y++;
element[position_x][position_y]=1;
}
if(ch=='w')
{ element[position_x][position_y]=0;
position_x--;
element[position_x][position_y]=1;
}
if(ch=='s')
{ element[position_x][position_y]=0;
position_x++;
element[position_x][position_y]=1;
}
if(ch==' ')
{
for(int i=left;i>=left&&i<=right;i++)
element[position_x-1][i]=2;//设置子弹
}
}
int main()
{startup();//游戏初始化
while(1)
{show();//显示画面
updatewhithout();//和用户无关的更新
updatewhith();//和用户有关的更新
}
}
不知道怎么解决,感觉是敌机变化时导致飞机的位置也更新了