QT--QGraphicsView Whac-A-Mole 打地鼠(1)

2020-3-5更新

后续(2)
https://blog.csdn.net/weixin_43086497/article/details/104681956

2020-3-9更新

后续(3)
https://blog.csdn.net/weixin_43086497/article/details/104758504

原内容

打地鼠

概况

这个项目里面主要用到的一个控件就是Graphics View。
它相当于一个容器,管理着它其中的Items并且能与之进行交互。
有关它的框架:
QGraphicsView容器->QGraphicsScence场景->QGraphicsItem图元
其中QGraphicsItem图元类,只是一个虚基类,有8中不同的派生类
这个项目中主要用到其中的QGraphicsPixmapItem 像素图元

成品

在这里插入图片描述

项目需要有图片,音乐等一些资源文件,需要利用QT自带的
Qt Resource File,先新建一个空白工程。
在这里插入图片描述
右击项目名称,添加新文件,选Qt,选中QtResource File
在这里插入图片描述
然后可以看到目录多了一个Resources文件
右击Resources目录下刚刚新建的resources文件
选中Open in Editor
在这里插入图片描述
这时候可以开始添加我们的项目文件
此时点击添加,添加文件是不可选的,可以点击添加前缀
在这里插入图片描述
可以编辑自己喜欢的前缀名,必须以 / 开头
它就相当于文件的目录,这个Resources相当于一个文件管理系统
此时可以点击添加,添加文件了,点击需要添加的文件
我这里只添加一些需要的图片
在这里插入图片描述
然后来到Forms下ui界面添加一个Graphics View
顺便添加需要的游戏按钮pushButton,开始和停止,命名好
然后添加一个显示成绩的LCD Number,按自己喜好布局好
在这里插入图片描述

此时我们需要构造场景给GraphicsView显示,场景由一个个最基本的图元Item组成
所以先添加一个类,够造Item
依旧右击项目添加新文件
在这里插入图片描述
选中新建C++类
在这里插入图片描述
这里给它指定一个Base Class,方便后面使用
QGraphicsPixmapItem
完成添加后,点开新建类的头文件
先包含QGraphicsPixmapItem头文件
在这里插入图片描述
一个item类就构造完成,下面实现功能
把项目需要的图片跟图元Item绑定起来,使用
void QGraphicsPixmapItem::setPixmap(const QPixmap &pixmap)函数
它需要一个QPixmap类型的传参,QPixmap有很多种重载
我们需要显示图片,就为它传进我们刚刚添加的资源文件的路径
在这里插入图片描述
此时一个最小图元就基本构造完成
下一步利用图元做一个场景,依旧新建一个类
但是要勾选一个QObject
在这里插入图片描述
新建完毕后打开新建类的头文件,我这里新建的是scene
打开scene.h把QObject改为QGraphicsScene
并且包含头文件,方便后面使用
在这里插入图片描述
此时我们先包含Item头文件并切构造一个Item类的对象
在这里插入图片描述
然后来到scene.cpp把图元加到场景里面去
这里使用
void QGraphicsScene::addItem(QGraphicsItem *item)
把图元加到场景
注意scene.cpp最底下的类也要改一下为QGraphicsScene
在这里插入图片描述
场景到这里就基本构造好了,下面实现显示

来到mainwidow.h
同样是包含scene类头文件并切构造一个scene对象
在这里插入图片描述
来到mainwindow.cpp里把场景跟grapicsview绑定
这里使用
void QGraphicsView::setScene(QGraphicsScene *scene)
可以看见这里需要一个QGraphicsScene 的传参
就把我们新构造的场景传进去就完成了
在这里插入图片描述

效果图

在这里插入图片描述
图元->场景->graphicsView
一个基本的框架有了,剩下打地鼠的完整功能明天继续。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Python 实现打地鼠游戏的代码: ```python import random import time class WhacAMole: def __init__(self, num_holes): self.num_holes = num_holes self.holes = [0] * num_holes self.score = 0 def print_board(self): print("Score: {}".format(self.score)) for i in range(self.num_holes): if self.holes[i] == 0: print("|{}|".format(i+1), end="") else: print("|X|", end="") print() def add_mole(self): index = random.randint(0, self.num_holes-1) self.holes[index] = 1 def remove_mole(self, index): self.holes[index] = 0 def play(self): print("Welcome to Whac-A-Mole!") print("You have 30 seconds to whack as many moles as you can.") start_time = time.time() while time.time() - start_time < 30: self.print_board() index = input("Choose a hole to whack (1-{}): ".format(self.num_holes)) index = int(index) - 1 if self.holes[index] == 1: self.score += 1 self.remove_mole(index) else: print("Missed!") self.add_mole() time.sleep(1) print("Time's up! Final score: {}".format(self.score)) # 测试 game = WhacAMole(6) game.play() ``` 这个程序实现一个有 6 个洞的打地鼠游戏。每隔一秒钟,程序会在随机的一个洞中出现一个地鼠。玩家需要在 30 秒内尽可能多地击中地鼠,每击中一个地鼠就会得到一分,未击中则不得分。最终输出总分数。 在这个代码实现中,我们使用了 `time` 模块来计时,并使用 `random` 模块随机生成地鼠出现的位置。玩家需要输入一个数字来选择击打的洞,如果该洞中有地鼠,则得分,否则不得分。你可以尝试修改这个代码来实现更多的功能,比如让游戏自动适应屏幕大小、增加更多的洞和地鼠等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值