2 Star 4 Fork 1

shiyewei/摄像头识别手部姿态实现打地鼠游戏

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
myClass.py 4.40 KB
一键复制 编辑 原始数据 按行查看 历史
shiyewei 提交于 2021-09-03 05:56 . 上传文件
import operator
from functools import reduce
from random import Random
from playsound import playsound
from PyQt5 import QtWidgets
# 2D显示容器 QGraphicsView QGraphicsScene QGraphicsItem
from PyQt5.QtCore import QTimer
from PyQt5.QtGui import QPixmap, QCursor
# 坐标体系
# 1. 当场景(scene)小于视图(view)时:
# QGraphicsView的坐标原点在中心点
# scene的原点也在中心点(我们指定scene的位置,指定的是scene的原点的位置)
# 2. 当场景大于视图时:
# 两者的坐标原点都在左上角
class MyScene(QtWidgets.QGraphicsScene): # 场景类 坐标原点在中心点,但
def __init__(self, parent):
super().__init__()
self.parent = parent
self.bg = QPixmap(r".\img\no_mouse.jpg")
self.mole = QPixmap(r".\img\mouse_single.jpg")
self.items = [] # 定义数组存储图元
self.w = 4 #行数
self.h = 6 #列数
for y in range(self.w):
self.items.append([])
for x in range(self.h):
mp = MyPixmapItem(parent)
mp.setPos(mp.boundingRect().width()*x, mp.boundingRect().height()*y)
self.addItem(mp)
self.items[y].append(mp)
self.count = 60
self.timer = QTimer()
self.timer2 = QTimer()
self.timer2.timeout.connect(self.Refresh)
self.timer.timeout.connect(self.showMole)
def startGame(self):
self.timer.start(2000)
self.timer2.start(1000)
for item in reduce(operator.add, self.items):
item.start = True
def pauseGame(self):
self.timer.stop()
for item in reduce(operator.add, self.items):
item.start = False
def stopGame(self):
for item in reduce(operator.add, self.items):
item.setPixmap(self.bg)
item.isMole = False
item.start = False
self.timer.stop()
self.parent.score = 0
self.parent.lcdNumber_score.display(self.parent.score)
def showMole(self):
for item in reduce(operator.add, self.items):
item.setPixmap(self.bg)
item.isMole = False
for i in range(Random().randint(1, 3)):
x = Random().randint(0, self.h - 1)
y = Random().randint(0, self.w -1)
self.items[y][x].setPixmap(QPixmap(self.mole))
self.items[y][x].isMole = True
def Refresh(self):
if self.count > 0:
self.parent.lcdNumber_time.display(self.count)
self.count -= 1
else:
self.timer2.stop()
QtWidgets.QMessageBox.information(self.parent,'提示','时间到,您最后的分数为' + str(self.parent.score))
self.count = 60
for item in reduce(operator.add, self.items):
item.setPixmap(self.bg)
item.isMole = False
item.start = False
self.timer.stop()
self.parent.score = 0
self.parent.lcdNumber_score.display(self.parent.score)
class MyPixmapItem(QtWidgets.QGraphicsPixmapItem): # 像素 图元类
def __init__(self, parent):
super().__init__()
self.setPixmap(QPixmap(r".\img\no_mouse.jpg"))
self.setCursor(QCursor(QPixmap("./img/hammer_up.png")))
self.parent = parent
self.__isMole = False # 标识图片是否是老鼠
self.__start = False # 标识游戏是否正在进行中
@property
def isMole(self):
return self.__isMole
@isMole.setter
def isMole(self,value):
self.__isMole = value
@property
def start(self):
return self.__start
@start.setter
def start(self, value):
self.__start = value
def mousePressEvent(self, event):
# QtWidgets.QMessageBox().question(None, "提示", "鼠标按下", QtWidgets.QMessageBox.Yes) # 注意None不能是self。
self.setCursor(QCursor(QPixmap('./img/hammer_down.png')))
if self.__start:
if self.__isMole == True:
self.__isMole = False
# playsound(r'./sound/hit.mp3')
self.parent.score += 10
self.setPixmap(QPixmap(r".\img\mouse_killed.png"))
self.parent.lcdNumber_score.display(self.parent.score)
def mouseReleaseEvent(self, event: 'QGraphicsSceneMouseEvent') -> None:
self.setCursor(QCursor(QPixmap("./img/hammer_up.png")))
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/shiyewei/number_2.git
git@gitee.com:shiyewei/number_2.git
shiyewei
number_2
摄像头识别手部姿态实现打地鼠游戏
master

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385