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中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
在Python中使用Mako模版库的简单教程
Apr 08 Python
使用Python的Twisted框架实现一个简单的服务器
Apr 16 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
Sep 26 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 Python
python 获取字符串MD5值方法
May 29 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
Python2.6版本pip安装步骤解析
Aug 17 Python
python 检测nginx服务邮件报警的脚本
Dec 31 Python
python运算符之与用户交互
Apr 13 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表单提交问题的解决方法
2011/04/12 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
php实现的二分查找算法示例
2017/06/20 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
Python生成随机密码
2015/03/10 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
python实现两张图片的像素融合
2019/02/23 Python
Python 如何实现访问者模式
2020/07/28 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
《美丽的黄昏》教学反思
2014/02/28 职场文书
七夕情人节促销方案
2014/06/07 职场文书
班风口号
2014/06/18 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
教师考核鉴定意见
2015/06/05 职场文书
2016春节放假通知范文
2015/08/18 职场文书
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS