PyQt5-猜数字

PyQt5

pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple

PyQt5保姆级入门教程——从安装到使用_pyqt5安装教程-优快云博客

import sys
import random
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, \
    QMessageBox, QFrame, QSizePolicy
from PyQt5.QtCore import Qt

class GuessNumberGame(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setWindowTitle('猜数游戏')
        self.setGeometry(100, 100, 500, 500)  # 设置窗口大小

        vbox = QVBoxLayout()

        self.guess_label = QLabel('猜猜看:')
        self.guess_input = QLineEdit()
        self.guess_button = QPushButton('确定')

        self.guess_label.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        self.guess_input.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        self.guess_button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)

        guess_hbox = QHBoxLayout()
        guess_hbox.addWidget(self.guess_label)
        guess_hbox.addWidget(self.guess_input)
        guess_hbox.addWidget(self.guess_button)

        vbox.addLayout(guess_hbox)
        vbox.addWidget(self.create_separator())

        self.result_label = QLabel('你猜的结果:')
        self.result_output = QLabel('等待游戏开始')
        self.result_output.setAlignment(Qt.AlignCenter)
        self.result_output.setFixedHeight(50)
        vbox.addWidget(self.result_label)
        vbox.addWidget(self.result_output)
        vbox.addWidget(self.create_separator())

        # Guess count section
        self.count_label = QLabel('猜测次数:')
        self.count_output = QLabel('0')
        self.count_output.setAlignment(Qt.AlignCenter)
        self.count_output.setFixedHeight(50)
        vbox.addWidget(self.count_label)
        vbox.addWidget(self.count_output)
        vbox.addWidget(self.create_separator())

        self.player_label = QLabel('请输入人数:')
        self.player_input = QLineEdit()
        self.player_input.setFixedHeight(30)
        vbox.addWidget(self.player_label)
        vbox.addWidget(self.player_input)
        vbox.addWidget(self.create_separator())

        self.game_result_label = QLabel('游戏结果:')
        self.game_result_output = QLabel('等待游戏开始')
        self.game_result_output.setAlignment(Qt.AlignCenter)
        self.game_result_output.setFixedHeight(100)
        vbox.addWidget(self.game_result_label)
        vbox.addWidget(self.game_result_output)
        vbox.addWidget(self.create_separator())

        self.start_button = QPushButton('游戏开始')
        self.quit_button = QPushButton('退出')
        self.start_button.setFixedHeight(40)
        self.quit_button.setFixedHeight(40)

        control_hbox = QHBoxLayout()
        control_hbox.addWidget(self.start_button)
        control_hbox.addWidget(self.quit_button)

        vbox.addLayout(control_hbox)

        self.setLayout(vbox)

        self.guess_button.clicked.connect(self.make_guess)
        self.start_button.clicked.connect(self.start_game)
        self.quit_button.clicked.connect(self.close)

        self.target_number = None
        self.current_player = 0
        self.players = []
        self.current_guess_count = 0

    def create_separator(self):
        separator = QFrame()
        separator.setFrameShape(QFrame.HLine)
        separator.setFrameShadow(QFrame.Sunken)
        separator.setFixedHeight(20)
        return separator

    def start_game(self):
        try:
            num_players = int(self.player_input.text())
            if num_players <= 0:
                raise ValueError('人数必须大于0')
            self.players = [{'id': i+1, 'guesses': []} for i in range(num_players)]
            self.current_player = 0
            self.current_guess_count = 0
            self.result_output.setText('等待游戏开始')
            self.count_output.setText('0')
            self.game_result_output.setText('等待游戏开始')
            self.target_number = random.randint(1, 500)
            QMessageBox.information(self, '游戏开始', '游戏已开始,当前玩家: 1')
        except ValueError:
            QMessageBox.warning(self, '输入错误', '请输入有效的玩家人数')

    def make_guess(self):
        if self.target_number is None:
            QMessageBox.warning(self, '游戏未开始', '请先点击"游戏开始"按钮')
            return

        try:
            guess = int(self.guess_input.text())
            if guess < 1 or guess > 500:
                raise ValueError('数字必须在1到500之间')

            self.current_guess_count += 1

            if guess < self.target_number:
                self.result_output.setText('猜小了')
            elif guess > self.target_number:
                self.result_output.setText('猜大了')
            else:
                self.result_output.setText('猜中了')
                self.players[self.current_player]['guesses'].append(self.current_guess_count)
                self.current_player += 1
                if self.current_player < len(self.players):
                    self.target_number = random.randint(1, 500)
                    self.current_guess_count = 0
                    QMessageBox.information(self, '下一玩家', f'下一玩家: {self.current_player + 1}')
                else:
                    self.show_results()
                    self.target_number = None

            self.count_output.setText(str(self.current_guess_count))
        except ValueError as e:
            QMessageBox.warning(self, '输入错误', str(e))

    def show_results(self):
        results = sorted(self.players, key=lambda x: min(x['guesses']))
        result_text = '\n'.join([f'玩家 {p["id"]}: {min(p["guesses"])} 次' for p in results])
        self.game_result_output.setText(result_text)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    game = GuessNumberGame()
    game.show()
    sys.exit(app.exec_())

put.setText(result_text)

if name == ‘main’:
app = QApplication(sys.argv)
game = GuessNumberGame()
game.show()
sys.exit(app.exec_())


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值