24点游戏python版

本文介绍了使用Python和Pyqt5实现24点游戏的详细过程,包括游戏规则、功能要求、界面设计、核心算法、各类事件响应以及游戏结束和分数记录。玩家需要在规定时间内输入运算表达式,正确计算出24点则得分,否则会扣除生命值。
摘要由CSDN通过智能技术生成

24点游戏python版

  • 问题描述与规则

    24点游戏是经典的纸牌益智游戏。常见游戏规则:从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。

  • 游戏要求

    • 基本要求
      随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式。

    • 提高要求
      用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。

    • 其他要求
      1.程序风格良好(使用自定义注释模板)
      2.使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。
      3.所有成绩均可记录在TopList.txt文件中

  • 功能实现

    • 界面部分

      界面部分,我采用Pyqt5这个库,利用QT,自动生成界面,下面是界面部分的代码

          def setupUi(self, Form):
              self.V_Life = 3                                                                                                 #初始生命
              self.V_Score = 0                                                                                                #初始分数
              Form.setObjectName("Form")                                                                                      #主窗口
              Form.resize(706, 386)                                                                                           #主窗口大小
              Form.setStyleSheet("#Form{border-image: url(image/59.png);}")                                                   #给主窗口加背景图片
              #控件
              self.handPoke = QtWidgets.QPushButton(Form)
              self.handPoke.setGeometry(QtCore.QRect(90, 280, 71, 31))
              self.handPoke.setObjectName("handPoke")
              self.poke_1 = QtWidgets.QLabel(Form)
              self.poke_1.setGeometry(QtCore.QRect(60, 30, 91, 161))
              self.poke_1.setObjectName("poke_1")
              self.lineEdit = QtWidgets.QLineEdit(Form)
              self.lineEdit.setGeometry(QtCore.QRect(90, 230, 311, 31))
              self.lineEdit.setObjectName("lineEdit")
              self.poke_4 = QtWidgets.QLabel(Form)
              self.poke_4.setGeometry(QtCore.QRect(450, 30, 91, 161))
              self.poke_4.setObjectName("poke_4")
              self.poke_2 = QtWidgets.QLabel(Form)
              self.poke_2.setGeometry(QtCore.QRect(190, 30, 91, 161))
              self.poke_2.setObjectName("poke_2")
              self.poke_3 = QtWidgets.QLabel(Form)
              self.poke_3.setGeometry(QtCore.QRect(320, 30, 91, 161))
              self.poke_3.setObjectName("poke_3")
              self.shuRu = QtWidgets.QLabel(Form)
              self.shuRu.setGeometry(QtCore.QRect(10, 220, 71, 51))
              self.shuRu.setObjectName("shuRu")
              self.queDing = QtWidgets.QPushButton(Form)
              self.queDing.setGeometry(QtCore.QRect(200, 280, 75, 31))
              self.queDing.setObjectName("queDing")
              self.quXiao = QtWidgets.QPushButton(Form)
              self.quXiao.setGeometry(QtCore.QRect(310, 280, 75, 31))
              self.quXiao.setObjectName("quXiao")
      
      
      
              self.timer = QBasicTimer()                                                                                      #实例化QBasicTimer,用于计时器功能
              self.step = 0                                                                                                   #时间增加速度
              self.time = QtWidgets.QProgressBar(Form)
              self.time.setGeometry(QtCore.QRect(90, 330, 341, 23))
              self.time.setMaximum(60)
              self.time.setProperty("value", 0)
              self.time.setObjectName("time")
              self.label = QtWidgets.QLabel(Form)
              self.label.setGeometry(QtCore.QRect(50, 330, 31, 21))
              self.label.setObjectName("label")
      
              self.label_life = QtWidgets.QLabel(Form)
              self.label_life.setGeometry(QtCore.QRect(550, 50, 31, 16))
              self.label_life.setObjectName("label_life")
              self.label_ = QtWidgets.QLabel(Form)
              self.label_.setGeometry(QtCore.QRect(550, 100, 31, 16))
              self.label_.setObjectName("label_")
              self.life = QtWidgets.QLCDNumber(Form)
              self.life.setGeometry(QtCore.QRect(590, 50, 64, 23))
              self.life.setObjectName("life")
              self.Score = QtWidgets.QLCDNumber(Form)
              self.Score.setGeometry(QtCore.QRect(590, 100, 64, 23))
              self.Score.setObjectName("Score")
              self.life.setDigitCount(5)
              self.life.setMode(QLCDNumber.Dec)
              self.life.display(self.V_Life)
              self.Score.display(self.V_Score)
              self.life.setStyleSheet("QLCDNumber{border: 1px solid black;color:red}")                                        #设置QLCD显示数字的颜色,同时增加1pxd黑色边框
              self.life.setSegmentStyle(QLCDNumber.Flat)
              self.Score.setStyleSheet("QLCDNumber{border: 1px solid black;color:red}")                                       #设置QLCD显示数字的颜色,同时增加1pxd黑色边框
              self.Score.setSegmentStyle(QLCDNumber.Flat)
      
              self.retranslateUi(Form)
              QtCore.QMetaObject.connectSlotsByName(Form)
          def retranslateUi(self, Form):
              _translate = QtCore.QCoreApplication.translate
              Form.setWindowTitle(_translate("Form", "24点游戏"))
              self.handPoke.setText(_translate("Form", "发牌"))
              self.poke_1.setText(_translate("Form", "扑克牌1"))
              self.poke_4.setText(_translate("Form", "扑克牌4"))
              self.poke_2.setText(_translate("Form", "扑克牌2"))
              self.poke_3.setText(_translate("Form", "扑克牌3"))
              self.shuRu.setText(_translate("Form", "  输入算式"))
              self.queDing.setText(_translate("Form", "确定"))
              self.quXiao.setText(_translate("Form", "结束游戏"))
              self.time.setFormat(_translate("Form", "%p"))
              self.label.setText(_translate("Form", " 时间"))
              self.label_life.setText(_translate("Form", "生命"))
              self.label_.setText(_translate("Form", "得分"))
              self.handPoke.clicked.connect(self.handpoke)                                                                    #点击事件:点击发牌按钮,触发发牌
              self.handPoke.clicked.connect(self.tiMer)                                                                       #点击事件:点击发牌按钮,触发计时
              self.queDing.clicked.connect(self.in_enter)                                                                     #点击事件:点击确定按钮,触发提交算式功能
              self.quXiao.clicked.connect(self.Close)                                                                         #点击事件:点击结束游戏按钮,触发程序退出功能
              self.show_messsage()                                                                                            #提示框,游戏开始时进行提示
      
      
    • 核心算法部分
      算法部分不是自己的原创,借鉴的网上一位大佬的(原文章的链接我不小心弄丢了,十分抱歉,若是有人看到可以在评论区留下原文章),然后说一下这个算法吧,这个算法就是用将牌面的4个数字与3个运算符进行全排列组合,如果有组合满足结果为24,将此公式保存列表mylist,当用户输入公式,再和这个列表mylist中进行匹配,只要有一个匹配成功就进行下一关,分数加10分若无则生命值减1,进入下一关。具体代码实现如下

      #算法
          def Algorithm24(self):
              self.lst=[self.A1,self.A2,self.A3,self.A4]
              self.exps = ('((%s%s%s)%s%s)%s%s',
                      '(%s%s%s)%s(%s%s%s)',
                      '(%s%s(%s%s%s))%s%s',
                      '%s%s((%s%s%s)%s%s)',
                      '%s%s(%s%s(%s%s%s))')
              self.ops = r'+-*/'
              self.r
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值