QT实现飞机大战

飞机大战

飞机大战是一款比较经典的小游戏,我们会分几篇文章来实现。
第一篇文章实现游戏界面的绘制、地图滚动、战机移动
第二篇文章实现战机发射子弹、敌机出现、爆炸效果、音效的添加
第三篇文章实现敌机发射子弹、产生boss、以及boss发射子弹
第四篇文章实现道具、血条、多种子弹

创建项目

  1. 点击菜单中的 文件 -> 新建文件或项目 或者 点击New Project
    在这里插入图片描述

  2. 模板选择 Application -> Qt Widget Application
    在这里插入图片描述

  3. 创建项目名称以及选中项目保存路径
    注:名称、路径必须不含中文在这里插入图片描述

  4. 工具选择Desktop Qt 5.9.0 MinGW 32bit
    在这里插入图片描述

  5. 基类选择 QWidget
    当前类我设置为游戏中的主场景-MainScene 去掉创建界面的选择,主场景上的图片都用代码实现在这里插入图片描述
    点击下一步,再点击完成,项目则创建完成
    在这里插入图片描述

主界面设定

设定图标、游戏名、窗口宽度、高度
窗口宽度和高度应和背景图片的宽高一致(背景图512×768)
要设定图标,必须先引入资源文件

资源文件引入

选中Sources 》右键选择 添加新文件
在这里插入图片描述
选择Qt 》Qt Resource File 点击Choose…
在这里插入图片描述
设定资源名称为res,点击下一步
在这里插入图片描述
点击完成
在这里插入图片描述
点击添加 》添加前缀
在这里插入图片描述
设定前缀为/
在这里插入图片描述
再点击添加 》 选择添加文件
在这里插入图片描述
把准备好的资源文件res拷贝到项目根目录下
在这里插入图片描述
点击进入res,ctrl + a选中所有资源
在这里插入图片描述
点击打开
在这里插入图片描述
点击左下角小锤子构建项目,出现如下错误
在这里插入图片描述
打开项目工程文件planeWar.pro
添加配置CONFIG += resources_big
在这里插入图片描述
设定窗口大小、图标、游戏名
资源文件的使用: : + 前缀 + 资源名称 + / + 图片名
在这里插入图片描述
运行结果
在这里插入图片描述
在实际开发中,类似于
在这里插入图片描述
这样的代码是不会出现在我们的项目中的,当我们需要修改游戏名字、图标时,还需要去修改源码,是非常不合理的。因此我们可以创建一个配置文件,里面放我们所有的字符串、常量,后期修改,直接修改配置文件。
创建配置文件
选中Sources 》右键选择 添加新文件
在这里插入图片描述
选择C++ 》C++ Header File ,点击Choose…
在这里插入图片描述
配置文件取名为Config 点击下一步
在这里插入图片描述
点击完成
在这里插入图片描述
在配置文件中添加游戏名、窗口宽度、游戏图标对应的宏常量
在这里插入图片描述

//游戏名
#define GAME_TITLE "飞机大战"
//窗口宽度
#define GAME_WIDTH 512
//窗口高度
#define GAME_HEIGHT 768
//游戏图标
#define GAME_ICON ":/res/game.ico"

在主窗口mainscene.cpp中引入config.h,使用配置文件中的宏常量来初始化主窗口
在这里插入图片描述

    //设置游戏名字
    setWindowTitle(GAME_TITLE);
    //设定图标
    setWindowIcon(QIcon(GAME_ICON));
    //设定界面固定宽高
    setFixedSize(GAME_WIDTH,GAME_HEIGHT);

运行效果
在这里插入图片描述

定义初始化函数

在mainscene.h中添加新的成员函数initScene 用来初始化游戏场景
在这里插入图片描述
实现如下
在这里插入图片描述

地图实现

创建地图类

选中Sources,右键添加新文件
在这里插入图片描述
选择C++ => C++ class,点击Choose…
在这里插入图片描述
取名为Map,点击下一步
在这里插入图片描述
点击完成
在这里插入图片描述

定义成员变量、函数

地图滚动实际上是两张图片同时向下移动,当两张图片移动到一定的位置再还原,在继续滚动,地图向下滚动,x坐标不变,y坐标改变,地图滚动有相应的速度与函数,定义如下:
在这里插入图片描述
在配置文件中添加地图图片及地图滚动速度
在这里插入图片描述
在构造函数中初始化成员变量,函数实现

在这里插入图片描述
在这里插入图片描述
在MainScene.h中,创建地图对象,并重写绘图事件
在这里插入图片描述
绘制地图,在paintEvent中创建画笔,并进行两张地图图片的绘制
在这里插入图片描述
绘制效果如图
在这里插入图片描述

定时器添加

要实现地图滚动,需要引入定时器,每隔10毫秒刷新页面,达到地图滚动的效果,并创建两个函数playGame和updatePosition,一个进行定时器的调用,一个进行地图、子弹、敌机等位置改变
在这里插入图片描述
在config中添加定时器刷新间隔
在这里插入图片描述
实现playGame、updatePosition函数,并调用qt自带的update函数来进行页面刷新,设定定时器间隔,并监听定时器,,每隔10毫秒进行页面刷新和函数调用,至此地图滚动已经实现
在这里插入图片描述
按照创建地图(Map)类的步骤进行战机(Hero)类的创建
战机也需要加载一张图片,战机移动需要有坐标,为了进行检测碰撞,为战机添加矩形边框
因为战机移动受上下左右键控制,因此位置改变函数需要传递xy坐标
在这里插入图片描述
在config.h中,设定战机图片及战机移动速度
在这里插入图片描述

进行变量初始化及函数实现
在这里插入图片描述
在MainScene.h中,创建战机对象,并重写键盘按下事件
在这里插入图片描述
在PainterEvent函数中,进行战机的绘制
在这里插入图片描述
通过按键对飞机进行控制,并调用飞机移动函数,通过对飞机坐标判断,进行越界控制
在这里插入图片描述
战机移动如图:
在这里插入图片描述
至此地图滚动、战机移动已全部实现

  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我超爱写bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值