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 相关文章推荐
python快速排序代码实例
Nov 21 Python
Python解析nginx日志文件
May 11 Python
使用Python设计一个代码统计工具
Apr 04 Python
Python socket实现的简单通信功能示例
Aug 21 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
python打开使用的方法
Sep 30 Python
Python实现对adb命令封装
Mar 06 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
python对输出的奇数偶数排序实例代码
Dec 04 Python
一行代码python实现文件共享服务器
Apr 22 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
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
php采用curl模仿登录人人网发布动态的方法
2014/11/07 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
python 以16进制打印输出的方法
2018/07/09 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
python微信公众号开发简单流程实现
2020/03/09 Python
Django数据库操作之save与update的使用
2020/04/01 Python
耐克中国官方商城:Nike中国
2018/10/18 全球购物
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
数据库基础的一些面试题
2012/02/25 面试题
教师自荐信范文
2013/12/09 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
党性教育心得体会
2014/09/03 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
实施意见格式范本
2015/06/05 职场文书
初中政治教学反思
2016/02/23 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
Python内置数据结构列表与元组示例详解
2021/08/04 Python
python多线程方法详解
2022/01/18 Python
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android