当前位置: 首页 > news >正文

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&#xff0c…...

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…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

反射获取方法和属性

Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求&#xff…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...

算法250609 高精度

加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...