目录

1. scanf控制飞机移动

2. getch控制飞机

三.显示复杂的飞机图案

四.发射激光

5.打靶练习


    在前面小球的基础上实现一个简单的飞机小游戏,主要包括飞机的显示,控制移动,显示复杂图案,发射激光,打靶练习等操作。

1. scanf控制飞机移动

   第一步利用scanf输入不同的字符,按a,s,d,w健后改变坐标x,y的值,从而控制飞机的移动

#include<stdio.h>
int main()
{
	int i,j;
	int x=5;
	int y = 10;
	char input;
	
	while(1)
	{
		system("cls");
		//输出飞机上面的空行
		for(i=0;i<x;i++) 
		  printf("\n");
		//输出飞机左边的空格
		for(j = 0;j<y;j++)
		  printf(" ");
		 printf("*"); //输出飞机 
		 printf("\n");
		 
		 scanf("%c",&input);
		 if(input=='a')
		  y--;
		 if(input=='d') 
		  y++;
		 if(input=='w')
		  x--;
		  if(input=='s')
		  x++;
	}
	return 0;
 }

awt飞机游戏 java 飞机游戏编程microbit_awt飞机游戏 java

2. getch控制飞机

   scanf函数要求每输入一个字符按回车健后才能执行,交互效果不好,因此第二步使用一个新的输入函数getch()(#include<conio.h>),不需要回车就可以得到输入的控制字符。另外,kbhit()函数在用户有键盘输入时返回1,否则返回0;在没有键盘输入时if(kbhit())下面的语句不会运行,从而避免出现用户不输入游戏就暂停的情况。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h> 
int main()
{
	int i,j;
	int x=5;
	int y = 10;
	char input;
	
	while(1)
	{
		system("cls");
		//输出飞机上面的空行
		for(i=0;i<x;i++) 
		  printf("\n");
		//输出飞机左边的空格
		for(j = 0;j<y;j++)
		  printf(" ");
		 printf("*"); //输出飞机 
		 printf("\n");
		 
		 if(kbhit())  //判断是否输入 
		 {
		   input = getch();  //根据用户的不同输入来移动,不必回车 
	
		 if(input=='a')
		  y--;
		 if(input=='d') 
		  y++;
		 if(input=='w')
		  x--;
		  if(input=='s')
		  x++;
       	}
       }
	return 0;
}

三.显示复杂的飞机图案

      前面的飞机图案用一个*表示,太简单,第三步显示复杂的飞机图案,并可以用a,s,d,w健控制飞机上下左右移动。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h> 
int main()
{
	int i,j;
	int x=5;
	int y=10;
	char input;
	while(1)
	{
		system("cls");
		//输出飞机上面的空行
		for(i=0;i<x;i++) 
		  printf("\n");
		  
		//下面输出一个复杂的飞机图案 
		for(j=0;j<y;j++)
		  printf(" ");
	   	printf("  *\n"); //输出飞机 
		for(j=0;j<y;j++)
		  printf(" ");
		printf("*****\n");
		for(j=0;j<y;j++)
		   printf(" ");
		printf(" * * \n");
		 
		 if(kbhit())  //判断是否输入 
		 {
		   input = getch();  //根据用户的不同输入来移动,不必回车 
	
		 if(input=='a')
		  y--;
		 if(input=='d') 
		  y++;
		 if(input=='w')
		  x--;
		  if(input=='s')
		  x++;
       	}
       }
	return 0;
}

四.发射激光

    按空格健后让飞机发射激光子弹,即在飞机上面显示一列空格‘|’,第四步定义变量isFire,用来记录飞机是否处于发射子弹的状态。当isFire等于1时,将在飞机的正上方输出激光竖条。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h> 
int main()
{
	int i,j;
	int x=5;
	int y=10;
	char input;
	int isFire = 0;
	
	while(1)
	{
		system("cls");
		if(isFire==0)
		{
		   for(i=0;i<x;i++)	
		  	 printf("\n");
		 } 
		else
		{
			for(i=0;i<x;i++)
			 {
			 	for(j=0;j<y;j++)
			 	    printf(" ");
		   	printf("  |\n");
			 }			 	
			 isFire = 0;	
		  }
		//下面输出一个复杂的飞机图案 
		for(j=0;j<y;j++)
		  printf(" ");
	   	printf("  *\n"); //输出飞机 
		for(j=0;j<y;j++)
		  printf(" ");
		printf("*****\n");
		for(j=0;j<y;j++)
		   printf(" ");
		printf(" * * \n");
		 
		 if(kbhit())  //判断是否输入 
		 {
		   input = getch();  //根据用户的不同输入来移动,不必回车 
	
		 if(input=='a')
		  y--;
		 if(input=='d') 
		  y++;
		 if(input=='w')
		  x--;
		  if(input=='s')
		  x++;
		  if(input==' ')
		  isFire = 1;
       	}
       }
	return 0;
}

5.打靶练习

    第五步在第一行增加一个靶子‘+’,控制飞机发射激光击中它。变量isKilled用来储存是否被击中,isKill等于0显示靶子,当isKIll等于1时不在显示靶子。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h> 
int main()
{
	int i,j;
	int x=5;
	int y=10;
	char input;
	int isFire = 0;
	
	int ny=5;
	int iskilled=0; 
	
	while(1)
	{
		system("cls");
		
		if(!iskilled)
		{
			for(j=0;j<=ny;j++)
			   printf(" ");
			printf("+\n");
		}
		
		if(isFire==0)
		{
		   for(i=0;i<x;i++)	
		  	 printf("\n");
		 } 
		else
		{
			for(i=0;i<x;i++)
			 {
			 	for(j=0;j<y;j++)
			 	    printf(" ");
		   	printf("  |\n");
			 }	
			 if(y+2 == ny)
			  iskilled = 1;
			 isFire = 0;	
		  }
		//下面输出一个复杂的飞机图案 
		for(j=0;j<y;j++)
		  printf(" ");
	   	printf("  *\n"); //输出飞机 
		for(j=0;j<y;j++)
		  printf(" ");
		printf("*****\n");
		for(j=0;j<y;j++)
		   printf(" ");
		printf(" * * \n");
		 
		 if(kbhit())  //判断是否输入 
		 {
		   input = getch();  //根据用户的不同输入来移动,不必回车 
	
		 if(input=='a')
		  y--;
		 if(input=='d') 
		  y++;
		 if(input=='w')
		  x--;
		  if(input=='s')
		  x++;
		  if(input==' ')
		  isFire = 1;
       	}
       }
	return 0;
}