• 基于QTGUI图像界面的空战游戏设计


    基于图形界面的空战游戏

    设计内容设计一个基于图形界面的空战游戏,使用 qt 的 GUI 框架下图为最终的游戏过程截图

    在这里插入图片描述

    设计目标(功能介绍)

    加载界面

    • 主窗口可伸缩
    • 提供菜单界面
    • 背景音乐(可切换)
    • 游戏指南介绍游戏
    • 显示我方血量、蓝量、分数
    • 可移动我方飞机
    • 自动打出子弹
    • 按空格发动技能并消耗蓝
    • 多种敌人类型
    • 击杀特殊敌人掉落补给
    • 可暂停游戏
    • 暂停后弹出选项:可返回菜单、查看指南或继续游戏
    • 子弹打中或飞机碰撞造成受到伤害
    • 血量为 0 的物体将消失
    • 我方血量为 0 游戏自动结束
    • 游戏结束后弹出选项:重新游戏、查看指南、返回菜单

    设计思路

    类的设计

    视角类 MyView

    功能:容纳场景的窗口,在该类中重定义 resizeEvent 事件处理函数可以完成窗口和场景的自适应伸缩

    成员数据:无

    成员函数:resizeEvent

    实例化:main 中实例化为 view

    场景类 Scene

    功能:提供图形化界面,一切视觉与玩家交互的控件都在场景类中进行控制。场景类也是和玩家交互的顶层接口,玩家发出的信号、或者触发的事件,都在场景类中进行第一层处理

    成员数据:文本显示、按钮显示、遮罩面板、飞机状态显示、图像路径、媒体音乐播放器、菜单显示、物体显示

    成员函数:构造函数、按钮信号的槽函数、事件触发后的处理重载函数

    实例化:Scene.cpp: Scene* MyScene;main 中申请空间

    游戏运行类 ProcessGame

    功能:控制游戏的逻辑,对游戏的物体对象进行管理、控制游戏的运行状态、与场景类进行交互(即场景类的需求通过游戏运行类来逻辑实现,游戏运行类逻辑实现的结果通过场景类来进行体现)、按键响应

    成员数据:移动键按钮状态(以处理移动按键响应)、定时器(控制物体运动)、分数、游戏阶段(是否暂停、是否处于菜单界面)

    成员函数:构造函数、定时器的删除和设置函数、清除游戏现场函数、 Scene 中按钮信号处理的槽函数的逻辑实现(图形界面的接口)、Scene 事件响

    应函数的逻辑实现(图形界面的接口)、玩家飞机状态更新函数

    实例化:ProcessGame.cpp: ProcessGame game;

    物体类 Object

    功能:作为游戏中物体的顶层抽象,可以标记物体的类型和碰撞状态

    成员数据:type:包括玩家飞机、玩家子弹、普通敌人、红色敌人、蓝色敌人、普通敌人子弹、红色敌人子弹、红色补给、蓝色补给

    成员函数:构造函数、通过类型和图像路径初始化 object

    实例化:在需要的位置实例化其派生类

    飞机类 Plane

    功能:由 object 派生,处理飞机的碰撞和移动、记录飞机状态

    成员数据:生命值和蓝量

    成员函数:处理碰撞和处理移动的函数

    实例化:在需要的位置实例化其派生类

    子弹类 Bullet

    功能:由 object 派生,处理子弹产生和移动

    成员数据:子弹的方向、子弹的杀伤力

    成员函数:子弹发射函数、子弹整体更新位置函数、某个子弹移动函数

    实例化:在静态成员函数子弹发射中实例化具体对象

    补给类 Medicine

    功能:由 object 派生,代表物体为补给

    成员数据:继承 object 的 type 标记补给的类型

    成员函数:通过补给类型和图像进行构造

    实例化:在掉落补给的位置实例化具体对象

    我方飞机类 MyPlane

    功能:由 Plane 派生,处理我方飞机的移动按键响应、射击模式

    成员数据:长宽(防止我方飞机出界),射击模式、移动趋势、伤害

    成员函数:是否静止、设置移动趋势的函数

    实例化:MyPlane.cpp: MyPlane* mycraft,游戏开始的时候申请空间,返回菜单释放空间

    敌方飞机类 EnemyPlane

    功能:由 Plane 派生,处理敌方飞机的整体位置更新、具体飞机的移动、和射击

    成员数据:继承 object 的类型判断其是哪种敌方飞机

    成员函数:射击函数、整体位置更新函数、刷新产生函数、单个飞机移动函数

    实例化:在飞机刷新定时器事件中创建具体的对象

    Config.h 配置了一些宏

    类层次的关系

    层次关系如下图

    在这里插入图片描述

    逻辑流程

    在 main.c 中初始化视角和场景类,然后应用进行循环 exec 状态(等待事件)

    刚开始只有按钮和键盘事件会被响应,通过按下按钮或键盘触发 Scene 中的事件响应函数或者槽函数Scene 接收到信号或事件后将要处理的事情丢给 ProcessGame 类来处理在 ProcessGame 中通过具体的信号来处理内部的数据,Object 和被派生出的飞机、子弹、补给、键盘响应、定时器响应都是在此类中处理课程设计一和二的关联和改善主要的逻辑控制都按照设计一的思路,除了把顶层加了 ui 以外,内部也有一些改进比如数据结构的改进(STL 的掌握):子弹、敌方飞机从数组管理改成 vector 管理流程上沿用:菜单 <-> 游戏的结构

    比如利用 qt 的定时器库让物体运动机制更完善,在设计一中提到,基于冷却的原理,即一个功能使用后再被申请使用的时候,只记录下申请,等待冷却结束再满足申请,在二中通过了解 qt 定时器的使用知道了这是基于定时器的物体运动机制类的层次更加鲜明(继承的运用):把许多物体抽象成 Object,统一的管理增加了许多新的功能:例如音乐、例如技能、例如血槽、例如补给、例如多种敌人程序的操作方法

    刚进入游戏看到加载界面

    在这里插入图片描述

    然后看到游戏窗口

    在这里插入图片描述

    听到背景音乐,可以按 R 键切换

    点游戏指南查看游戏的介绍信息

    在这里插入图片描述

    在这里插入图片描述

    点开始游戏进行游戏

    在这里插入图片描述

    随时按回车键暂停

    在这里插入图片描述

    按上下左右移动,空格发技能

    右下角查看当前状态

    在这里插入图片描述

    绿色敌人速度慢、单子弹攻击,伤害弱、防御弱

    在这里插入图片描述

    红色敌人速度慢、多子弹攻击,伤害强、防御强

    在这里插入图片描述

    蓝色敌人速度快、撞击攻击,伤害强、防御一般
    在这里插入图片描述

    击杀红色敌人掉落红色补给,补充血量

    在这里插入图片描述

    击杀蓝色敌人掉落蓝色补给,补充蓝量

    在这里插入图片描述

    玩家死亡后弹出选项和分数

    在这里插入图片描述

  • 相关阅读:
    保姆级教程:个人深度学习工作站配置指南
    TestStand-创建VI
    提升服务质量,民安智库(第三方满意度调研公司)物业客户满意度调查来帮忙
    【css】如何实现自定义滚动悬浮置顶、固定表头
    Python多线程实战:多线程并行很快,但写文件要加锁
    技术学习:Python(14)|爬虫requests库
    单端信号转差分信号
    Mips架构安装mysql问题
    多智能体进化算法求解带时间窗的VRP问题(python)
    商品API接口优秀案例 │ 国家电网办公物资电商化采购项目API解决方案
  • 原文地址:https://blog.csdn.net/newlw/article/details/126031205