C语言实现【小游戏——飞机大战】


1.目标要求:

1.可以控制飞机上下左右移动和发射子弹
2.有计分,射中靶子分数加一
3.有子弹数,子弹数为0时结束游戏


2.C语言代码:
#include<stdio.h>
#include<stdlib.h> 
#include<conio.h> 
#include<time.h>
/*
						《飞机大战》	by:你最珍贵
	 —————————————————————————————————————— 
	|控制信号:     |    上    |	   下    |    左    |    右    |    开火    |
	 ——————————————————————————————————————	 
	|    键盘:     |    i     |	    k    |     j    |     l    |    空格    | 
	 —————————————————————————————————————— 
	 
	 1.最初10颗子弹
	 2.开火:子弹-1;
	 3.击中:分数+1;子弹+3;
	 4.子弹:超过2秒未被击中,子弹会更新位置 
	 5.子弹=0时,游戏结束 

*/
int main(){
	int Line=8,Column=20,aim_pt = rand()%70+5;	 //设定默认值:行=8;列=20;靶子位置随机取 
	int i,j;	//i;j; 
	char contr;	//控制信号 
	int isFired=0,aim=1,cnt=0,bullets=10,time_i=1;	// 是否开火;靶子状态:aim=0显示满天星aim=1显示靶子;
	                                         //计分器;时间标记,为1重新计时间起始值 
	time_t time_begin,time_end;	//时间开始终止变量 ,time_t是时间的单位long型 
	double time_cost; 	//时间差,如果>固定值则更新靶子位置 
		
		
		while( bullets>0 ){	//子弹数>0时,保持程序一直循环
			system("cls");	//清屏,每更新一次屏幕,清除上一次屏幕 
			time(&time_end);	//时刻计算时间终止值 
			time_cost = difftime(time_end,time_begin);	//计算时间差(靶子位置不动的时间差) 
			
			if( aim==1 && Column+2==aim_pt+2 && isFired==1){	//【如果击中】(靶子显示状态+位置对+且开火)
															//aim不显示靶子+更新靶子位置+重新计时+计分器加1+子弹加3 
				aim = 0;	//击中的话下一状态输出满天星,不输出靶子 
				aim_pt = rand()%70+5;	//靶子位置取随机,随机数为整数,取余70再加5,随机数范围就是(5,75) 
				time_i=1;	//重新计时 
				cnt++;	//计分器加一 
				bullets+=3;	//子弹+3 
			} else if( time_cost>2 ){		//【如果没击中】&&时间长
										//更新靶子位置+重新计时 
			    aim_pt = rand()%70+5;	//靶子位置取随机
				time_i=1;	//重新计时 
			}
			
			//下面【输出飞机前页面信息】 
			printf("【子弹数:%3d】                游戏\
:《飞机大战》                  【分数:%3d】\n",bullets,cnt); 
			printf("———————————————————————————\
————————————\n");
			if( aim==0 ){ 	//【aim=0时】,显示满天星 ,下一状态aim置为1显示靶子 
				printf("**********************************子弹数+3\
*************************************\n");
				printf("\a");//击中提示声音 
				aim++;
			}else if( aim!=0 ){		//【aim为1时】,显示靶子 
				for( j=1; j<=aim_pt; j++)//输出靶子前包含位置信息的的空格 
					putchar(' ');
				printf("  *\n");//输出靶子
				if( time_i ==1){	//time_i=1即重新计时,重新取时间起始值,为使起始值固定time_i再置为0,保证起始值不变 
					time(&time_begin);
					time_i=0;
				} 
			}		
			if( isFired==1 ){	//如果开火信号为1,在飞机上方【输出子弹图案】 
				for( i=1; i<=Line; i++){	//输出飞机上方带子弹的行数 
					for( j=1; j<=Column; j++){	//输出每行内容前相同的空格 
						putchar(' ');
					}
					printf("  |\n");	//输出空格后的子弹形状 
				}
				isFired = 0;	//开火信号不可一直维持,每一次开火之后开火信号被设为0 
			} else if( isFired==0 ){	//如果开火信号为0飞机上方只输出空白图案 
				for( i=1; i<=Line; i++){	//输出飞机上方空的行数 
					putchar('\n');
				}
			}
			//输出【飞机图案】 
			for( i=1; i<=Column; i++){	//输出飞机图像第一行内容前相同的空格 
				putchar(' ');
			}
			printf("  *\n");	//输出飞机图像第一行内容
			for( i=1; i<=Column; i++){	//输出飞机图像第二行内容前相同的空格
				putchar(' ');
			}
			printf("*****\n");	//输出飞机图像第二行内容
			for( i=1; i<=Column; i++){	//输出飞机图像第三行内容前相同的空格
				putchar(' ');
			}
			printf(" * *\n");	//输出飞机图像第三行内容
			//判断【输入信号】 
			if( contr = getch() ){	//如果有输入则改变相应的变量值,控制飞机 。无输入则维持原先位置 
									//获得输入的控制字符,getch()不回车即可接受 	
				if( contr=='j'){	//输入j向左移动 ,遇边界不动 
					Column = (Column==0)? 0:Column-1; 
				}else if( contr=='l'){	//输入l向右移动 ,遇边界不动 
					Column = (Column==73)? 73:Column+1; 
				}else if( contr=='i'){	//输入i向上移动 ,遇边界不动
					Line = (Line==0)? 0:Line-1;
				}else if( contr=='k'){	//输入k向下移动 ,遇边界不动
					Line = (Line==18)? 18:Line+1;
				}else if( contr==' '){	//输入为空格,开火信号为1 
					isFired = 1;
					bullets--;
				}
			}					
		}
		//输出失败页面
		system("cls");	//清屏  
		for( j=1; j<=8; j++) 
			putchar('\n'); 
		for( j=1; j<=30; j++)
			putchar(' ');
		printf("GAME OVER!\n");
		for( j=1; j<=8; j++)//输出空白行 
			putchar('\n'); 
		system("pause");	//暂停一次
		system("pause");	//暂停一次         
	
	return 0;
}

3.运行结果:

小游戏玩法:

					《飞机大战》	by:你最珍贵
 —————————————————————————————————————————————————————————————————— 
| 控制信号:|    上    |	   下    |    左     |    右    |    开火    |
 ——————————————————————————————————————————————————————————————————	 
|    键盘:|    i     |	    k    |     j    |     l    |    空格    | 
 —————————————————————————————————————————————————————————————————— 

飞机大战 VS飞机大战发射子弹时

——————不发射子弹时———————————发射子弹时——————
飞机大战击中时VS飞机大战游戏结束时
——————子弹击中时—————————————游戏结束时——————

发布了8 篇原创文章 · 获赞 1 · 访问量 179

猜你喜欢

转载自blog.csdn.net/weixin_43503632/article/details/105326221