Python 和 PyQt5 实现打地鼠小游戏

Python 和 PyQt5 实现打地鼠小游戏

实现效果:

视频效果:

https://live.csdn.net/v/264602icon-default.png?t=M85Bhttps://live.csdn.net/v/264602

 代码:

import random
import sys

from PyQt5.QtCore import QBasicTimer, Qt, QTimer
from PyQt5.QtGui import QColor, QImage, QPixmap
from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QMainWindow

class WhackAMole(QMainWindow):
    def __init__(self):
        super().__init__()

        # 设置窗口属性
        self.setWindowTitle("Whack-A-Mole")
        self.setGeometry(300, 300, 250, 150)

        # 创建一个图形场景
        self.scene = QGraphicsScene()
        self.view = QGraphicsView(self.scene)

        # 创建一个计时器
        self.timer = QBasicTimer()
        self.interval = 1000  # 每一秒发生一次事件

        # 创建一个地鼠
        self.mole = self.scene.addPixmap(QPixmap("mole.png"))
        self.mole.setPos(random.randint(0, 200), random.randint(0, 100))
        self.mole.setZValue(1)

        # 设置窗口布局
        self.setCentralWidget(self.view)

    def startGame(self):
        self.timer.start(self.interval, self)

    def timerEvent(self, event):
        if event.timerId() == self.timer.timerId():
            # 随机移动地鼠
            self.mole.setPos(random.randint(0, 200), random.randint(0, 100))
        else:
            super().timerEvent(event)

    def mousePressEvent(self, event):
        # 点击地鼠时,将地鼠隐藏
        if self.mole.isUnderMouse():
            self.mole.hide()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    game = WhackAMole()
    game.show()
    game.startGame()
    sys.exit(app.exec_())

这个程序使用 PyQt5 创建了一个窗口,并在窗口中添加了一个图形场景和一个地鼠图像。它还创建了一个计时。

如果你想让窗口能够随用户的操作自由改变大小,可以使用 PyQt5 的 setWindowFlag 方法将窗口标记设置为 Qt.Window。例如:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow

app = QApplication(sys.argv)
window = QMainWindow()
window.setWindowTitle("My Window")
window.setGeometry(300, 300, 250, 150)

# 设置窗口标记为 Qt.Window,使窗口能够自由改变大小
window.setWindowFlag(Qt.Window)

window.show()
sys.exit(app.exec_())
如果你想在窗口大小改变时执行某些操作,可以使用 resizeEvent 事件处理器。例如,下面的代码在窗口大小改变时输出当前窗口的宽度和高度:
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("My Window")
        self.setGeometry(300, 300, 250, 150)
        self.setWindowFlag(Qt.Window)

    def resizeEvent(self, event):
        # 在窗口大小改变时输出当前窗口的宽度和高度
        print(f"Window resized: {event.size().width()} x {event.size().height()}")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

 注意,在使用 resizeEvent 事件处理器时,需要调用父类的 resizeEvent 方法。这是因为,在 PyQt5 中,事件处理器是通过覆盖父类的方法来实现的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

babyai997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值