• python3+pyQt5+QtDesignner实现窗口化猜数字游戏


    描述:使用QtDesignner设计界面,pyQt5+python3实现主体方法制作的猜数字游戏。

    游戏规则:先选择游戏等级:初级、中级、高级、魔鬼级,选择完游戏等级后点击“确定”,然后后台会自动生成一个与游戏等级匹配的“神秘数字”,游戏玩家在文本框内输入数字,再点击文本框旁边的“确定”,即可比较玩家所猜数字是否就是“神秘数字”。

    游戏界面

    源代码:

    代码1guessNumberGame.py (界面代码)

     1 # -*- coding: utf-8 -*-
     2 
     3 # Form implementation generated from reading ui file 'guessNumberGame.ui'
     4 #
     5 # Created by: PyQt5 UI code generator 5.11.3
     6 #
     7 # WARNING! All changes made in this file will be lost!
     8 
     9 from PyQt5 import QtCore, QtGui, QtWidgets
    10 
    11 class Ui_Form(object):
    12     def setupUi(self, Form):
    13         Form.setObjectName("Form")
    14         Form.resize(555, 463)
    15         self.label = QtWidgets.QLabel(Form)
    16         self.label.setGeometry(QtCore.QRect(40, 90, 181, 31))
    17         self.label.setObjectName("label")
    18         self.comboBox = QtWidgets.QComboBox(Form)
    19         self.comboBox.setGeometry(QtCore.QRect(230, 30, 171, 31))
    20         self.comboBox.setObjectName("comboBox")
    21         self.comboBox.addItem("")
    22         self.comboBox.addItem("")
    23         self.comboBox.addItem("")
    24         self.comboBox.addItem("")
    25         self.pushButton_2 = QtWidgets.QPushButton(Form)
    26         self.pushButton_2.setGeometry(QtCore.QRect(420, 30, 91, 31))
    27         self.pushButton_2.setObjectName("pushButton_2")
    28         self.pushButton = QtWidgets.QPushButton(Form)
    29         self.pushButton.setGeometry(QtCore.QRect(420, 90, 91, 31))
    30         self.pushButton.setObjectName("pushButton")
    31         self.textBrowser = QtWidgets.QTextBrowser(Form)
    32         self.textBrowser.setGeometry(QtCore.QRect(40, 151, 471, 201))
    33         self.textBrowser.setObjectName("textBrowser")
    34         self.lineEdit = QtWidgets.QLineEdit(Form)
    35         self.lineEdit.setGeometry(QtCore.QRect(230, 90, 171, 31))
    36         self.lineEdit.setObjectName("lineEdit")
    37         self.label_3 = QtWidgets.QLabel(Form)
    38         self.label_3.setGeometry(QtCore.QRect(40, 30, 181, 31))
    39         self.label_3.setObjectName("label_3")
    40         self.pushButton_3 = QtWidgets.QPushButton(Form)
    41         self.pushButton_3.setGeometry(QtCore.QRect(220, 380, 111, 41))
    42         font = QtGui.QFont()
    43         font.setFamily("Agency FB")
    44         font.setPointSize(12)
    45         self.pushButton_3.setFont(font)
    46         self.pushButton_3.setObjectName("pushButton_3")
    47 
    48         self.retranslateUi(Form)
    49         QtCore.QMetaObject.connectSlotsByName(Form)
    50 
    51     def retranslateUi(self, Form):
    52         _translate = QtCore.QCoreApplication.translate
    53         Form.setWindowTitle(_translate("Form", "猜数字游戏"))
    54         self.label.setText(_translate("Form", "<html><head/><body><p><span style=" font-size:14pt;">请猜一个数字:</span></p></body></html>"))
    55         self.comboBox.setItemText(0, _translate("Form", "初级:数字小于20"))
    56         self.comboBox.setItemText(1, _translate("Form", "中级:数字小于30"))
    57         self.comboBox.setItemText(2, _translate("Form", "高级:数字小于50"))
    58         self.comboBox.setItemText(3, _translate("Form", "魔鬼级:数字小于100"))
    59         self.pushButton_2.setText(_translate("Form", "确定"))
    60         self.pushButton.setText(_translate("Form", "确定"))
    61         self.label_3.setText(_translate("Form", "<html><head/><body><p><span style=" font-size:14pt;">请选择游戏难度:</span></p></body></html>"))
    62         self.pushButton_3.setText(_translate("Form", "再来一局"))
    界面代码

    代码2runGuess.py (方法主体代码)

     1 # -*- coding: utf-8 -*-
     2 import sys,random,time
     3 from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
     4 from guessNumberGame import Ui_Form
     5 
     6 times=1 #声明一个模块内的全局变量;用于记录猜数字的次数
     7 rand=20#声明一个模块内的全局变量;神秘数字的最大范围
     8 allTimes=7#声明一个模块内的全局变量;游戏最大次数
     9 class mwindow(QWidget, Ui_Form):
    10     def __init__(self): #初始化
    11         super(mwindow, self).__init__()  #这是对继承自父类的属性进行初始化。而且是用父类的初始化方法来初始化继承的属性。
    12         self.setupUi(self)
    13     #定义一个方法:从下拉框选择游戏难度
    14     def gameLevel(self):
    15         times=1
    16         global rand,allTimes
    17         level=self.comboBox.currentIndex()
    18         if level==0:
    19             rand=20
    20             allTimes=7
    21         if level==1:
    22             rand=30
    23             allTimes=10
    24         if level==2:
    25             rand=50
    26             allTimes = 15
    27         if level==3:
    28             rand=100
    29             allTimes = 20
    30 
    31     #定义一个方法:选择游戏难度后生成一个随机的神秘数字
    32     def getRandNum(self):
    33         global theNum,times
    34         times=1           #每次选择游戏难度并点击“确定”后,已猜数字次数都重新归为1
    35         w.pushButton.setEnabled(True)   #设置pushButton可点击(即选择了游戏难度之后,pushButton才可点击)
    36         theNum=random.randint(1,rand)
    37         self.textBrowser.append('开始游戏吧,你有%d次机会,数字范围:1-%d' %(allTimes,rand))
    38         # self.textBrowser.append(str(theNum)) #直接显示神秘数字,用于调试时使用
    39 
    40     #定义一个方法:点击“确定”按钮的事件,用于比较所猜数字和神秘数字
    41     def guess(self):
    42         global allTimes,times #使用全局变量times
    43         yourNum = int(self.lineEdit.text()) #从文本框获取到输入的数字,并转化为int型
    44         if yourNum < theNum and times < allTimes:
    45             text = "你猜的数字%d小了!你还有%d次机会,再猜!" %(yourNum,allTimes-times)
    46             self.textBrowser.append(text)   #把提示信息写入textBrowser
    47             times += 1
    48         elif yourNum > theNum and times <allTimes:
    49             text =  "你猜的数字%d大了!你还有%d次机会,再猜!" %(yourNum,allTimes-times)
    50             self.textBrowser.append(text)
    51             times += 1
    52         elif yourNum == theNum and times <allTimes:
    53             text = '你猜对了,就是%d,你一共猜了%s次!' % (theNum,times)
    54             self.textBrowser.append(text)
    55         else:
    56             text = '%d次机会用完了你也没猜对!神秘数字其实是:%d' %(allTimes,theNum)
    57             self.textBrowser.append(text)
    58 
    59     #定义一个方法:点击“再来一局”时触发的事件
    60     def reStart(self):
    61         self.textBrowser.clear()  #清除textBrowser内的内容
    62         self.lineEdit.clear()     #清除lineEdit内的内容
    63         w.pushButton.setEnabled(False)  #设置pushButton不可点击(即在选择游戏难度之前,pushButton不可点击)
    64 
    65 if __name__ == '__main__':
    66     app = QApplication(sys.argv)
    67     w = mwindow()
    68     w.pushButton.setEnabled(False)  #设置pushButton不可点击(即在选择游戏难度之前,pushButton不可点击)
    69     w.pushButton.clicked.connect(w.guess)   #绑定guess方法
    70     w.pushButton_2.clicked.connect(w.getRandNum)
    71     w.comboBox.currentIndexChanged.connect(w.gameLevel)
    72     w.pushButton_3.clicked.connect(w.reStart)
    73     w.show()
    74     sys.exit(app.exec_()) #使程序一直循环运行直到主窗口被关闭终止进程(如果没有这句话,程序运行时会一闪而过)
  • 相关阅读:
    ~虚拟现实论文~
    Vega Prime Distributed 模块的中文总结
    怎样在程序中使用vgPicker移动物体
    黑客档案
    在VBA中连接SQL SERVER数据库
    VC中调用Matlab引擎的设置
    在VB应用程序中单击按钮打开word文档
    matlab调用ansys的方法
    实现VC与Matcom的接口步骤
    vega编程中文资料
  • 原文地址:https://www.cnblogs.com/heyangblog/p/11185010.html
Copyright © 2020-2023  润新知