Qt图形化界面学习之翻金币案例

本文详细描述了一个游戏开发过程,包括创建项目,资源添加,场景设置(如背景、按钮和音效),以及游戏逻辑如关卡选择、按钮事件处理和金币翻转动画。还涉及了项目优化和打包技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击start按钮,进入下层界面,选择关卡。

1.创建项目以及添加资源

在这里插入图片描述
在这里插入图片描述
添加资源
在这里插入图片描述
在这里插入图片描述

2.设置游戏主场景

在这里插入图片描述
在这里插入图片描述

设置背景图片

重写paintevent事件画背景。
在这里插入图片描述
在这里插入图片描述
画背景上的图标
在这里插入图片描述
直接画太大了,我们需要先缩放图片再画。
在这里插入图片描述

开始按钮的创建

提供MyPushButton的构造的重载版本,可以让MyPushButton提供正常显示的图片以及按下后显示的图片。

首先创建一个自定义按钮类。
在这里插入图片描述
修改继承关系,继承QPushButton。
在这里插入图片描述

创建构造函数,第二个参数初始化为空。
在这里插入图片描述
在这里插入图片描述
创建开始按钮。
在这里插入图片描述

开始按钮跳跃特效实现。
头文件#include<QPropertyAnimation>
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择关卡场景配置

在这里插入图片描述
我们需要在mainscene.h中维护一个选择场景的对象。
在这里插入图片描述
在这里插入图片描述
但是我们发现,点击start按钮会瞬间进入下一个场景,无法看见动画特效,因此需要延时。
头文件#include<QTimer>
在这里插入图片描述

配置选择关卡场景内容

在这里插入图片描述

设置背景

结果如下:
在这里插入图片描述
在这里插入图片描述

返回按钮的图片切换

思路:按下的时候切换图片,释放的时候还原图片。

重写按钮的按下和释放事件。
在这里插入图片描述
在这里插入图片描述
让父类执行其他内容,防止鼠标按下失效。
在这里插入图片描述

开始场景与选关场景的切换

思路:当点击返回按钮时候,发送一个信号,选关场景接收到信号后会切换到主场景。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加入延时操作。
在这里插入图片描述

选择关卡按钮创建 ???

显示按钮图片
在这里插入图片描述
在这里插入图片描述
监听每个按钮点击事件。
在这里插入图片描述

给按钮图片添加文字(关卡号),注意要设置水平居中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

但是,我们发现现在点击关卡按钮,不会有输出了,这是因为标签把按钮控件挡住了。

设置让鼠标进行穿透。
在这里插入图片描述
在这里插入图片描述

翻金币游戏场景的基本配置

在这里插入图片描述
我们想要点击选关按钮进入对应场景,因此不需要监听选关信号了。在这里插入图片描述
在这里插入图片描述
我们想要创建与关卡号对应的场景,因此PlayScene构造中需要传入int类型变量表明是第几关,因此需要重写构造函数。
在这里插入图片描述
在这里创建一个成员变量记录所选的关卡号。
在这里插入图片描述
加一个打印输出来验证是否正确。
在这里插入图片描述
没有问题,能跳转到对应的场景中。

初始化游戏场景

在这里插入图片描述

重写画家事件

在这里插入图片描述
在这里插入图片描述

返回按钮

在这里插入图片描述
点击返回按钮,回到选关场景。
在这里插入图片描述
思路如下:
首先,创建一个返回按钮。
接着就是信号的连接。我们需要点击返回按钮时触发一个返回的信号,告诉选关场景我们需要返回到该场景了。因为之前是从选关场景进入到游戏场景的,所以选关场景随后需要监听游戏场景的返回信号。
最后就是销毁游戏场景,回到选关场景。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

显示选择的关卡号

在这里插入图片描述

金币类的封装

显示金币背景图案

在这里插入图片描述

金币类实现

金币类本质还是一个按钮,但是我们不能用之前自定义的按钮MyPushButton,因为金币按钮不需要弹跳功能,还有点击切换图片这种功能,所以和MyPushButton关系不大,因此重新构建一个类实现它。

创建金币

我们只需要能够传入一个构造金币的图片就行,之后变成银币修改传入的值即可。
在这里插入图片描述
与MyPushButton的构造类似,只不过传入的是一个图片路径。
在这里插入图片描述

每个关卡的默认显示

首先,添加了金币关卡的游戏数据。
在这里插入图片描述
第一个int是关卡号,后面的二维数组是关卡的数据。以第一个关卡为例。
在这里插入图片描述
在这里插入图片描述
这就是数据和关卡实际设计的对应关系。

在PlayScene中维护一个二维数组成员变量,记录每一关自己的数据
加入头文件#include "dataconfig.h"
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

金币翻转特效

金币的属性
为了能够翻转金币,我们需要知道每个金币的位置坐标以及当前的状态(金币还是银币)。
在这里插入图片描述
在这里插入图片描述

改变标志的方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
翻转后应该更新一下当前数组中该点的值。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后,我们发现快速点击金币进行翻转,翻转动画没有结束就会开始翻转,因此我们需要设置一个记录翻转是否结束的变量来阻止翻转过程中进行新的翻转。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后在监听事件中,只有可以翻转为true时,才执行翻转。
在这里插入图片描述

实现周围金币的翻转

我们需要一个记录所有mycoin的信息的变量,否则无法翻转除了当前mycoin外的其他金币。
在这里插入图片描述
## 判断游戏是否胜利并禁用按钮
在这里插入图片描述

判断游戏是否胜利并且禁用按钮

当金币发生反转时候,我们进行是否胜利检测。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
游戏胜利后,禁止按钮点击操作。
重写点击事件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

胜利图片实现

在这里插入图片描述
首先我们创建一个在X轴中间,但是不在窗口内的胜利标签。
如果胜利了,move的y值为相反值,该图片就显示在窗口中了。
动画头文件#include<QPropertyAnimation>
在这里插入图片描述

在这里插入图片描述

设置音效在这里插入图片描述

准备开始按钮的音效。
在这里插入图片描述
在这里插入图片描述
返回按钮音效。
在这里插入图片描述
在这里插入图片描述
翻金币和胜利音效。
在这里插入图片描述

项目优化,将场景切换的位置保持一致

主场景中
在这里插入图片描述

选关场景中
在这里插入图片描述

游戏场景中
在这里插入图片描述

项目打包

在这里插入图片描述
生成后有release文件夹。
在这里插入图片描述
找到qt源文件中的windeployqt,用来生成打包文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
生成的这些文件就是运行该游戏的所有dll。即使没有配置qt环境也能运行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值