C/C++实现简单打飞机小游戏【初版】
文章目录
- C版本
- 点子
- 初版1.1 静止的飞机
- 初版1.2 动态飞机(使用按键控制飞机移动)
- 初版1.3 动态飞机(按空格发射和关闭激光)
- 初版1.4 动态飞机(按空格发射一次激光,移动时关闭)
- 初版1.5 飞机打靶(添加和击毁靶子)
C版本
点子
实现一个字符飞机,按asdw键后改变飞机的坐标位置(x, y),控制飞机上下左右移动,空格键开火。注意:这里的坐标指得是飞机头的坐标。
初版是设计一个靶子,飞机按空格键后发射激光击毁靶子。然后让靶子自由移动,添加分数统计和显示等。
进阶版是将游戏模块化,设计自由下落的敌机,被击中后绘制简易爆炸效果等等。
更高级是添加关卡和多种武器等等。
初版1.1 静止的飞机
同小球弹跳一样,在控制台输出一些空格和换行控制飞机位置。飞机形状如下:
********** * **
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
void PrintPlane(int x, int y) { //输出飞机图形for (int i = 0; i < y; i++) puts(""); for (int i = 0; i < x; i++) putchar(' '); puts("*");for (int i = 0; i < x - 1; i++) putchar(' '); puts("***");for (int i = 0; i < x - 2; i++) putchar(' '); puts("*****");for (int i = 0; i < x - 3; i++) putchar(' '); puts("* * *");for (int i = 0; i < x; i++) putchar(' '); puts("*");
}
int main() {int x, y;x = 10, y = 5; PrintPlane(x, y); return 0;
}
效果如下:
初版1.2 动态飞机(使用按键控制飞机移动)
可以用scanf输入字符,但是会影响游戏体验,毕竟scanf需要敲回车。替代的是使用conio.h中的getch函数。
conio.h不是C标准库中的头文件,在C standard library,ISO C 和POSIX标准中均没有定义。
conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。
conio库不仅适用于 Windows 平台,在 Linux 下也可使用.网上已经有兼容包,下载后打开就可使用。
发现一个问题,如果移动到上左的边界时,飞机的输出会变形…为此添加边界检查。
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
void PrintPlane(int x, int y) { //输出飞机图形for (int i = 0; i < y; i++) puts(""); for (int i = 0; i < x; i++) putchar(' '); puts("*");for (int i = 0; i < x - 1; i++) putchar(' '); puts("***");for (int i = 0; i < x - 2; i++) putchar(' '); puts("*****");for (int i = 0; i < x - 3; i++) putchar(' '); puts("* * *");for (int i = 0; i < x; i++) putchar(' '); puts("*");
}
int main() {int x, y;x = 10, y = 5; char c;while (1) {PrintPlane(x, y); c = getch();switch (c) {case 'a': x -= (x > 3) ? 1 : 0; break;case 's': y++; break;case 'd': x++; break;case 'w': y -= (y > 0) ? 1 : 0; break;case ' ': break;} system("cls");}return 0;
}
初版1.3 动态飞机(按空格发射和关闭激光)
和按其他方向键一样,按空格键后同样要重新绘制图形。让飞机发射激光,即在飞机上方显示一列竖线"|"。
发射模式:按了空格键后就会不断的发射激光,如果再按一次就会关闭激光。移动时会自动发射激光。
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
void PrintScreen(int x, int y, int isFired) {for (int i = 0; i < y; i++) { //不发射激光时会输出多余的空格for (int j = 0; j < x; j++) putchar(' ');if (isFired) putchar('|');puts("");}for (int i = 0; i < x; i++) putchar(' '); puts("*");for (int i = 0; i < x - 1; i++) putchar(' '); puts("***");for (int i = 0; i < x - 2; i++) putchar(' '); puts("*****");for (int i = 0; i < x - 3; i++) putchar(' '); puts("* * *");for (int i = 0; i < x; i++) putchar(' '); puts("*");
}
int main() {int x, y;x = 10, y = 5; char c;int isFired = 0;while (1) {PrintScreen(x, y, isFired); c = getch();switch (c) {case 'a': x -= (x > 3) ? 1 : 0; break;case 's': y++; break;case 'd': x++; break;case 'w': y -= (y > 0) ? 1 : 0; break;case ' ': isFired = isFired == 0 ? 1: 0; break;} system("cls");}return 0;
}
当然,也可以改成按空格键后发射一次激光,然后移动时关闭激光。一般来看,应该以这种模式为主,不然玩家只需要开启一次激光就可以了。哪有这么好的事呢??
另外也不一定要是激光,也可以添加其他的武器,如用‘^'表示子弹。
初版1.4 动态飞机(按空格发射一次激光,移动时关闭)
这里空格不具有关闭激光的功能,仅仅是开启激光。因此,改为使用全局变量isFired。
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
int isFired = 0;
void PrintScreen(int x, int y) {if (!isFired) for (int i = 0; i < y; i++) puts(""); //不发射激光时else {for (int i = 0; i < y; i++) {for (int j = 0; j < x; j++) putchar(' ');if (isFired) printf("|\n");}isFired = 0; //关闭激光} /* 打印飞机 */for (int i = 0; i < x; i++) putchar(' '); puts("*");for (int i = 0; i < x - 1; i++) putchar(' '); puts("***");for (int i = 0; i < x - 2; i++) putchar(' '); puts("*****");for (int i = 0; i < x - 3; i++) putchar(' '); puts("* * *");for (int i = 0; i < x; i++) putchar(' '); puts("*");
}
int main() {int x, y;x = 10, y = 5; char c; while (1) {PrintScreen(x, y); c = getch();switch (c) {case 'a': x -= (x > 3) ? 1 : 0; break;case 's': y++; break;case 'd': x++; break;case 'w': y -= (y > 0) ? 1 : 0; break;case ' ': isFired = 1; break;} system("cls");}return 0;
}
初版1.5 飞机打靶(添加和击毁靶子)
先用‘+‘作为靶子。当飞机头的x坐标和靶子对齐时,全局变量is_killed置1,刷新屏幕取消靶子输出。
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
int isFired = 0, is_killed = 0;
int target_x = 12; //靶子的x坐标, y = 0
void PrintScreen(int x, int y) {if (!is_killed) { //打印靶子 for (int i = 0; i < target_x; i++) printf(" ");printf("+\n"); }if (!isFired) for (int i = 0; i < y; i++) puts(""); //不发射激光时else { //发射激光 for (int i = 0; i < y; i++) {for (int j = 0; j < x; j++) putchar(' ');if (isFired) printf("|\n");}isFired = 0;if (x == target_x) is_killed = 1; //击中靶子 } /* 打印飞机 */for (int i = 0; i < x; i++) putchar(' '); puts("*");for (int i = 0; i < x - 1; i++) putchar(' '); puts("***");for (int i = 0; i < x - 2; i++) putchar(' '); puts("*****");for (int i = 0; i < x - 3; i++) putchar(' '); puts("* * *");for (int i = 0; i < x; i++) putchar(' '); puts("*");
}
int main() {int x, y;x = 20, y = 15; char c; while (1) {PrintScreen(x, y); c = getch();switch (c) {case 'a': x -= (x > 3) ? 1 : 0; break;case 's': y++; break;case 'd': x++; break;case 'w': y -= (y > 0) ? 1 : 0; break;case ' ': isFired = 1; break;} system("cls");}return 0;
}
这时的程序仍然很简陋,可以思考一下,如何让靶子自己移动?如何统计和显示得分?可以自己作为练习。我会将其作为进阶版的飞机游戏实现。
C/C++实现简单打飞机小游戏【初版】相关推荐
- C语言——简单的飞机小游戏
目录 前言 一.先看代码 二.代码解析 1.飞机图案的打印 2.控制飞机移动 getch() 函数 kbhit() 函数 3.发射激光 4.打击靶子 总结 前言 代码参考了<C语言课程设计与游戏 ...
- Java飞机小游戏制作简单实现详细小结
567881@ftJava小游戏开发 Java飞机小游戏制作简单实现小结 本人原来是个技术小白,寒假我跟着高淇老师的Java300集开始自学Java,跟着做了一个飞机大战小游戏,已经实现了飞机的自由移 ...
- 用c++做一个简单的打飞机小游戏(详细说明与注释)
用c++做一个简单的打飞机小游戏(详细说明与注释) 说明: 代码长度5k多,行数200多行. 不仅没有压行,反而为了条理清晰一点所以很多中间加空换行,把很多可以写在一起的分割成了几个函数. 为了不会忘 ...
- 用JAVA写个飞机小游戏玩玩吧
闲来无事写了个飞机小游戏. 设定很简单,子弹打到飞机就结束游戏. 实现步骤如下,有问题可以评论区讨论: 首先建立一个PlayGame项目和它之下的包: MyGameFrame(游戏实现)类: pack ...
- c语言射击类打飞机小游戏感悟
c语言:简单飞机射击小游戏 使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,操作方法是"a""d""w"或者"←" ...
- C语言 打飞机 小游戏
C语言实现简单的打飞机小游戏 编译环境:vs2019 需求: 在同一个平面内,控制大炮发射的三个方向,空格发射炮弹,敌军和友军飞机会一直随机在天上飞过,击中天上飞行的敌军飞机加一分,击中友军飞机减一分 ...
- Python编写微信打飞机小游戏(三)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
- Python编写微信打飞机小游戏(八)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
- Python编写微信打飞机小游戏(十一)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
最新文章
- TensorFlow各版本下载地址,强烈推荐
- IE9上特定网站不断崩溃的故障
- 树莓派html5播放器,树莓派|5 个很适合在课堂上演示的树莓派项目
- WordPress前台后台出现一片空白的原因以及解决办法
- win10下Rabbitmq的安装和配置
- android提交项目到svn,Android Studio 配置SVN,通过Share project提交项目和实现忽略文件...
- 定时备份 MySQL 并上传到七牛
- Spark精华问答 | RDD的核心概念是什么?
- C#LeetCode刷题-字符串
- 美联社将在以太坊区块链记录NCAA锦标赛篮球比分和赛程表
- Slim Span UVA - 1395 (并查集)
- 20155307《网络对抗》信息搜集与漏洞扫描
- 计算机硬盘分区知识简介、Linux企业级分区方案建议
- unity学习笔记(二)—— 制作第一个小游戏
- word打开很慢解决办法
- 红米K40使用半个月,谈谈上手体验,“优缺点”非常明显!
- Java/java程序设计:房屋出租系统:要求实现:新增房源,查找房屋信息,修改房屋信息,删除房屋信息,显示所有房屋列表,退出房屋管理系统;
- 关于使用google map实现周边搜索的功能
- 两化融合贯标之-申请表案例
- markdown语法总结