python+pyqt5实现24点小游戏


Posted in Python onJanuary 24, 2019

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

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

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QBasicTimer
from PyQt5.QtGui import QPixmap
import sys

class 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 itertools
import 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+pyqt5实现24点小游戏

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

python+pyqt5实现24点小游戏

答题结束时汇总成绩

python+pyqt5实现24点小游戏

有问题欢迎评论

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

Python 相关文章推荐
使用httplib模块来制作Python下HTTP客户端的方法
Jun 19 Python
Python实现快速多线程ping的方法
Jul 15 Python
Python下rrdtool模块的基本使用方法
Nov 13 Python
python实现年会抽奖程序
Jan 22 Python
将python图片转为二进制文本的实例
Jan 24 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 Python
详解Django admin高级用法
Nov 06 Python
Python requests获取网页常用方法解析
Feb 20 Python
django rest framework 自定义返回方式
Jul 12 Python
Python爬取网页信息的示例
Sep 24 Python
python中实现控制小数点位数的方法
Jan 24 #Python
对python以16进制打印字节数组的方法详解
Jan 24 #Python
python3实现点餐系统
Jan 24 #Python
使用Python批量修改文件名的代码实例
Jan 24 #Python
Python并发:多线程与多进程的详解
Jan 24 #Python
python用opencv批量截取图像指定区域的方法
Jan 24 #Python
python+pyqt5实现KFC点餐收银系统
Jan 24 #Python
You might like
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
DHTML Slide Show script图片轮换
2008/03/03 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
javascript模拟命名空间
2015/04/17 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
python三元运算符实现方法
2013/12/17 Python
Python 异常处理实例详解
2014/03/12 Python
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python生成随机MAC地址
2015/03/10 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
力学专业毕业生自荐信
2013/11/17 职场文书
英文商务邀请信
2014/01/22 职场文书
搞笑创意广告语
2014/03/17 职场文书
企业介绍信范文
2015/01/30 职场文书
实习班主任自我评价
2015/03/11 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
详解Python描述符的工作原理
2021/06/11 Python
go goth封装第三方认证库示例详解
2022/08/14 Golang