侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python+pyqt5实现24点小游戏

Python  /  管理员 发布于 7年前   131

本文实例为大家分享了python实现24点游戏的具体代码,供大家参考,具体内容如下

描述:一副牌中A、J、Q、K可以当成是1、11、12、13。任意抽取4张牌,用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌对应的数字必须用一次且只能用一次。在规定时间内输入算式,输入正确加十分,输入错误生命值减一,点击确定提交并进入下一题,点击清空可清空算式。点击开始游戏进入游戏,可重新开始游戏。

from PyQt5 import QtCore, QtWidgetsfrom PyQt5.QtWidgets import *from PyQt5.QtCore import QBasicTimerfrom PyQt5.QtGui import QPixmapimport sysclass Ui_Form(QWidget): def setupUi(self,Form):  Form.setObjectName("Form")  Form.resize(946, 515)  self.pushButton = QtWidgets.QPushButton(Form)  self.pushButton.setGeometry(QtCore.QRect(70, 30, 131, 41))  self.pushButton.setObjectName("pushButton")  self.pushButton.clicked.connect(self.on_click1)  self.pushButton_4 = QtWidgets.QPushButton(Form)  self.pushButton_4.setGeometry(QtCore.QRect(280, 30, 131, 41))  self.pushButton_4.setObjectName("pushButton_4")  self.pushButton_4.clicked.connect(self.on_click4)  self.pushButton_4.setEnabled(False)  self.textEdit = QtWidgets.QTextEdit(Form)  self.textEdit.setGeometry(QtCore.QRect(700, 120, 191, 301))  self.textEdit.setObjectName("textEdit")  self.textEdit.setReadOnly(True)  self.label = QtWidgets.QLabel(Form)  self.label.setGeometry(QtCore.QRect(70, 300, 111, 31))  self.label.setObjectName("label")  self.lineEdit = QtWidgets.QLineEdit(Form)  self.lineEdit.setGeometry(QtCore.QRect(170, 300, 361, 31))  self.lineEdit.setObjectName("lineEdit")  self.lineEdit.setMaxLength(15)  self.label_2 = QtWidgets.QLabel(Form)  self.label_2.setGeometry(QtCore.QRect(70, 100, 101, 171))  self.label_2.setObjectName("label_2")  self.label_3 = QtWidgets.QLabel(Form)  self.label_3.setGeometry(QtCore.QRect(220, 100, 101, 171))  self.label_3.setObjectName("label_3")  self.label_4 = QtWidgets.QLabel(Form)  self.label_4.setGeometry(QtCore.QRect(370, 100, 101, 171))  self.label_4.setObjectName("label_4")  self.label_5 = QtWidgets.QLabel(Form)  self.label_5.setGeometry(QtCore.QRect(510, 100, 101, 171))  self.label_5.setObjectName("label_5")  self.pushButton_2 = QtWidgets.QPushButton(Form)  self.pushButton_2.setGeometry(QtCore.QRect(170, 360, 93, 28))  self.pushButton_2.setObjectName("pushButton_2")  self.pushButton_2.clicked.connect(self.on_click2)  self.pushButton_3 = QtWidgets.QPushButton(Form)  self.pushButton_3.setGeometry(QtCore.QRect(300, 360, 93, 28))  self.pushButton_3.setObjectName("pushButton_3")  self.pushButton_3.clicked.connect(self.on_click3)  self.progressBar = QtWidgets.QProgressBar(Form)  self.progressBar.setGeometry(QtCore.QRect(170, 430, 401, 21))  self.progressBar.setProperty("value", 0)  self.progressBar.setObjectName("progressBar")  self.timer = QBasicTimer()  self.step = 0  self.retranslateUi(Form)  QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form):  _translate = QtCore.QCoreApplication.translate  Form.setWindowTitle(_translate("Form", "24点游戏"))  self.pushButton.setText(_translate("Form", "开始游戏"))  self.pushButton_4.setText(_translate("Form", "重新开始"))  self.textEdit.setHtml(_translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n""<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n""p, li { white-space: pre-wrap; }\n""</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n""<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">规则:</p>\n""<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">一副牌中A、J、Q、K可以当成是1、11、12、13。任意抽取4张牌,用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌对应的数字必须用一次且只能用一次。在规定时间内输入算式,输入正确加十分,输入错误生命值减一,点击确定提交并进入下一题,点击清空可清空算式。点击开始游戏进入游戏。</p></body></html>"))  self.label.setText(_translate("Form", "请输入算式:"))  self.label_2.setText(_translate("Form", ""))  self.label_3.setText(_translate("Form", ""))  self.label_4.setText(_translate("Form", ""))  self.label_5.setText(_translate("Form", ""))  self.pushButton_2.setText(_translate("Form", "确定"))  self.pushButton_3.setText(_translate("Form", "清空"))

以上为设置界面

import itertoolsimport random  #已做题目数  self.question_number = 0  # 生命值  self.life = 3  # 分数  self.score = 0  # 重新开始标记  self.recover = 0 # 发牌器 随机抽取四个数字 def cardFun(self):  for i in range(4):   cardNum.append(int(random.random() * 100 % 13) + 1)  self.listSet = list(set(itertools.permutations(cardNum, 4)))  return self.listSet # 存放A(4,4)种排列方式的列表 # 显示四个数字对应的扑克牌 def cardCompute(self):  cardList = self.cardFun()  for i in range(len(cardList)):   self.cardGroup = cardList[i]  self.picture_1()  self.picture_2()  self.picture_3()  self.picture_4() def fresh(self):  self.lineEdit.setText('')  self.cardFun()  self.cardCompute()  # 停止计时  self.progress_bar()  # 重新开始计时  self.step = 0  self.step = self.step + 1  self.progressBar.setValue(self.step) # 开始游戏 def on_click1(self):  self.cardFun()  self.cardCompute()  self.progress_bar()  # 将开始游戏按钮设置为不可用  self.pushButton.setEnabled(False)  # 将重新开始游戏按钮设置为可用  self.pushButton_4.setEnabled(True) # 确定提交 def on_click2(self):  # 已做题目数增加  self.question_number += 1  # 停止计时  self.timer.stop()  # 当做到最后一题  if self.question_number == 3:   self.recover = 1   # 获取输入算式   self.calstr = self.lineEdit.text()   # 如果所输入为空生命值减一   if self.calstr == "":    self.life -= 1   else:    # 计算所输入算式    self.result = int(eval(self.calstr))    # 如果正确加十分,错误生命值减一    if self.result == 24:     self.score += 10    else:     self.life -= 1   # 清空输入框   self.lineEdit.setText('')   # 弹出消息提示框   QMessageBox.information(self, "恭喜你", "答题结束\n您的生命值为" + str(self.life) + ",分数为" + str(self.score),         QMessageBox.Close)   # 设置确定和清空按钮为不可用   self.pushButton_2.setEnabled(False)   self.pushButton_3.setEnabled(False)  else:   self.calstr = self.lineEdit.text()   if self.calstr == "":    self.life -= 1    QMessageBox.information(self, "很遗憾", "算式输入不正确\n进入下一题", QMessageBox.Yes)    self.fresh()   else:    self.result = int(eval(self.calstr))    if self.result == 24:     self.score += 10     QMessageBox.information(self, "恭喜你", "算式输入正确\n进入下一题", QMessageBox.Yes)     self.fresh()    else:     self.life -= 1     QMessageBox.information(self, "很遗憾", "算式输入不正确\n进入下一题", QMessageBox.Yes)     self.fresh() # 清空 def on_click3(self):  self.lineEdit.setText('') #重新开始游戏 def on_click4(self):  # 初始化已做题数、生命值、分数、时间  self.question_number = 0  self.life = 3  self.score = 0  self.step = 0  self.timer.stop()  QMessageBox.information(self, "重新开始游戏", "生命值和分数已重置", QMessageBox.Yes)  if self.recover == 1:   self.pushButton_2.setEnabled(True)   self.pushButton_3.setEnabled(True)  self.cardFun()  self.cardCompute()  self.timer.start(600, self)  self.step = self.step + 1  self.progressBar.setValue(self.step) # 使用一个计时器来启动进度条 def timerEvent(self, e):  # 如果时间到,则停止计时,已做题数加一  if self.step >= 100:   self.timer.stop()   self.question_number += 1   if self.question_number ==3:    self.recover = 1    self.calstr = self.lineEdit.text()    if self.calstr == "":     self.life -= 1    else:     self.result = int(eval(self.calstr))     if self.result == 24:      self.score += 10     else:      self.life -= 1    self.lineEdit.setText('')    # 弹出结果消息框    QMessageBox.information(self, "恭喜你", "答题结束\n您的生命值为"+str(self.life)+",分数为"+str(self.score), QMessageBox.Close)    self.pushButton_2.setEnabled(False)    self.pushButton_3.setEnabled(False)   else:    self.life -= 1    QMessageBox.information(self, "很遗憾", "规定时间已到\n进入下一题", QMessageBox.Yes)    self.fresh()    return  self.step = self.step + 1  self.progressBar.setValue(self.step) # 进度条 def progress_bar(self):  if self.timer.isActive():   self.timer.stop()  else:   # 规定时间为1分钟   self.timer.start(600,self) # 显示抽取的第一张牌 def picture_1(self):  if self.cardGroup[0] == 1:   self.label_2.setPixmap(QPixmap('./h1.png')) # 图片路径  elif self.cardGroup[0] == 2:   self.label_2.setPixmap(QPixmap('./h2.png'))  elif self.cardGroup[0] == 3:   self.label_2.setPixmap(QPixmap('./h3.png'))  elif self.cardGroup[0] == 4:   self.label_2.setPixmap(QPixmap('./h4.png'))  elif self.cardGroup[0] == 5:   self.label_2.setPixmap(QPixmap('./h5.png'))  elif self.cardGroup[0] == 6:   self.label_2.setPixmap(QPixmap('./h6.png'))  elif self.cardGroup[0] == 7:   self.label_2.setPixmap(QPixmap('./h7.png'))  elif self.cardGroup[0] == 5:   self.label_2.setPixmap(QPixmap('./h8.png'))  elif self.cardGroup[0] == 9:   self.label_2.setPixmap(QPixmap('./h9.png'))  elif self.cardGroup[0] == 10:   self.label_2.setPixmap(QPixmap('./h10.png'))  elif self.cardGroup[0] == 11:   self.label_2.setPixmap(QPixmap('./h11.png'))  elif self.cardGroup[0] == 12:   self.label_2.setPixmap(QPixmap('./h12.png'))  elif self.cardGroup[0] == 13:   self.label_2.setPixmap(QPixmap('./h13.png'))  # 将扑克牌填充整个标签  self.label_2.setScaledContents(True) # 显示抽取的第二张牌 def picture_2(self):  if self.cardGroup[1] == 1:   self.label_3.setPixmap(QPixmap('./b1.png'))  elif self.cardGroup[1] == 2:   self.label_3.setPixmap(QPixmap('./b2.png'))  elif self.cardGroup[1] == 3:   self.label_3.setPixmap(QPixmap('./b3.png'))  elif self.cardGroup[1] == 4:   self.label_3.setPixmap(QPixmap('./b4.png'))  elif self.cardGroup[1] == 5:   self.label_3.setPixmap(QPixmap('./b5.png'))  elif self.cardGroup[1] == 6:   self.label_3.setPixmap(QPixmap('./b6.png'))  elif self.cardGroup[1] == 7:   self.label_3.setPixmap(QPixmap('./b7.png'))  elif self.cardGroup[1] == 5:   self.label_3.setPixmap(QPixmap('./b8.png'))  elif self.cardGroup[1] == 9:   self.label_3.setPixmap(QPixmap('./b9.png'))  elif self.cardGroup[1] == 10:   self.label_3.setPixmap(QPixmap('./b10.png'))  elif self.cardGroup[1] == 11:   self.label_3.setPixmap(QPixmap('./b11.png'))  elif self.cardGroup[1] == 12:   self.label_3.setPixmap(QPixmap('./b12.png'))  elif self.cardGroup[1] == 13:   self.label_3.setPixmap(QPixmap('./b13.png'))  self.label_3.setScaledContents(True) # 显示抽取的第三张牌 def picture_3(self):  if self.cardGroup[2] == 1:   self.label_4.setPixmap(QPixmap('./f1.png'))  elif self.cardGroup[2] == 2:   self.label_4.setPixmap(QPixmap('./f2.png'))  elif self.cardGroup[2] == 3:   self.label_4.setPixmap(QPixmap('./f3.png'))  elif self.cardGroup[2] == 4:   self.label_4.setPixmap(QPixmap('./f4.png'))  elif self.cardGroup[2] == 5:   self.label_4.setPixmap(QPixmap('./f5.png'))  elif self.cardGroup[2] == 6:   self.label_4.setPixmap(QPixmap('./f6.png'))  elif self.cardGroup[2] == 7:   self.label_4.setPixmap(QPixmap('./f7.png'))  elif self.cardGroup[2] == 5:   self.label_4.setPixmap(QPixmap('./f8.png'))  elif self.cardGroup[2] == 9:   self.label_4.setPixmap(QPixmap('./f9.png'))  elif self.cardGroup[2] == 10:   self.label_4.setPixmap(QPixmap('./f10.png'))  elif self.cardGroup[2] == 11:   self.label_4.setPixmap(QPixmap('./f11.png'))  elif self.cardGroup[2] == 12:   self.label_4.setPixmap(QPixmap('./f12.png'))  elif self.cardGroup[2] == 13:   self.label_4.setPixmap(QPixmap('./f13.png'))  self.label_4.setScaledContents(True) # 显示抽取的第四张牌 def picture_4(self):  if self.cardGroup[3] == 1:   self.label_5.setPixmap(QPixmap('./m1.png'))  elif self.cardGroup[3] == 2:   self.label_5.setPixmap(QPixmap('./m2.png'))  elif self.cardGroup[3] == 3:   self.label_5.setPixmap(QPixmap('./m3.png'))  elif self.cardGroup[3] == 4:   self.label_5.setPixmap(QPixmap('./m4.png'))  elif self.cardGroup[3] == 5:   self.label_5.setPixmap(QPixmap('./m5.png'))  elif self.cardGroup[3] == 6:   self.label_5.setPixmap(QPixmap('./m6.png'))  elif self.cardGroup[3] == 7:   self.label_5.setPixmap(QPixmap('./m7.png'))  elif self.cardGroup[3] == 5:   self.label_5.setPixmap(QPixmap('./m8.png'))  elif self.cardGroup[3] == 9:   self.label_5.setPixmap(QPixmap('./m9.png'))  elif self.cardGroup[3] == 10:   self.label_5.setPixmap(QPixmap('./m10.png'))  elif self.cardGroup[3] == 11:   self.label_5.setPixmap(QPixmap('./m11.png'))  elif self.cardGroup[3] == 12:   self.label_5.setPixmap(QPixmap('./m12.png'))  elif self.cardGroup[3] == 13:   self.label_5.setPixmap(QPixmap('./m13.png'))  self.label_5.setScaledContents(True)if __name__ == "__main__": cardNum = [] # 存放随机牌组 cardGroup = () # 调用牌组 app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QMainWindow() ui = Ui_Form() ui.setupUi(Form) Form.show() sys.exit(app.exec_())

实现各控件的功能

开始界面


点击确定提交,输入错误时会弹出消息框

答题结束时汇总成绩


有问题欢迎评论

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持,关注公众号的更多精彩内容。


  • 上一条:
    Python爬虫实战之12306抢票开源
    下一条:
    python中实现控制小数点位数的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客