#include<stdio.h>
#include<windows.h>
#include<conio.h>
#define High 27 //定义边界
#define Width 45
#define EnemyNum 5 //敌机数目
//定义全局变量
int canvas[High][Width]={0}; //定义元素,0为空格,1为飞机,2为子弹,3为敌机,4为右下边界
int position_x,position_y; //飞机坐标
int enemy_x[EnemyNum],enemy_y[EnemyNum]; //敌机坐标
int score; //得分
int Speed; //敌机速度
int bulletwidth; //子弹宽度
void HideCursor() //隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void gotoxy(int x,int y) //光标移动到(x,y)位置
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle,pos);
}
void startup() //数据初始化
{
position_x=High-2; //初始化飞机位置
position_y=Width/2;
canvas[position_x][position_y]=1;
bulletwidth=0; //初始化子弹宽度
Speed=25; //敌机初始最小速度
int k;
for(k=0;k<EnemyNum;k++)
{
enemy_x[k]=rand()%2; //初始化敌机位置
enemy_y[k]=rand()%Width;
canvas[enemy_x[k]][enemy_y[k]]=3;
}
score=0; //得分初始化
HideCursor();
}
void show() //显示界面
{
int i,j;
gotoxy(0,0);
for(i=0;i<=High;i++)
{
for(j=0;j<=Width;j++)
{
if(canvas[i][j] == 1)
printf("*"); //输出飞机
else if(canvas[i][j]==2)
printf("|"); //输出子弹
else if(canvas[i][j]==3)
printf("@"); //输出敌机
else if(canvas[i][j]==4)
printf("#"); //输出边界#
else
printf(" "); //输出空格
}
printf("\n");
}
printf("得分:%d\n",score);
}
void updateWithoutInput() //无需用户输入的更新
{
int i,j,k;
for(i=0;i<High;i++)
{
for(j=0;j<Width;j++)
{
if(canvas[i][j]==2)
{
for(k=0;k<EnemyNum;k++)
{
if(i==enemy_x[k] && j==enemy_y[k]) //击中敌机
{
score++;
if(score==5||score==10) //得分达到标准子弹加宽
bulletwidth++;
canvas[enemy_x[k]][enemy_y[k]]=0; //生成新的敌机
enemy_x[k]=rand()%2;
enemy_y[k]=rand()%Width;
canvas[enemy_x[k]][enemy_y[k]]=3;
}
}
canvas[i][j]=0; //子弹自动上升
if(i>0)
canvas[i-1][j]=2;
}
}
}
for(k=0;k<EnemyNum;k++)
{
if(enemy_x[k]>High) //生成新的敌机
{
canvas[enemy_x[k]][enemy_y[k]]=0;
enemy_x[k]=rand()%2;
enemy_y[k]=rand()%Width;
canvas[enemy_x[k]][enemy_y[k]]=3;
}
}
static int speed=0;
if(speed<Speed) //敌机速度
speed++;
if(speed==Speed)
{
for(k=0;k<EnemyNum;k++)
{
canvas[enemy_x[k]][enemy_y[k]]=0; //敌机自动下落
enemy_x[k]++;
canvas[enemy_x[k]][enemy_y[k]]=3;
}
speed=0;
}
for(k=0;k<EnemyNum;k++)
{
if(enemy_x[k]==position_x&&enemy_y[k]==position_y) //飞机撞毁
{
printf("游戏结束\n");
exit(0);
}
}
}
void updateWithInput() //需用户输入的更新
{
char input;
if(kbhit())
{
input=getch();
if(input=='w' && position_x>0) //控制飞机方向
{
canvas[position_x][position_y]=0;
position_x--;
canvas[position_x][position_y]=1;
}
else if(input=='s' && position_x<High-1)
{
canvas[position_x][position_y]=0;
position_x++;
canvas[position_x][position_y]=1;
}
else if(input=='a' && position_y>0)
{
canvas[position_x][position_y]=0;
position_y--;
canvas[position_x][position_y]=1;
}
else if(input=='d' && position_y<Width-1)
{
canvas[position_x][position_y]=0;
position_y++;
canvas[position_x][position_y]=1;
}
else if(input=' ') //space发射子弹
{
int left,right;
int x;
left=position_y-bulletwidth;
if(left<0)
left=0;
right=position_y+bulletwidth;
if(right>Width-1)
right=0;
for(x=left;x<=right;x++)
canvas[position_x-1][x]=2;
}
}
}
int main()
{
startup();
system("color 2f");
while(1)
{
show(); //显示界面
updateWithoutInput(); //无需用户输入的更新
updateWithInput(); //需用户输入的更新
}
}
C语言实现空战游戏
猜你喜欢
转载自blog.csdn.net/qq_40685101/article/details/80327282
今日推荐
周排行