C语言课程设计 — 飞机大战

这个游戏的功能很单一,也就是“飞机大战”,哈哈哈哈。总共只有300多行代码左右,你也可以想想它会有多简陋,把它复制下来编译一下可以直接执行,需要的同学可以自取~

PS:我运行的环境是 dev c++,前提你要在C99的环境中执行

以下是源代码

#include<stdio.h>
#include<stdio.h>
#include<windows.h>					//将用户从键盘获得的输入进行输出 
#include<conio.h>					//获得用户键盘的输入 
//定义全局变量 
int high,width;						//定义边界 
int position_x,position_y;			//飞机位置 
int bullet_x,bullet_y;				//子弹位置 
int enemy_x,enemy_y;				//敌军飞机 
int score;							//获得分数 
int flag;							//飞机状态 
void gotoxy(int x,int y);  			//光标移动到(x,y)位置
void welcometogame();       		//初始化界面
int color(int c);          			 //更改文字颜色
void explation();					//游戏右侧显示 
void scoreandtips();				//显示游戏提示 
void show();						//显示游戏界面 
void endgame();						//游戏结束 
/**
 * 文字颜色函数     
 */
int color(int c)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);        //更改文字颜色
	return 0;
}
 
 /**
 * 设置光标位置
 */
void gotoxy(int x,int y)
{
    COORD c;
    c.X=x;
    c.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
 
 
 
void welcometogame()  //开始界面
{
	int n;
	color(15);
	gotoxy(43,10);
	printf("飞 机 大 战");
	color(11);
	gotoxy(25, 22);
	printf("1.开始游戏");
	gotoxy(45, 22);
	printf("2.游戏说明");
	gotoxy(65, 22);
	printf("3.退出游戏");
	gotoxy(40,27);
	color(3);
	printf("请选择 1 2 3:");       
	color(14);
    scanf("%d", &n);    		//输入选项
    switch (n)
    {
    	case 1:
    		system("cls");
    		show();
        	break;
    	case 2:
        	explation();      	//游戏说明函数
        	break;
    	case 3:
        	exit(0);     		//退出游戏
        	break;
		default:				
			color(12);
			gotoxy(40,28);
			printf("请输入1-3之间的数!");
			_getch();			//输入任意键
			system("cls");		//清屏
			welcometogame();
    }
}
 

void explation()	//游戏提示 
{
	int i,j = 1;
    system("cls");
  	color(10);
    gotoxy(44,1);
    printf("游戏说明");
    color(2);
    for (i = 3; i <= 28; i++)   //输出上下边框===
	{
		for (j = 6; j <= 80; j++)  //输出左右边框||
		{
			gotoxy(j, i);
			if (i == 3 || i == 28) printf("=");
			else if (j == 6 || j == 80) printf("||");
		}
	}
    color(3);
    gotoxy(20,5);
    printf("1. W,A,S,D 分别控制飞机的上下左右移动");
    color(10);
    gotoxy(20,8);
    printf("2. 按空格发射子弹,打中敌机即可得到一分");
    color(14);
    gotoxy(20,11);
    printf("3.碰到敌机子弹死亡");
    color(11);
    gotoxy(20,14);
    printf("4. ESC :退出游戏");
    color(4);
    gotoxy(20,17);
    printf("5. 玩的愉快!!!");
    color(7);
	gotoxy(20,20);
	printf("/*****按任意键返回主页面*****/");
    _getch();                //按任意键返回主界面
    system("cls");
    welcometogame();
}

void scoreandtips()//游戏侧边提示 
{
	gotoxy(50,8);
	color(14);
	printf("游戏得分:%d ",score);
	gotoxy(50,10);
	printf("用W A S D 分别控制飞机的移动");
	gotoxy(50,12);
	printf("按下空格键即为发射炮弹");
	gotoxy(50,14);
	printf("@  的样子就是敌人的飞机");
}
 

void HideCursor() // 用于隐藏光标
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};  // 第二个值为0表示隐藏光标
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}


void startup()						//数据初始化 
{
	high=20;						//定义游戏界面的高度 
	width=40;						//游戏界面的宽度 
	
	position_x=high-3;				//定义飞机的初始位置 
	position_y=width/2;
	
	bullet_x=0;
	bullet_y=position_y; 
	
	enemy_x=0;
	enemy_y=position_y;
	
	score=0;
	
	flag=0;							//飞机完好 
	
	HideCursor();
}

void show()							//显示界面 
{
	
	int i,j,k;
	for(i=0;i<high;i++)
	{
		for(j=0;j<width;j++)
		{
			if(flag)
				break;
			else if((i==position_x)&&(j==position_y))		//飞机坐标 
			{
				printf("^");
			}
			else if((i==enemy_x)&&(j==enemy_y))				//敌机坐标 
				printf("@");
			else if((i==bullet_x)&&(j==bullet_y))			//子弹坐标 
					printf("|");
			else if ((j==width-1)||(i==high-1)||(j==0)||(i==0))				//打印边界 
				printf("-");
			else
				printf(" ");
		}
		printf("\n"); 
	}
	printf("\n");
	if((position_x==enemy_x)&&(position_y==enemy_y))
	{
		
		flag=1;					//飞机撞毁 游戏结束 
		system("cls");
		printf("游戏结束!!!\n");
		
	}
 	else
 	{
 			printf("分数 %d",score);
    }
	   /** _getch();                //按任意键返回主界面
  	    system("cls");
      	welcometogame();
		*/	

	}
	
void endgame()
{
		int k,f;
		system("cls");
		printf("输入1再玩一次,输入2返回主菜单,输入3退出游戏");
		scanf("%d",&k);
		system("cls");
		switch(k) 
		{
			case 1:
					printf("重新玩游戏");
					system("cls");
					startup();					// 数据初始化
					show();
					break;
			case 2:
					printf("返回主菜单");
					system("cls");
					welcometogame();
					startup();					
					break;
			case 3:printf("退出成功");
					exit(0);
					break;
			default:
					color(12);
					gotoxy(40,28);
					system("cls");
					printf("输入错误,输入任意键回到主菜单");
					_getch();			//输入任意键
					welcometogame();		
					startup();					
					system("cls");   //清屏
		}	
}


void withoutInpute()						//与用户输入无关
{
	if(bullet_x>0)							//子弹上升效果 
		bullet_x--;
	if((bullet_x==enemy_x)&&(bullet_y==enemy_y))		//子弹命中敌机 
	{
		score++;
		bullet_x=-1;	
		enemy_x=1;
		enemy_y=2+rand()%width-2;
	}	


	static int speed;
	if(speed<30)					//减慢敌机速度,不影响飞机和子弹速度 
		speed++;
	if(speed==30)
	{
		if(enemy_x<high)
			enemy_x++;
		else 
		{
			enemy_x=0;
			enemy_y=2+rand()%width-2;
		}
		speed=0;
	}




}
void withInpute()						//与用户输入有关 
{
	char input;
	if(kbhit())										//控制飞机方向 
	{
		input=getch();
		if((input=='w')&&position_x>1)
			position_x--;	
		if((input=='s')&&position_x<high-2)
			position_x++;		
		if((input=='a')&&position_y>1)
			position_y--;	
		if((input=='d')&&position_y<width-2)
			position_y++;
		if(input==' ')
		{
			bullet_x=position_x-1;
			bullet_y=position_y;
		}
	}
}

int main()
{
	system("mode con cols=100 lines=30");   //设置控制台的宽高
	welcometogame();
	startup();					// 数据初始化
	//explation();
	while(1)					//  游戏循环执行
	{
		gotoxy(0,0);
		show();					// 显示画面
		scoreandtips(); 
		if(flag == 1)
		{
			endgame();	
		}
		withoutInpute();		// 与用户输入无关的更新
		withInpute();			// 与用户输入有关的更新
	}
	return 0;
 }  

 

  • 43
    点赞
  • 200
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值