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.后记
这个程序还存在一些问题,比如子弹轨迹没有实现,目标应该是个随机位置等,我们在下一篇中将会继续优化。
扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。


