C语言实现空战游戏

#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();              //需用户输入的更新
    }
}

  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值