青少年编程知识记录 codecoming

C++小游戏—简单飞机大战(1)

前面文章简单实现了弹球操作,这篇文章我们介绍一下如何实现简单的飞机大战操作。这篇文章我们要实现的效果如下:





第一步:整体思路

  • 在某个点画出飞机的形状

  • 获取用户按下哪个按键

  • 根据按键移动飞机的位置

  • 按空格键发射子弹

  • 子弹击中目标,目标消失



1.在任何一个点画出一个飞机的形状

我们借鉴上次课中的弹球小游戏用来做出一个飞机的形状。参考下面代码:

void showBall(int x,int y) {  	for(int i=0; i<x; i++)  		printf("\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf("  &\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf("**#**\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf(" * *\n");   	  }

2.根据用户按键控制飞机移动

#include<cstdio>  #include<iostream>  #include<conio.h>  using namespace std;    int x=10;  int y=10;  //展示小球   void showBall(int x,int y) {  	for(int i=0; i<x; i++)  		printf("\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf("  &\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf("**#**\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf(" * *\n");   	  }  int main() {    	  	char key; //读取用户输入  	  	while(1){  		system("cls");  		showBall(x,y);  		char key = getch();  		switch(key){  		case 72: //上键  			case 'w':  			case 'W':  				x--;  				break;  			case 80: // 下键  			case 's':  			case 'S':  				x++;  				break;  			case 75: //左键  			case 'a':  			case 'A':  				y--;  				break;  			case  77: //右键  			case  'd':  			case 'D':  				y++;  				break;  			} 	  	}  	    	return 0;  }

效果:





3.按空格键发射子弹

首先可以完成让飞机发射出子弹,我们可以用“|”表示子弹,下面这段代码可以做出发射子弹的效果。



#include<cstdio>  #include<iostream>  #include<conio.h>  using namespace std;    int x=10;  int y=10;  //展示小球   void showBall(int x,int y) {  //	for(int i=0; i<x; i++)  //		printf("\n");  //	for(int j=0; j<y; j++)  //		printf(" ");  	for(int i=0; i<x; i++)  	{  		printf("\n");  	for(int j=0; j<y; j++)  		printf(" ") ;  		printf("  |\n");   	}  	for(int j=0; j<y; j++)  		printf(" ");  	printf("  &\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf("**#**\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf(" * *\n");   	  }  int main() {    	  	char key; //读取用户输入  	  	while(1){  		system("cls");  		showBall(x,y);  		char key = getch();  		switch(key){  		case 72: //上键  			case 'w':  			case 'W':  				x--;  				break;  			case 80: // 下键  			case 's':  			case 'S':  				x++;  				break;  			case 75: //左键  			case 'a':  			case 'A':  				y--;  				break;  			case  77: //右键  			case  'd':  			case 'D':  				y++;  				break;  			} 	  	}  	return 0;  }

效果:



但是我们还没有做到按空格键发射子弹的效果。大概思路是,如果用户按下空格,就显示子弹轨迹,否则只显示飞机位置。

参考代码:

#include<cstdio>  #include<iostream>  #include<conio.h>  using namespace std;    int x=10;  int y=10;  int isFired=0; //用户按下空格键,用来判断是否显示子弹轨迹  //展示小球  void showBall(int x,int y) {    	if(isFired==0) {  		for(int i=0; i<x; i++)  			printf("\n");  	} else {  		for(int i=0; i<x; i++) {  			for(int j=0; j<y; j++)  				printf(" ") ;  			printf("  |\n");  			isFired=0; //移动后子弹不显示  		}  	}  	for(int j=0; j<y; j++)  		printf(" ");  	printf("  &\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf("**#**\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf(" * *\n");    }  int main() {      	char key; //读取用户输入    	while(1) {  		system("cls");  		showBall(x,y);  		char key = getch();  		switch(key) {  			case 72: //上键  			case 'w':  			case 'W':  				x--;  				break;  			case 80: // 下键  			case 's':  			case 'S':  				x++;  				break;  			case 75: //左键  			case 'a':  			case 'A':  				y--;  				break;  			case  77: //右键  			case  'd':  			case 'D':  				y++;  				break;  			case  32:  //空格控制发射子弹  				isFired=1;  				break;  		}  	}  	return 0;  }

效果:



4.构造目标,击中目标。

我们需要在上方构造一个目标。然后让子弹击中目标。我们可以先定义一个目标的坐标。然后移动飞机,射中目标,射中目标的逻辑就是子弹的y坐标和目标的y坐标相同。

参考代码:

#include<cstdio>  #include<iostream>  #include<conio.h>  using namespace std;    int x=10;  int y=10;  int isFired=0; //用户按下空格键,用来判断是否显示子弹轨迹  int isKilled=0; //表示目标是否被击中  int nx=0,ny=5;  //目标的坐标    //展示小球  void showBall(int x,int y) {  	  	if(isKilled==0) //没有击中就显示目标   	{  		for(int i=0;i<ny;i++)  		printf(" ");  		printf("X\n");	  	 }   	if(isFired==0) {  		for(int i=0; i<x; i++)  			printf("\n");  	} else {  		for(int i=0; i<x; i++) {  			for(int j=0; j<y; j++)  				printf(" ") ;  			printf("  |\n");  			if(y+2==ny)  //因为飞机的头空了两个格   				isKilled=1; //表示击中   			isFired=0; //移动后子弹不显示  		}  	}  	for(int j=0; j<y; j++)  		printf(" ");  	printf("  &\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf("**#**\n");  	for(int j=0; j<y; j++)  		printf(" ");  	printf(" * *\n");    }  int main() {      	char key; //读取用户输入  	while(1) {  		system("cls");  		showBall(x,y);  		char key = getch();  		switch(key) {  			case 72: //上键  			case 'w':  			case 'W':  				x--;  				break;  			case 80: // 下键  			case 's':  			case 'S':  				x++;  				break;  			case 75: //左键  			case 'a':  			case 'A':  				y--;  				break;  			case  77: //右键  			case  'd':  			case 'D':  				y++;  				break;  			case  32:  //空格控制发射子弹  				isFired=1;  				break;  		}  	}  	return 0;  }



效果:





5.后记

这个程序还存在一些问题,比如子弹轨迹没有实现,目标应该是个随机位置等,我们在下一篇中将会继续优化。

(adsbygoogle = window.adsbygoogle || []).push({});

作者:亿万年的星光 分类:趣味小程序 浏览: