Qt - 从零到壹的 打地鼠 游戏

news2025/1/19 17:01:19

❤️‍🔥欢迎收看西北风的blog,好男人就是我,我就是西北风。✨

目录

🟥一:创建一个主窗体

🟣二.:添加主窗口背景图片以及相关部件 

🔸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);

🚩结束语:基本完成简易地鼠,若有其他想法,自行完善

 🉑要想不迷路,点赞加关注🔥

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

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

相关文章

NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_实际操作01---大数据之Nifi工作笔记0040

我们基于之前做的从mysql中获取数据,然后同步数据到mysql中,基于这个案例来做,可以看到上面是,这个案例的所有处理器,我们基于这个来改造. 1.首先我这里重新安装了一个mysql8.0.33 ,安装的是windows版本的,如果你是linux版本的,这里也说一下,如何开启binlog功能,首先要开启bin…

模拟和数字电路 —— 导学篇

前言:本科零基础跨考模电,时间不是很充裕,选择不补学电路分析的基础,直接开始学习模电。如果遇到不会的问题只学习指定的那块。 学习模电需要哪些基本电路知识 比如学习基本放大电路时经常用到的KVL、KCL;学习频率响应…

用C++实现Date类

Date类 判断 大于 小于 等于 等等运算符重载函数 我们先实现一个 > 的运算符重载,然后再实现一个 的运算符重载: bool Date::operator>(const Date& d) {if (_year > d._year){return true;}else if (_year d._year && _mo…

教你如何通过内网穿透轻松实现PL/SQL远程连接Oracle数据库【内网穿透】

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 转发自CSDN远程穿透的文章:公网远程连…

【PLC】贝加莱PLC理论及操作年度培训

最近在进行PLC培训,主要是贝加莱PLC产品的学习,学习了上下位机的一些基本操作,能够进行一些简单的实践,最后顺利通过年度考核。 0 引言 PLC:可编程逻辑控制器,由CPU、存储器、输入输出接口、电影以及外部设…

【unity专题篇】—GUI(IMGUI)思维导图详解

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

企业关键数据资产如何保护?腾讯安全联合“数据安全推进计划”落地主题沙龙

4月26日,腾讯安全联合中国信通院“数据安全推进计划”共同在深圳举办了数据安全研讨会,共同探讨新形势下如何让企业关键数据资产更安全。中国信息通信研究院云计算与大数据研究所高级业务主管龚诗然、腾讯云安全总经理李滨、炼石网络创始人兼CEO白小勇、…

【Vue3学习笔记1】一个清单应用帮你入门Vue.js

Vue 目前已经是国内最流⾏的前端框架之⼀&#xff0c;Vue 3 带来的诸多优化更是让前端圈迎来了新的潮流&#xff0c;比如&#xff1a; 基于 Proxy 的全新响应式实现&#xff1b; Composition API <script setup> 组织代码的更优方式&#xff1b; 更有料的 TypeScript 支…

关于C++的线程操作 | 双检锁与智能指针接口使用

文章目录 thread对象的构造this_threadconstructmutexref 用lambda表达式构造thread线程串行比并行快&#xff1f;CAS&#xff08;atomic类&#xff09;timed_mutexlock_guard,unique_guard&#xff0c;手动控制生命周期,为什么要使用条件变量不用条件变量带来的问题&#xff1…

【python基础语法三】列表,元组,集合,字典相关操作

列表的相关操作 1. 列表的拼接 (同元组) lst1 ["hello","world"] lst2 ["hello","python"] res lst1 lst2 print(res) # ["hello","world","hello","python"]2. 列表的重复 (同元组) …

二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)

文章目录 二、搭建MyBatis采用xml方式&#xff0c;验证CRUD&#xff08;增删改查操作&#xff09;2.1 开发环境2.2 创建maven工程2.3 创建User实体2.4 创建MyBatis的核心配置文件2.5 创建mapper接口2.6 创建MyBatis的映射文件2.7 通过junit测试功能 二、搭建MyBatis采用xml方式…

三、MyBatis核心配置文件详解

文章目录 三、MyBatis核心配置文件详解 三、MyBatis核心配置文件详解 application.properties server.port8018 jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql://192.168.31.20:3306/litemall jdbc.usernameroot jdbc.password123456详情请看mybatis-config.xml配置…

Linux Ansible-Jinjia2模板

目录 jinja2模板语法 部署jinja2模板 jinja2逻辑表达式 jinja2是基于Python书写的模块引擎&#xff0c;ansible通常会使用jinja2模块结合template模块来修改被管理主机的配置文件 一般使用ansible的事实变量或魔法变量编写一个jinja2模板文件&#xff0c;然后使用template模…

Navicat安装教程和评测

Navicat是一款功能强大的数据库管理软件&#xff0c;拥有丰富的功能和易于使用的界面&#xff0c;因此价格相对较高。此外&#xff0c;Navicat还提供了多种数据库类型的支持&#xff0c;包括MySQL、Oracle、PostgreSQL等&#xff0c;每种数据库类型都需要花费开发人员大量的时间…

Qt QWidget 独立窗口抗锯齿圆角的一个实现方案(支持子控件)

QWidget独立窗口抗锯齿圆角窗口的一个实现方案 由于 QWidget::setMask 接口设置圆角不支持抗锯齿&#xff0c;所以通常会使用透明窗口加圆角背景&#xff0c;但圆角背景不能满足对子控件的裁剪&#xff0c;子控件与圆角区域重叠的部分还是能显示出来。当然对于大多数窗口&…

使用Git和GitHub完成团队项目开发

前提 拥有自己的GitHub账号项目组组长已经创建好了 一个远程仓库能够科学上网安装了Git软件 基础步骤 该内容分为两个部分&#xff0c;分别为团队协作者&#xff08;项目成员&#xff09;和团队组织者&#xff08;项目组长&#xff09;&#xff0c;我们首先来介绍作为项目成员…

BitoAI:新型AI编码助手,支持GPT-4

在之前的文章中&#xff0c;小编带大家分享体验过OpenAI的Cursor代码生成器、Codeium编程助手、亚马逊的CodeWhisperer。大家也都非常踊跃的在评论区分享了体验的感受及遇到的问题。 而最近又出现了一款新型编程助手BitoAI。今天的主要内容就是给大家介绍它&#xff0c;号称 I…

栈的顺序存储结构与操作 题目编号:457

题目描述 请你定义一个顺序栈&#xff0c;可以对顺序栈进行“将某个元素入栈”、“弹出栈顶元素”、“取栈顶元素&#xff08;不删除&#xff09;”、“判断栈是否为空”、“清空栈”等操作。键盘输入一些命令&#xff0c;可以执行上述操作。本题中&#xff0c;顺序栈元素为字…

宝塔面板主题模板修改详细使用教程

宝塔面板主题模板修改详细使用教程 宝塔面板目前没有完善的主题、语言包功能&#xff0c;因此资源均采用覆盖的方式使用。 使用前请确保面板版本与资源包版本一致&#xff0c;新版本没有资源可以使用 降级版本 的方式使用。 原创资源均采用只修改少量静态文件的方式&#xff0c…

Portainer自定义设置默认的用户名密码

文章目录 Portainer介绍用户密码问题解决一半未完待续 Portainer介绍 Portainer是一款轻量级的Docker管理Web界面&#xff0c;它可以让用户方便地管理和部署Docker容器&#xff0c;管理Docker Swarm集群等用户可以通过Portainer轻松完成基于Docker的应用部署、镜像管理、容器监…