C language implementation [small game-aircraft war]


1.目标要求:

1. Can control the aircraft to move up, down, left and right and launch bullets
2. There is a score, the target score is increased by one
3. There are bullets, the game ends when the bullets are 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.运行结果:

Small gameplay:

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

Airplane war VSWhen a bullet is launched in a plane war

—————— When the bullet is not fired ———————————— When the bullet is fired ——————
When the plane war hitVSAt the end of the airplane war game
—————— When the bullet is hit ————————— ———— At the end of the game ——————

Published 8 original articles · Like1 · Visitors 179

Guess you like

Origin blog.csdn.net/weixin_43503632/article/details/105326221