Qt - 从零到壹的 打地鼠 游戏
❤️🔥欢迎收看西北风的blog,好男人就是我,我就是西北风。✨
Gitee 地址 W_A_Mole · NTC_jason/cc语言 - 码云 - 开源中国 (gitee.com)
目录
🟥一:创建一个主窗体
🟣二.:添加主窗口背景图片以及相关部件
🔸2.1 添加资源文件
2.1.1 添加资源文件
2.1.2 在项目中添加资源文件
🔸 2.2 为 窗口 添加背景图
2.2.1打开 mainwindow.ui
🔸 2.3 为窗口添加开始按钮
🔵三:增加游戏界面
🔹3.1 新建窗口 更名为game
🔹3.2将主窗口与game窗口联动。
🔹3.3添加背景图片
🔹3.4 添加 地鼠 按钮。
🔹3.5为 地鼠 添加 定时器
🔹3.6 改变鼠标样式,增加简单锤子。
🔴四:完善,增加,退出游戏,简易分数,简易难度
🔺4.1 退出游戏按钮
🔺4.2分数
🔺4.3简易难度
🔺4.4 鼠标在普通按钮上变回普通样式
🟥一:创建一个主窗体
下一步即可。名字自选
🟣二.:添加主窗口背景图片以及相关部件
🔸2.1 添加资源文件
2.1.1 添加资源文件
在项目文件夹下新建文件夹,用于存放资源文件
在资源文件npg内,添加图片。图源网络,可自行更改。
2.1.2 在项目中添加资源文件
新建一个Qt 下的资源文件
下一步,名称自选。下一步添加到之前创建的项目下。
完成会出现右图资源文件
对qrc文件 右键 找到 open in editor
如上图,添加按钮下拉菜单,选择添加前缀。
注:前缀如路径,尽量用英文并且简单。默认如上图。
再次点击添加,添加文件,选择我们的4张图片。就完成了资源文件的添加。
最后一步,尤为重要,在此处右键,点击重新构建。此时资源文件才算添加成功。
注: 每一次修改资源文件 均需重新构建。
🔸 2.2 为 窗口 添加背景图
2.2.1打开 mainwindow.ui
点击centralWidget窗口部件。 找到styleSheet 打开。
在添加资源下拉菜单里,含有 background-image、border-image、image 三个选项。
区别自行百度,在这里我们使用background-image。顾名思义,背景图
使用background-image,有一个需要注意的点,它会将此窗口上所有部件全部添加背景。而我们只需窗口需要背景,其他部件不需要此背景。
所以,需要把background-image: url(........);放在#MainWindow{}里(MainWindow为主窗口的对象名),意思就是只针对主窗口设置有效,子部件无用;
对窗口调整大小后,效果如图
🔸 2.3 为窗口添加开始按钮
按钮部件放在开始游戏位置并且更名为开始游戏,覆盖掉。
此时我们的简单的主窗口界面依然完成。
🔵三:增加游戏界面
🔹3.1 新建窗口 更名为game
🔹3.2将主窗口与game窗口联动。
3.2.1使用主窗口的开始游戏按钮
在主窗口的头文件中添加game窗口的头。
使用按钮,转到槽。
添加如下代码。即可实现,按下后出现game界面。
void MainWindow::on_pushButton_clicked() {Game *configWindow = new Game;configWindow->show(); }🔹3.3添加背景图片
我们创建了一个Qwidget类的窗口,在此窗口下添加背景图片有一个需要注意的细节,
那就是需要再添加一个窗口部件去完成背景设置,才能显示我们的图片。
我们添加一个widget部件,对game进行覆盖,并且调整大小
对于背景图片,如主窗口一样添加,不再赘述。
🔹3.4 添加 地鼠 按钮。
3.4.1也就是一个按钮部件,但这个部件需要是一个不规则的按钮,并且有着地鼠摸样。
注 ; 我们需要使用一张背景为透明的图片。
我使用PS软件,去除背景。选中背景后 按下 delete 删除背景即可。
注 : 在存储文件格式时 选用png格式,因为jpg格式不支持透明背景,会把背景填充为白色。
3.4.2 添加按钮部件
3.4.3 为按钮部件设置为不规则按钮。
注:地鼠图片的像素大小即为不规则按钮的大小,因为方法是将按钮覆盖在图片上,使用时请修改图片大小。
//头文件 #include"QPixmap" #include"QBitmap" //改变按钮为不规则按钮QPixmap pix;pix.load("........图片路径");ui->pushButton->setFixedSize(pix.size());ui->pushButton->setMask(pix.mask());ui->pushButton->setStyleSheet("background-image: url(........图片路径)");如有相关问题,参开本人Qt 下的收藏夹。不规则按钮。
图片路径获取,打开资源文件。相应图片右键,选项 复制资源路径到粘贴板。
代码放置位置,在cpp文件下、如下。
🔹3.5为 地鼠 添加 定时器
地鼠,在一定的时间下,到点,跳到其他位置。此文并未添加地鼠洞。所以是全图随机。这是一个函数,所以在头文件的类中需要添加声明。
void Game::timerEvent(QTimerEvent *) {ui->pushButton->move(QRandomGenerator::global()->bounded(0,1200),QRandomGenerator::global()->bounded(0,1200));killTimer(timerNum);timerNum=startTimer(500);//500毫秒跳一次 }再通过按钮的槽函数,增加点击事件
void Game::on_pushButton_clicked() {killTimer(timerNum);timerNum=startTimer(500);}🔹3.6 改变鼠标样式,增加简单锤子。
添加如下代码。并绑定在窗口下。
QCursor cCursor;QPixmap cMap("....图片路径...");QSize cSize(60, 60);// 鼠标形状大小,可以自己指定,合适即可QPixmap cScaleMap = cMap.scaled(cSize, Qt::KeepAspectRatio);cCursor = QCursor(cScaleMap);ui->widget->setCursor(cCursor);代码位置依旧。
🔴四:完善,增加,退出游戏,简易分数,简易难度
🔺4.1 退出游戏按钮
增加按钮,放置右下角,更名,不再赘述。
void Game::on_pushButton_2_clicked() {close(); }🔺4.2分数
在窗口左上角添加 2个laber 部件,一个作为名字,一个记录分数。
简易: 每打一次地鼠,分数增加。
在头文件增加一个 整形 变量用以分数存储和增加
void Game::on_pushButton_clicked() {killTimer(timerNum);timerNum=startTimer(500);a += 10;ui->label_2->setNum(a); }🔺4.3简易难度
添加一个整形变量,右下角增加2个按钮,点击后改变地鼠跳变时间。
🔺4.4 鼠标在普通按钮上变回普通样式
QCursor cCursor2;ui->pushButton_2->setCursor(cCursor2);ui->pushButton_3->setCursor(cCursor2);ui->pushButton_4->setCursor(cCursor2);🚩结束语:基本完成简易地鼠,若有其他想法,自行完善
🉑要想不迷路,点赞加关注🔥
相关文章:
Qt - 从零到壹的 打地鼠 游戏
❤️🔥欢迎收看西北风的blog,好男人就是我,我就是西北风。✨ Gitee 地址 W_A_Mole NTC_jason/cc语言 - 码云 - 开源中国 (gitee.com) 目录 🟥一:创建一个主窗体 🟣二.:添加主窗口背景图片…...
代码自动发布系统
之前是jenkins发现gitlab代码更新了就自动获取直接部署到服务器 现在是jenkins自动获取Code之后打包成镜像上传到仓库然后通知docker去拉取更新的镜像 分析 旧∶ 代码发布环境提前准备,以主机为颗粒度静态 新: 代码发布环境多套,以容器为颗粒度编译 …...
qemu-基础篇(一)——安装
文章目录 env安装查看版本查看支持的开发板查看支持的CPU的型号 env ubuntu 安装 sudo apt-get install qemu sudo apt-get install qemu-system-arm sudo apt-get install qemu-system查看版本 qemu-img -V qemu-system-arm --version qemu-system-aarch64 --version返回结…...
从根本上理解Synchronized的加锁过程
作为一个Java开发,对于Synchronized这个关键字并不会陌生,无论是并发编程,还是与面试官对线,Synchronized可以说是必不可少。 在JDK1.6之前,都认为Synchronized是一个非常笨重的锁,就是在之前的《谈谈Java…...
CANOE入门到精通——CANOE系列教程记录1 第一个仿真工程
本系列以初学者角度记录学习CANOE,以《CANoe开发从入门到精通》参考学习,CANoe16 demo版就可以进行学习 概念 CANoe是一种用于开发、测试和分析汽车电子系统的软件工具。它通过在不同层次上模拟汽车电子系统中的不同部件,如ECU、总线和传感…...
JavaEE——单例模式
文章目录 一、介绍什么是单例模式二、饿汉模式三、懒汉模式四、讨论两种模式的线程安全问题 一、介绍什么是单例模式 在介绍单例模式之前,我们得先明确一个名词设计模式。 所谓设计模式其实不难理解,就是在计算机这个圈子中,呢些大佬们为了…...
关于数据倾斜
1、数据倾斜表现 1.1 hadoop中的数据倾斜表现 有一个多几个Reduce卡住,卡在99.99%,一直不能结束。各种container报错OOM异常的Reducer读写的数据量极大,至少远远超过其它正常的Reducer伴随着数据倾斜,会出现任务被kill等各种诡异…...
Shell第一次作业
要求: 1、判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查一次磁盘剩余空间。 2、判断web服务是否运行(1、查看进程的方式判断该程序是否运行,2、通过查看端口的方式判断…...
实例解读nn.AdaptiveAvgPool2d((1, 1))
nn.AdaptiveAvgPool2d((1, 1))在PyTorch中创建一个AdaptiveAvgPool2d类的实例。该类在输入张量上执行2D自适应平均池化。 自适应平均池化是一种池化操作,它计算每个输入子区域的平均值并产生一个指定大小的输出张量。子区域的大小是根据输入张量的大小和输出张量的…...
泛型编程 之模板(template)
C另一种编程思想称为 泛型编程,主要利用的技术就是模板 目录 C另一种编程思想称为 泛型编程,主要利用的技术就是模板 一、概念 二、函数模板 1、语法与使用: 2、函数模板注意事项 3、普通函数与函数模板的区别 4、普通函数与函数模板的调用规…...
用ChatGPT问DotNet的相关问题,发现DotNet工程师的前景还不错
本人最近费了九牛二虎之力注册了一个ChatGPT账号,现在就给大家分享一下,问一下关于.NET的问题,看看ChatGPT的AI功能具体如何? 一、C#跟其它语言比较的优势 回答: C#是一门编程语言,它是为 Microsoft 的 …...
LeetCode_字符串_简单_415.字符串相加
目录 1.题目2.思路3.代码实现(Java) 1.题目 给定两个字符串形式的非负整数 num1 和num2,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将…...
Insix:面向真实的生成数据增强,用于Nuclei实例分割
文章目录 InsMix: Towards Realistic Generative Data Augmentation for Nuclei Instance Segmentation摘要本文方法数据增强方法具有形态学约束的前景增强提高鲁棒性的背景扰动 实验结果 InsMix: Towards Realistic Generative Data Augmentation for Nuclei Instance Segment…...
CleanMyMac X4.13.2最新版下载
现在cleanmymac x4.13.2中文版是大家首选的优秀mac清理软件。CleanMyMac集合了多种功能,几乎可以满足用户所有的清洁需求。它不仅包含各种清理功能,还具有卸载、维护、扩展、碎纸机等实用功能,可同时替代多种工具。它可以清理、优化、维护和监…...
机器学习算法原理:详细介绍各种机器学习算法的原理、优缺点和适用场景
目录 引言 二、线性回归 三、逻辑回归 四、支持向量机 五、决策树 六、随机森林 七、K-均值聚类 八、主成分分析(PCA) 九、K近邻算法 十、朴素贝叶斯分类器 十一、神经网络 十二、AdaBoost 十三、梯度提升树(Gradient Boosting T…...
Spring Security 6.0系列【32】授权服务器篇之默认过滤器
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 本系列Spring Authorization Server 版本 1.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 前言1. OAuth2Authorizati…...
.NET中比肩System.Text.Json序列化反序列化组件MessagePack
简介 官方定义:MessagePack是一种高效的二进制序列化格式。它允许您像JSON一样在多个语言之间交换数据。但是它更快并且更小。 MessagePack是一种开源的序列化反序列化组件,可支持JAVA,C#等主流语言。在 C# 中使用 MessagePack,…...
Oracle删除列操作:逻辑删除和物理删除
概念 逻辑删除:逻辑删除并不是真正的删除,而是将表中列所对应的状态字段(status)做修改操作,实际上并未删除目标列数据或恢复这些列占用的磁盘空间。比如0是未删除,1是删除。在逻辑上数据是被删除了&#…...
找出字符串中第一个匹配项的下标、求解方程----2023/5/2
找出字符串中第一个匹配项的下标、求解方程----2023/5/2 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1…...
23:宁以non-member、non-friend替换member函数
想象有个class用来表示网页浏览器。这样的class可能提供的众多函数中,有一些用来清除下载元素高速缓存区、清除访问过的URLs的历史记录、以及移除系统中的所有cookies: class WebBrowser{ public:void clearCache();void clearHistory();void removeCoo…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...





























