Python 和 PyQt5 实现打地鼠小游戏
实现效果:
视频效果:
https://live.csdn.net/v/264602https://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 中,事件处理器是通过覆盖父类的方法来实现的。