描述: 使用 QtDesignner 设计界面, pyQt5+python3 实现主体方法制作的猜数字游戏.
游戏规则: 先选择游戏等级: 初级, 中级, 高级, 魔鬼级, 选择完游戏等级后点击 "确定", 然后后台会自动生成一个与游戏等级匹配的 "神秘数字", 游戏玩家在文本框内输入数字, 再点击文本框旁边的 "确定", 即可比较玩家所猜数字是否就是 "神秘数字".
游戏界面:
源代码:
代码 1:guessNumberGame.py (界面代码)
- # -*- coding: utf-8 -*-
- # Form implementation generated from reading ui file 'guessNumberGame.ui'
- #
- # Created by: PyQt5 UI code generator 5.11.3
- #
- # WARNING! All changes made in this file will be lost!
- from PyQt5 import QtCore, QtGui, QtWidgets
- class Ui_Form(object):
- def setupUi(self, Form):
- Form.setObjectName("Form")
- Form.resize(555, 463)
- self.label = QtWidgets.QLabel(Form)
- self.label.setGeometry(QtCore.QRect(40, 90, 181, 31))
- self.label.setObjectName("label")
- self.comboBox = QtWidgets.QComboBox(Form)
- self.comboBox.setGeometry(QtCore.QRect(230, 30, 171, 31))
- self.comboBox.setObjectName("comboBox")
- self.comboBox.addItem("")
- self.comboBox.addItem("")
- self.comboBox.addItem("")
- self.comboBox.addItem("")
- self.pushButton_2 = QtWidgets.QPushButton(Form)
- self.pushButton_2.setGeometry(QtCore.QRect(420, 30, 91, 31))
- self.pushButton_2.setObjectName("pushButton_2")
- self.pushButton = QtWidgets.QPushButton(Form)
- self.pushButton.setGeometry(QtCore.QRect(420, 90, 91, 31))
- self.pushButton.setObjectName("pushButton")
- self.textBrowser = QtWidgets.QTextBrowser(Form)
- self.textBrowser.setGeometry(QtCore.QRect(40, 151, 471, 201))
- self.textBrowser.setObjectName("textBrowser")
- self.lineEdit = QtWidgets.QLineEdit(Form)
- self.lineEdit.setGeometry(QtCore.QRect(230, 90, 171, 31))
- self.lineEdit.setObjectName("lineEdit")
- self.label_3 = QtWidgets.QLabel(Form)
- self.label_3.setGeometry(QtCore.QRect(40, 30, 181, 31))
- self.label_3.setObjectName("label_3")
- self.pushButton_3 = QtWidgets.QPushButton(Form)
- self.pushButton_3.setGeometry(QtCore.QRect(220, 380, 111, 41))
- font = QtGui.QFont()
- font.setFamily("Agency FB")
- font.setPointSize(12)
- self.pushButton_3.setFont(font)
- self.pushButton_3.setObjectName("pushButton_3")
- self.retranslateUi(Form)
- QtCore.QMetaObject.connectSlotsByName(Form)
- def retranslateUi(self, Form):
- _translate = QtCore.QCoreApplication.translate
- Form.setWindowTitle(_translate("Form", "猜数字游戏"))
- self.label.setText(_translate("Form", "<html><head/><body><p><span style=\" font-size:14pt;\"> 请猜一个数字:</span></p></body></html>"))
- self.comboBox.setItemText(0, _translate("Form", "初级: 数字小于 20"))
- self.comboBox.setItemText(1, _translate("Form", "中级: 数字小于 30"))
- self.comboBox.setItemText(2, _translate("Form", "高级: 数字小于 50"))
- self.comboBox.setItemText(3, _translate("Form", "魔鬼级: 数字小于 100"))
- self.pushButton_2.setText(_translate("Form", "确定"))
- self.pushButton.setText(_translate("Form", "确定"))
- self.label_3.setText(_translate("Form", "<html><head/><body><p><span style=\" font-size:14pt;\"> 请选择游戏难度:</span></p></body></html>"))
- self.pushButton_3.setText(_translate("Form", "再来一局"))
界面代码
代码 2:runGuess.py (方法主体代码)
- # -*- coding: utf-8 -*-
- import sys,random,time
- from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
- from guessNumberGame import Ui_Form
- times=1 #声明一个模块内的全局变量; 用于记录猜数字的次数
- rand=20# 声明一个模块内的全局变量; 神秘数字的最大范围
- allTimes=7# 声明一个模块内的全局变量; 游戏最大次数
- class mwindow(QWidget, Ui_Form):
- def __init__(self): #初始化
- super(mwindow, self).__init__() #这是对继承自父类的属性进行初始化. 而且是用父类的初始化方法来初始化继承的属性.
- self.setupUi(self)
- #定义一个方法: 从下拉框选择游戏难度
- def gameLevel(self):
- times=1
- global rand,allTimes
- level=self.comboBox.currentIndex()
- if level==0:
- rand=20
- allTimes=7
- if level==1:
- rand=30
- allTimes=10
- if level==2:
- rand=50
- allTimes = 15
- if level==3:
- rand=100
- allTimes = 20
- #定义一个方法: 选择游戏难度后生成一个随机的神秘数字
- def getRandNum(self):
- global theNum,times
- times=1 #每次选择游戏难度并点击 "确定" 后, 已猜数字次数都重新归为 1
- w.pushButton.setEnabled(True) #设置 pushButton 可点击 (即选择了游戏难度之后, pushButton 才可点击)
- theNum=random.randint(1,rand)
- self.textBrowser.append('开始游戏吧, 你有 %d 次机会, 数字范围: 1-%d' %(allTimes,rand))
- # self.textBrowser.append(str(theNum)) #直接显示神秘数字, 用于调试时使用
- #定义一个方法: 点击 "确定" 按钮的事件, 用于比较所猜数字和神秘数字
- def guess(self):
- global allTimes,times #使用全局变量 times
- yourNum = int(self.lineEdit.text()) #从文本框获取到输入的数字, 并转化为 int 型
- if yourNum <theNum and times < allTimes:
- text = "你猜的数字 %d 小了! 你还有 %d 次机会, 再猜!" %(yourNum,allTimes-times)
- self.textBrowser.append(text) #把提示信息写入 textBrowser
- times += 1
- elif yourNum> theNum and times <allTimes:
- text = "你猜的数字 %d 大了! 你还有 %d 次机会, 再猜!" %(yourNum,allTimes-times)
- self.textBrowser.append(text)
- times += 1
- elif yourNum == theNum and times <allTimes:
- text = '你猜对了, 就是 %d, 你一共猜了 %s 次!' % (theNum,times)
- self.textBrowser.append(text)
- else:
- text = '%d 次机会用完了你也没猜对! 神秘数字其实是:%d' %(allTimes,theNum)
- self.textBrowser.append(text)
- #定义一个方法: 点击 "再来一局" 时触发的事件
- def reStart(self):
- self.textBrowser.clear() #清除 textBrowser 内的内容
- self.lineEdit.clear() #清除 lineEdit 内的内容
- w.pushButton.setEnabled(False) #设置 pushButton 不可点击 (即在选择游戏难度之前, pushButton 不可点击)
- if __name__ == '__main__':
- App = QApplication(sys.argv)
- w = mwindow()
- w.pushButton.setEnabled(False) #设置 pushButton 不可点击 (即在选择游戏难度之前, pushButton 不可点击)
- w.pushButton.clicked.connect(w.guess) #绑定 guess 方法
- w.pushButton_2.clicked.connect(w.getRandNum)
- w.comboBox.currentIndexChanged.connect(w.gameLevel)
- w.pushButton_3.clicked.connect(w.reStart)
- w.show()
- sys.exit(App.exec_()) #使程序一直循环运行直到主窗口被关闭终止进程 (如果没有这句话, 程序运行时会一闪而过)
来源: https://www.cnblogs.com/heyangblog/p/11185010.html