QT实战之翻金币游戏【未完待续】

news2025/1/18 19:04:11

文章目录

目录

文章目录

前言

二、创建项目

三、添加资源

四、主界面实现

1、设置游戏主场景配置

2、设置背景图片

3、创建开始按钮

总结


前言

对QT的相关知识与控件进行简单的学习之后,通过实现“翻金币游戏”来巩固与实践所学的QT知识。在制作过程中是根据以下视频的教程进行制作的。感兴趣的可以移步视频。

02 案例简介_哔哩哔哩_bilibili

制作翻金币游戏的图片及音频都是直接利用课程提供的的现有资料,如果在课程没有找到的话,可以通过以下链接下载对应的资料。

链接:https://pan.baidu.com/s/1IxWIa47V0L_WuLu41pu7Tw 
提取码:lje1

本文将从头到尾循序渐进地对“CoinFlip”游戏的实现进行介绍,会相对详细一点,主要从整体分析、项目创建、项目实现、项目打包这几个方面进行介绍。

打包好的游戏链接如下,可以直接下载后运行就可以玩了。

链接:https://pan.baidu.com/s/1Nfzstm1AbsmwfKPL_ac4_Q 
提取码:rqa6


一、游戏整体分析

这个小游戏总的来看需要我们实现的有三个界面还有两个自定义控件

       一是游戏开始界面,对应图1;其中,开始界面需要一个开始按钮,能够进行页面切换,因而我们需要自定义一个控件,也就是MyPushButton,父类为QPushButton,进而实现这一按钮的设计与动作实现。

        二是关卡选择界面,对应图2;其中,关卡按钮还有返回按钮back也是利用我们自定义的控件来实现。

        三是关卡界面,对应图3。其中,因为游戏规则是点击银币然后上下左右的硬币跟着翻转,需要利用多个图片来实现金币翻转,因此我们需要创建一个金币类来实现金币所需要进行的对应操作。

        而图4只是在玩家胜利之后在关卡界面的基础上弹出成功图片,因而不需要另外创建界面。三个界面就对应三个类,分别是mainscene、chooselevelscene、playscene;自定义的类有两个,分别是mypushbutton、mycoin类。


二、创建项目

打开QT Creator(我用的是5.12.9版本)-->创建新项目-->选择Qt Widgets Application-->下一步

设置项目名称“CoinFlip”-->选择存放路径-->下一步

从主界面开始实现,设置类名为“MainScene”-->选择父类为“QMainWindow”-->勾选“Generate form”-->下一步

然后项目创建成功,项目结构如下:


三、添加资源

将以下资源添加到项目中

将前言中准备好的资料下载保存到电脑桌面-->点击项目右键选择“Add New”-->选择“QT”-->选择“QT Resource File”-->下一步-->设置名称“res”-->下一步-->完成

点击完成后会出现如下界面,点击“Add Prefix”-->将前缀设置为“/”即可。

(test是为了方便截图添加资源等操作,不用在意这个)

然后将前面保存的资料里面的res文件夹,复制粘贴到CoinFlip项目中(也就是前面创建项目时你选择的路径)【忽略test,不是重点】

回到项目界面,点击“Add Files”-->选择刚才添加的"res"文件-->选中文件夹中所有文件-->点击打开-->成功添加资源

添加成功后如下:


四、主界面实现

1、设置游戏主场景配置

首先我们利用ui界面设计来实现菜单栏的设计——双击“mainscene.ui”打开界面设计——界面如下

设计菜单栏——在中间上方“在这里输入”这里输入“开始”,然后点击“开始”,在下方的“在这里输入”,输入“Quit”,然后再找到其text属性将其改成退出。

【之所以先输入Quit是因为控件名称是自动生成的,总不能生成"action退出"】

然后移除自带的状态栏,然后就可以回到"mainscene.cpp",在构造函数进行代码的编写

实现场景的基本配置,设置窗口大小、应用的图标、还有窗口的标题,然后实现退出的功能实现,利用信号和lambda表达式来实现

代码如下:

//设置固定大小
this->setFixedSize(350,550);
//设置应用图片
this->setWindowIcon(QPixmap(":/res/Coin0001.png"));
//设置窗口标题
this->setWindowTitle("一起来翻金币吧");
//点击退出,退出程序
connect(ui->actionQuit,&QAction::triggered,[=](){
    this->close();
});

运行界面结果如下:

2、设置背景图片

需要重写MainScene的PaintEvent事件,先在“mainscene.h”中添加声明,然后在“mainscene.cpp”中实现背景图片的添加

代码如下:

void MainScene::paintEvent(QPaintEvent *){
    //创建画家,制定绘图设备
    QPainter painter(this);
    //创建QPixmap对象
    QPixmap pix;
    //加载图片
    pix.load(":/res/PlayLevelSceneBg.png");
    //绘制背景图
    painter.drawPixmap(0,0,this->width(),this->height(),pix);

    //加载标题
    pix.load(":/res/Title.png");
    //缩放图片
    pix=pix.scaled(pix.width()*0.5,pix.height()*0.5);
    //绘制标题
    painter.drawPixmap(10,30,pix.width(),pix.height(),pix);

}

运行界面结果如下:

3、创建开始按钮

      需要实现以下场景——开始按钮点击后有弹跳效果

这个效果我们利用自定义控件实现(因为QPushButton不会自带这类特效),我们可以自己封装出一个按钮控件,来实现这些效果。此时需要我们创建一个新的类——MyPushButton


总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/997587.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打开游戏显示xinput1_3.dll丢失怎么办?xinput1_3.dll最全修复方法分享

一、xinput1_3.dll 文件总体介绍 xinput1_3.dll 是 Microsoft DirectX 中的一个动态链接库文件,它主要负责处理游戏手柄、鼠标、键盘等输入设备的操作。当运行支持 DirectX 的游戏或程序时,xinput1_3.dll 文件会被操作系统加载到内存中,以提…

想要精通算法和SQL的成长之路 - 课程表II

想要精通算法和SQL的成长之路 - 课程表 前言一. 课程表II (拓扑排序)1.1 拓扑排序1.2 题解 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 课程表II (拓扑排序) 原题链接 1.1 拓扑排序 核心知识: 拓扑排序是专…

Sharding-JDBC分库分表-自定义分片算法-4

默认分片算法 Sharding JDBC通过org.apache.shardingsphere.sharding.spi.ShardingAlgorithm接口定义了数据分片算法,5.2.1版本默认提供了如下的分片算法 配置标识自动分片算法详细说明类名MODY基于取模的分片算法ModShardingAlgorithmHASH_MODY基于哈希取模的分片…

JavaFX下载

下载地址: https://gluonhq.com/products/javafx/

postman和node.js的使用

一 nodejs下载 下载链接: nodejs官网: https://nodejs.org/zh-cn/download 我使用的windows .msi安装方式,双击一直下一步就行 当前安装完成后的版本:1.下载 2.安装步骤 下载完成后,双击安装包,开始安装&…

在MAC电脑上将NTFS格式移动硬盘转换为ExFAT格式

注意:转化之前先将移动硬盘中的内容进行备份 1、点击桌面上的【前往】,选择【实用工具】 2、在列表中选择【磁盘工具】 3、在左侧选中你的磁盘,点击右侧上方的【抹掉】,注意:将永久抹掉储存在上面的所有数据,因此需要…

计算机毕业设计 JSPM校园闲置物品交易平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

分类预测 | Matlab实现基于LFDA-SVM局部费歇尔判别数据降维结合支持向量机的多输入分类预测

分类预测 | Matlab实现基于LFDA-SVM局部费歇尔判别数据降维结合支持向量机的多输入分类预测 目录 分类预测 | Matlab实现基于LFDA-SVM局部费歇尔判别数据降维结合支持向量机的多输入分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于局部费歇尔判别数据降维的L…

Ubuntu下高效Vim的搭建(离线版)

软件界面 可以看到界面下方有一些常用提示信息:文件路径、format、文件类型、光标所在的坐标(x,y)、进度条(百分比)、日期时间 会提示已定义的变量名词(快速补全) 搭建方法 下载资源文件 把Vim 和 .vimrc 拷贝到家目录下,并执行tar -xvf Vim 即可。 …

汇川PLC学习Day3:轴控代码编写、用户程序结构说明与任务配置示例、用户变量空间与编址

汇川PLC学习Day3:轴控代码编写、用户程序结构说明与任务配置示例、用户变量空间与编址 一、新建轴与轴控代码编写 1. 新建轴 (1)新建一个轴 (2)将轴名字更新为实际名字 可以后面实例化后再更改,汇川可以在更新名字时同步更新…

使用DeepSpeed加速大型模型训练(二)

使用DeepSpeed加速大型模型训练 在这篇文章中,我们将了解如何利用Accelerate库来训练大型模型,从而使用户能够利用DeeSpeed的 ZeRO 功能。 简介 尝试训练大型模型时是否厌倦了内存不足 (OOM) 错误?我们已经为您提供了保障。大型模型性能非…

倒⽴摆闭环控制的设计与开发

倒立摆是一种典型的多变量、高阶次、非线性、强耦合、自然不稳定系统,常被用来检验新的控制理论和算法的正确性及其在实际应用中的有效性。 load func_ip_comp% Locations of Poles and Zeroes of Open-Loop Compensated Transfer Function in Complex Plane figur…

查看当前所有的数据库

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 先看下服务有没有启动,看下我这个是什么意思 exit 退出MySQL环境回车后是这样的 重新进入MySQL环境 查看当前所有的数据库 show datebases; mysql&…

nrf523832 串口点LED

/* P0.06:串口发送TXD P0.08:串口接收RXD P0.05:串口RTS:发送请求,硬件流控开启时有效 P0.07:串口CTS:发送允许,硬件流控开启时有效 */ #define RX_PIN_NUMBER 8 #define TX_PIN_N…

学习Bootstrap 5的第十天

目录 卡片 基础的卡片 实例 页眉和页脚 实例 多种颜色卡片 实例 标题、文本和链接 实例 图片卡片 实例 卡片图像叠加 实例 下拉菜单 基础的下拉列表 实例 下拉列表分隔线 实例 下拉列表标题 实例 禁用的和活动的项目 实例 下拉列表位置 实例 下拉菜单…

SpringMVC之文件的上传下载(教你如何使用有关SpringMVC知识实现文件上传下载的超详细博客)

目录 前言 一、文件上传 1. 配置多功能视图解析器(spring-mvc.xml) 2. 添加文件上传页面(upload.jsp) upload.jsp 3.做硬盘网络路径映射 4. 编写一个处理页面跳转的类 PageController.java ClazzController.java 5. 初步模…

【数据分享】STRM 90米分辨率DEM地形数据(无需转发/全国/分省/分市)

地形数据是我们在各种设计、研究中都经常使用的基础数据!之前我们分享过12.5米精度的DEM地形数据、30米精度的DEM地形数据(均可查看之前的文章获悉详情)。 本次给大家带来的是90米分辨率的DEM地形数据——STRM 90m高程数据!该数据是由美国太…

学成在线-网站搭建

文章目录 代码素材来自b站pink老师 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>学成在线首…

《PWA实战:如何为你的网站增加离线功能和推送通知》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Hbase解决ERROR: KeeperErrorCode = ConnectionLoss for /hbase/master报错

1、在单机模式中&#xff0c;要先修改一个文件&#xff1a;/usr/local/hbase/conf/hbase-site.xml hbase-site.xml内容&#xff1a; <configuration><property><name>hbase.rootdir</name><value>file:///usr/local/hbase/hbase-tmp</value…