跳至正文
View Categories

3 min read

主要内容 #

  • 数字的判断
  • 消息框设置
  • 退出游戏设置
  • 1. 数字的判断 #

    在类中编写一个成员函数,函数的功能是用于判断随机生成的数与玩家输入的数的大小关系。
    且该函数需要和按钮做槽映射(即点击了按钮后会运行该函数),具体代码如下:

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QLineEdit
    from random import randint
    
    
    class GuessGame(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
    		
            self.num = randint(1, 100) #  生成一个随机数,并赋值给类的一个属性
    
        def initUI(self):
            self.guessQPushBtn = QPushButton('猜一猜', self)
            self.guessQPushBtn.setGeometry(115, 150, 70, 30)
    
            self.numQLineEdit = QLineEdit('在这里输入数字', self)
            self.numQLineEdit.selectAll()
            self.numQLineEdit.setFocus()
            self.numQLineEdit.setGeometry(80, 50, 150, 30)
    		
            self.guessQPushBtn.clicked.connect(self.judgeModule) #  将按钮与判断函数进行关联
    
            self.setGeometry(200, 200, 500, 500)
            self.setWindowTitle('猜一猜小游戏')
            self.show()
    	
        def judgeModule(self):
            guess_number = self.numQLineEdit.text() #  获取输入的内容
            print(self.num)
            if guess_number.isdigit(): #  判断是否是数字
                guess_number = int(guess_number)
                if guess_number > self.num:
                    print('猜的数字偏大')
                elif guess_number < self.num:
                    print('猜的数字偏小')
                else:
                    print('恭喜你,猜对了!')
            else:
                print('输入的不是数字,请重新输入')
    
    
    app = QApplication(sys.argv)
    ex = GuessGame()
    app.exec_()

    此时判断的结果还只是能在cmd界面展示(程序中用了print语句)。
    还不能做到交互,如需要做到交互,需要添加消息框功能。

    2. 消息框设置 #

    针对如下四种不同结果来构建消息框:
    非数字
    猜的数字偏大
    猜的数字偏小
    猜中数字

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QLineEdit
    from random import randint
    
    
    class GuessGame(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
    		
            self.num = randint(1, 100) #  增加初始生成随机数
    
        def initUI(self):
            self.guessQPushBtn = QPushButton('猜一猜', self)
            self.guessQPushBtn.setGeometry(115, 150, 70, 30)
    
            self.numQLineEdit = QLineEdit('在这里输入数字', self)
            self.numQLineEdit.selectAll()
            self.numQLineEdit.setFocus()
            self.numQLineEdit.setGeometry(80, 50, 150, 30)
    		
            self.guessQPushBtn.clicked.connect(self.judgeModule) #  将按钮与判断模块项映射
    
            self.setGeometry(200, 200, 500, 500)
            self.setWindowTitle('猜一猜小游戏')
            self.show()
    	
        def judgeModule(self):
            guess_number = self.numQLineEdit.text()
            print(self.num)
            if guess_number.isdigit():
                guess_number = int(guess_number)
                if guess_number > self.num:
                    self.showMessage(1, "猜的数字偏大!")
                elif guess_number < self.num:
                    self.showMessage(1, "猜的数字偏小!")
                else:
                    self.showMessage(1, "答对了!进入下一轮!", 1)
            else:
                self.showMessage(0, "输入的不是数字!请重新输入......")
    
        def showMessage(self, int_flag, text="", right_flag=0):
            if int_flag == 0: # 判断是否整型的标志位
                QMessageBox.about(self, '提示', text)
            else:
                QMessageBox.about(self, '结果', text)
    
            if right_flag == 1: # 判断当结果正好猜中时,需要重新生成随机数,且清除文本框
                self.num = randint(1, 100)
                self.numQLineEdit.clear()
    
            self.numQLineEdit.setFocus()
    
    
    app = QApplication(sys.argv)
    ex = GuessGame()
    app.exec_()

    如上代码是对不同情况对判断,都使用消息框来显示内容。

    3. 退出游戏设置 #

    以下程序添加了退出的消息框。

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QLineEdit
    from random import randint
    
    
    class GuessGame(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
    		
            self.num = randint(1, 100)
    
        def initUI(self):
            self.guessQPushBtn = QPushButton('猜一猜', self)
            self.guessQPushBtn.setGeometry(115, 150, 70, 30)
    
            self.numQLineEdit = QLineEdit('在这里输入数字', self)
            self.numQLineEdit.selectAll()
            self.numQLineEdit.setFocus()
            self.numQLineEdit.setGeometry(80, 50, 150, 30)
    		
            self.guessQPushBtn.clicked.connect(self.judgeModule)
    
            self.setGeometry(200, 200, 500, 500)
            self.setWindowTitle('猜一猜小游戏')
            self.show()
    	
        def judgeModule(self):
            guess_number = self.numQLineEdit.text()
            print(self.num)
            if guess_number.isdigit():
                guess_number = int(guess_number)
                if guess_number > self.num:
                    self.showMessage(1, "猜的数字偏大!")
                elif guess_number < self.num:
                    self.showMessage(1, "猜的数字偏小!")
                else:
                    self.showMessage(1, "答对了!进入下一轮!", 1)
            else:
                self.showMessage(0, "输入的不是数字!请重新输入......")
    
        def showMessage(self, int_flag, text="", right_flag=0):
            if int_flag == 0: # 判断是否整型的标志位
                QMessageBox.about(self, '提示', text)
            else:
                QMessageBox.about(self, '结果', text)
    
            if right_flag == 1: # 判断当结果正好猜中时,需要重新生成随机数,且清除文本框
                self.num = randint(1, 100)
                self.numQLineEdit.clear()
    
            self.numQLineEdit.setFocus()
    
        def closeEvent(self, event): #  退出事件槽函数, 无需在代码中显式调用
            reply = QMessageBox.question(self, '确认', '确认退出吗', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
            if reply == QMessageBox.Yes:
                event.accept()
            else:
                event.ignore()
    
    
    app = QApplication(sys.argv)
    ex = GuessGame()
    app.exec_()

    以上程序便是一个简单且完整的猜一猜小游戏的整体代码

    4. 小结 #

    • 猜一猜游戏判断数字函数的添加
    • 猜一猜游戏消息框显示模块的添加
    • 猜一猜游戏退出消息框的添加

    习题 #