PyQt6猜数字小游戏

PyQt6猜数字小游戏

本文使用pyQt6实现猜数字小游戏。游戏开始给出数字范围,猜测失败缩写给定范围。

python 复制代码
import math
import sys
import random
from PyQt6.QtWidgets import QMainWindow, QApplication, QMessageBox
from PyQt6.QtCore import Qt
from sample import Ui_Form


# 继承至界面文件的主窗口类
class MyMainWindow(QMainWindow, Ui_Form):
    # 生成随机数的右界
    random_choice = [i * 100 for i in range(1, 20)]

    def __init__(self, parent=None):
        # 继承主窗口类
        super(MyMainWindow, self).__init__(parent)
        self.setupUi(self)
        # 随机数的右界
        self.guess_range = None
        # 生成的随机数
        self.guess_num = None
        # 提示范围的左界
        self.left = None
        # 提示范围的右界
        self.right = None
        # 产生随机数
        self.random_num()
        # 初始化功能
        self.initUi()

    def init_range(self):
        # 为随机数的左右界赋值
        self.left = 1
        self.right = self.guess_range

    @property
    def _random_range(self):
        # 随机产生随机数的右界
        return random.choice(self.random_choice)

    def random_num(self):
        self.guess_range = self._random_range
        # 产生随机数
        self.guess_num = random.randint(1, self.guess_range)
        self.init_range()

    def initUi(self):
        # 提示数值范围
        self.label.setText('数值的范围是:{}-{}'.format(self.left, self.right))
        # 按下按钮一,运行 self.guess 函数
        self.pushButton.clicked.connect(self.guess)
        # 按下按钮二,运行 quit 函数
        self.pushButton_2.clicked.connect(QApplication.instance().quit)
        # 按下按钮三,运行 self.reset 函数
        self.pushButton_3.clicked.connect(self.reset)

    def guess(self):
        # text 接受文本框中的文本
        text = self.lineEdit.text()
        # 异常处理
        # 可处理数值型字符串,其他输入提示错误
        try:
            text = float(text)
        except:
            self.label.setText('     输入不合法')
            self.label_2.setText('数值的范围:{}-{}'.format(self.left, self.right))
            self.lineEdit.clear()
            text = ''
        # 文本不为空继续执行文件
        if text:
            num = math.floor(text)
            if self.guess_num == num:
                QMessageBox.question(self, '胜利', '恭喜你猜中了:{}'.format(self.guess_num), QMessageBox.StandardButton.Yes)
                self.reset()

            elif self.guess_num > num:
                if num > self.left:
                    self.left = num
                self.label.setText('数值的范围:{}-{}'.format(self.left, self.right))
                self.label_2.setText('      猜小了')

            elif self.guess_num < num:
                if num < self.right:
                    self.right = num
                self.label.setText('数值的范围:{}-{}'.format(self.left, self.right))
                self.label_2.setText('       猜大了')
            self.lineEdit.clear()

    def reset(self):
        # 重置游戏
        self.guess_range = None
        self.guess_num = None
        self.left = None
        self.right = None
        self.random_num()
        self.label.setText('')
        self.label_2.setText('')
        self.initUi()

    def keyPressEvent(self, e):
        # 设置快捷键
        if e.key() == Qt.Key.Key_Return:
            self.guess()
        elif e.key() == Qt.Key.Key_Escape:
            QApplication.instance().quit()
        elif e.key() == Qt.Key.Key_R:
            self.reset()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    myWin = MyMainWindow()
    myWin.show()
    sys.exit(app.exec())
python 复制代码
# sample.py
from PyQt6 import QtCore, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(504, 551)
        self.layoutWidget = QtWidgets.QWidget(Form)
        self.layoutWidget.setGeometry(QtCore.QRect(170, 200, 137, 151))
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit = QtWidgets.QLineEdit(self.layoutWidget)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.label = QtWidgets.QLabel(self.layoutWidget)
        self.label.setText("")
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.label_2 = QtWidgets.QLabel(self.layoutWidget)
        self.label_2.setText("")
        self.label_2.setObjectName("label_2")
        self.verticalLayout.addWidget(self.label_2)
        self.pushButton = QtWidgets.QPushButton(self.layoutWidget)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget)
        self.pushButton_2.setObjectName("pushButton_2")
        self.verticalLayout.addWidget(self.pushButton_2)
        self.verticalLayout_2.addLayout(self.verticalLayout)
        self.pushButton_3 = QtWidgets.QPushButton(self.layoutWidget)
        self.pushButton_3.setObjectName("pushButton_3")
        self.verticalLayout_2.addWidget(self.pushButton_3)
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(170, 60, 161, 16))
        self.label_3.setObjectName("label_3")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "确认"))
        self.pushButton_2.setText(_translate("Form", "退出游戏"))
        self.pushButton_3.setText(_translate("Form", "重新开始"))
相关推荐
好好学仿真5 分钟前
机器学习预测聚合物拉伸强度:五种回归算法对比(附Kaggle数据集 + 五折交叉验证)
python·机器学习·xgboost·梯度提升·材料性能预测·随机森林回归
宸津-代码粉碎机28 分钟前
Spring AI 企业级RAG实战|增量更新+文档去重+定时自动入库生产落地方案
java·大数据·人工智能·后端·python·spring
正在走向自律29 分钟前
告别低效繁琐!DeepSeek+Python 重塑科研绘图新范式
python·开发工具·deepseek·ai辅助编程
曾阿伦31 分钟前
Unicode 正则表达式开发指南
python·正则表达式
香辣西红柿炒蛋34 分钟前
yaml文件介绍、数据读取
python
乐于分享的阿乐36 分钟前
(二)VSCode搭建python环境(详细图文保姆级教程)
ide·vscode·python
weixin_4080996739 分钟前
2026 AI生成图片快速去水印的5种实测方法(附在线工具 + Python/Java/PHP API代码)
java·人工智能·python·api接口·ai去水印·石榴智能·自动去水印
2601_9611940243 分钟前
2026初级会计经济法基础知识点汇总
python·django·pdf·virtualenv·代理模式·pygame
爱就是恒久忍耐1 小时前
Ubuntu解决pip3安装库提示This environment is externally managed的问题
linux·python·ubuntu
花落yu1 小时前
AI学习:第2天
人工智能·python·学习