基于C++的简单飞机大战游戏

【题目要求】

设计一个简单的飞机大战游戏,满足以下需求:

1.战场的环境:高度=35, 宽度=55,我方飞机为一架,初始位置在战场环境中的最下方中间位置。

2.按照游戏任务显示指定样式的飞机。

3.敌方飞机出现的位置是随机的,敌方飞机的总数是可以预定的。敌机可以向下移动。

4.能够利用asdw按键分别控制飞机的上下左右移动。

5.按下空格键使我方飞机发射子弹,敌机每隔一段时间自动发射子弹。

6.击中敌机,敌机消失,并且我方分数+1,我方飞机被击中,分数-1,敌机从整个战场飞过而未被击落,分数-1。分数为0时结束游戏。

【提示】

1. 游戏通常会要求在控制台上显示画面(包括敌机,和我方飞机),显示跟之前的最大区别是要求有指定位置,而且更新的频率比较快,所以要求学习和总结:用在游戏程序中的输入和输出有什么特殊的处理方案?
键盘的输入,不在用cin,cin需要处理输入结束的判断,必须在操作中不断输入回车,不符合游戏的操作习惯;
采用C语言中的kbhit()和getch()来 键盘有键按下和按键识别;
上述两个函数需要引入头文件:#include <conio.h> // _kbhit(), _getch()


2. 屏幕的输出: 之前我们学习和使用的输出就是cout,如果要在指定位置上输出字符,会出现两
个问题,之前输出的内容一直还在,屏幕上始终有光标会闪烁,因此需要在输出的时候,要配
合其他的输出操作。
使用gotoxy函数,将光标移动到(x,y)位置。这样,就不需要一直清屏,但是光标的闪烁的问题,可以利用隐藏光标函数HideCursor()。完成上述两个函数需要#include<windows.h>,用到了一些windows提供的API函数。

【设计思路】

为了完成简单的飞机大战游戏的功能,需要经过以下步骤:

(一)实现一个具有基础功能的游戏框架

  • 创建战场,设定代表飞机、子弹对象的底层数字。
  • 实现与用户输入无关的更新,包括子弹移动、击中飞机的判断等。
  • 实现与用户输入有关的更新,当按下特定键时执行特定操作。
  • 实现屏幕显示的更新。读取底层数字时在控制台输出对应的字符。

(二)完善代码逻辑,实现游戏功能

  • 敌机和敌方子弹移动的速度不应过快。使用两组数字来控制。
  • 为解决闪屏问题,使用提供的函数绘图,并且隐藏光标。
  • 控制同屏敌机的数量,如果不够要做补充。
  • 完善飞机相互碰撞、子弹碰撞飞机后的逻辑处理。
  • 加入计分板,当满足一定条件时应该结束游戏。
  • 在控制台实现简单的UI界面。
【代码思路与文件结构】

飞机大战游戏由控制台快速刷新实现。在每一次刷新时都需要执行许多操作,将这些操作分割为不同的函数,可以提高代码的可维护性。

  1. 游戏运行时刷新的函数:初始化、与用户输入无关更新、与用户输入有关的更新、在控制台显示。
  2. 对敌我飞机进行操作的函数:创建、清除、检查我方飞机;创建我方子弹;创建、移动、摧毁、重置、检查敌方飞机;创建敌方子弹。
  3. 实现UI界面显示的函数:重置光标位置、隐藏光标;显示游戏开始、暂停、结束UI界面的函数。

源代码文件结构:

define.h:全局变量和函数的声明

func.cpp:游戏每次刷新需要直接调用的函数

utils.cpp:对敌我飞机进行操作的函数

ui.cpp:用于构建界面的函数

源代码目录的ui文件夹下存储的txt文件用于快速构建UI界面。

【运行效果】

开始界面:有两种选择,进入游戏和退出

游戏界面,初始同屏有两架敌机,子弹射速较慢

敌机到达战场低端而未被击落,扣分

敌机与我方飞机碰撞,或敌机子弹击中我方飞机,扣分;分数在10~20,敌机数为4架,敌机移速、发射子弹速度、敌方子弹移速相应加快。

分数高于30时,我方子弹变成三发,敌机数为6架,敌机移速、发射子弹速度、敌方子弹移速相应加快。

按下esc键,可使游戏暂停。再次按下esc可返回游戏,按下enter退出。

分数较高时,游戏难度也相应变高。如果分数再次降低,游戏难度也会随之变低。

分数达到0分,游戏结束。可以回到主界面重新开始游戏。

可以使用Visual Studio直接打开工程文件进行调试。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值