python+pyqt5實(shí)現(xiàn)24點(diǎn)小游戲
本文實(shí)例為大家分享了python實(shí)現(xiàn)24點(diǎn)游戲的具體代碼,供大家參考,具體內(nèi)容如下
描述:一副牌中A、J、Q、K可以當(dāng)成是1、11、12、13。任意抽取4張牌,用加、減、乘、除(可加括號)把牌面上的數(shù)算成24。每張牌對應(yīng)的數(shù)字必須用一次且只能用一次。在規(guī)定時(shí)間內(nèi)輸入算式,輸入正確加十分,輸入錯(cuò)誤生命值減一,點(diǎn)擊確定提交并進(jìn)入下一題,點(diǎn)擊清空可清空算式。點(diǎn)擊開始游戲進(jìn)入游戲,可重新開始游戲。
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點(diǎn)游戲"))
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;\">規(guī)則:</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可以當(dāng)成是1、11、12、13。任意抽取4張牌,用加、減、乘、除(可加括號)把牌面上的數(shù)算成24。每張牌對應(yīng)的數(shù)字必須用一次且只能用一次。在規(guī)定時(shí)間內(nèi)輸入算式,輸入正確加十分,輸入錯(cuò)誤生命值減一,點(diǎn)擊確定提交并進(jìn)入下一題,點(diǎn)擊清空可清空算式。點(diǎn)擊開始游戲進(jìn)入游戲。</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", "清空"))
以上為設(shè)置界面
import itertools
import random
#已做題目數(shù)
self.question_number = 0
# 生命值
self.life = 3
# 分?jǐn)?shù)
self.score = 0
# 重新開始標(biāo)記
self.recover = 0
# 發(fā)牌器 隨機(jī)抽取四個(gè)數(shù)字
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)種排列方式的列表
# 顯示四個(gè)數(shù)字對應(yīng)的撲克牌
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()
# 停止計(jì)時(shí)
self.progress_bar()
# 重新開始計(jì)時(shí)
self.step = 0
self.step = self.step + 1
self.progressBar.setValue(self.step)
# 開始游戲
def on_click1(self):
self.cardFun()
self.cardCompute()
self.progress_bar()
# 將開始游戲按鈕設(shè)置為不可用
self.pushButton.setEnabled(False)
# 將重新開始游戲按鈕設(shè)置為可用
self.pushButton_4.setEnabled(True)
# 確定提交
def on_click2(self):
# 已做題目數(shù)增加
self.question_number += 1
# 停止計(jì)時(shí)
self.timer.stop()
# 當(dāng)做到最后一題
if self.question_number == 3:
self.recover = 1
# 獲取輸入算式
self.calstr = self.lineEdit.text()
# 如果所輸入為空生命值減一
if self.calstr == "":
self.life -= 1
else:
# 計(jì)算所輸入算式
self.result = int(eval(self.calstr))
# 如果正確加十分,錯(cuò)誤生命值減一
if self.result == 24:
self.score += 10
else:
self.life -= 1
# 清空輸入框
self.lineEdit.setText('')
# 彈出消息提示框
QMessageBox.information(self, "恭喜你", "答題結(jié)束\n您的生命值為" + str(self.life) + ",分?jǐn)?shù)為" + str(self.score),
QMessageBox.Close)
# 設(shè)置確定和清空按鈕為不可用
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進(jìn)入下一題", QMessageBox.Yes)
self.fresh()
else:
self.result = int(eval(self.calstr))
if self.result == 24:
self.score += 10
QMessageBox.information(self, "恭喜你", "算式輸入正確\n進(jìn)入下一題", QMessageBox.Yes)
self.fresh()
else:
self.life -= 1
QMessageBox.information(self, "很遺憾", "算式輸入不正確\n進(jìn)入下一題", QMessageBox.Yes)
self.fresh()
# 清空
def on_click3(self):
self.lineEdit.setText('')
#重新開始游戲
def on_click4(self):
# 初始化已做題數(shù)、生命值、分?jǐn)?shù)、時(shí)間
self.question_number = 0
self.life = 3
self.score = 0
self.step = 0
self.timer.stop()
QMessageBox.information(self, "重新開始游戲", "生命值和分?jǐn)?shù)已重置", 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)
# 使用一個(gè)計(jì)時(shí)器來啟動進(jìn)度條
def timerEvent(self, e):
# 如果時(shí)間到,則停止計(jì)時(shí),已做題數(shù)加一
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('')
# 彈出結(jié)果消息框
QMessageBox.information(self, "恭喜你", "答題結(jié)束\n您的生命值為"+str(self.life)+",分?jǐn)?shù)為"+str(self.score), QMessageBox.Close)
self.pushButton_2.setEnabled(False)
self.pushButton_3.setEnabled(False)
else:
self.life -= 1
QMessageBox.information(self, "很遺憾", "規(guī)定時(shí)間已到\n進(jìn)入下一題", QMessageBox.Yes)
self.fresh()
return
self.step = self.step + 1
self.progressBar.setValue(self.step)
# 進(jìn)度條
def progress_bar(self):
if self.timer.isActive():
self.timer.stop()
else:
# 規(guī)定時(shí)間為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'))
# 將撲克牌填充整個(gè)標(biāo)簽
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 = [] # 存放隨機(jī)牌組
cardGroup = () # 調(diào)用牌組
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QMainWindow()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
實(shí)現(xiàn)各控件的功能
開始界面

點(diǎn)擊確定提交,輸入錯(cuò)誤時(shí)會彈出消息框

答題結(jié)束時(shí)匯總成績

有問題歡迎評論
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家,關(guān)注腳本之家公眾號的更多精彩內(nèi)容。
相關(guān)文章
python2和python3在處理字符串上的區(qū)別詳解
這篇文章主要介紹了python2和python3在處理字符串上的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
用Python代碼自動生成文獻(xiàn)的IEEE引用格式的實(shí)現(xiàn)
這篇文章主要介紹了用Python代碼自動生成文獻(xiàn)的IEEE引用格式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Keras設(shè)定GPU使用內(nèi)存大小方式(Tensorflow backend)
這篇文章主要介紹了Keras設(shè)定GPU使用內(nèi)存大小方式(Tensorflow backend),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05

