You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tkinter中设置带胜负、剩余猜测次数的重试按钮

解决Tkinter猜数字游戏的重试按钮与统计保留问题

我明白你现在的需求啦——要给猜数字游戏加一个重试按钮,在游戏结束(猜对或者次数用光)的时候显示,还要保留胜场、败场的统计,同时重置剩余猜测次数对吧?我帮你重构并补全代码,完美实现这些功能:

完整实现代码

import tkinter as tk
import random

class GuessNumberGame:
    def __init__(self, root):
        self.root = root
        self.root.title("猜数字游戏")
        
        # 核心统计数据:胜场、败场、最大猜测次数
        self.wins = 0
        self.losses = 0
        self.max_guesses = 5  
        self.guesses_left = self.max_guesses
        
        # 生成初始随机数
        self.random_number = random.randint(1, 13)
        
        # 搭建UI界面
        self.create_widgets()
        
    def create_widgets(self):
        # 统计信息显示标签
        self.stats_label = tk.Label(self.root, text=f"胜场: {self.wins} | 败场: {self.losses} | 剩余次数: {self.guesses_left}", font=("Arial", 12))
        self.stats_label.pack(pady=10)
        
        # 游戏提示标签
        self.prompt_label = tk.Label(self.root, text="猜一个1到13之间的数字:", font=("Arial", 12))
        self.prompt_label.pack(pady=5)
        
        # 数字输入框
        self.guess_entry = tk.Entry(self.root, font=("Arial", 12), width=5)
        self.guess_entry.pack(pady=5)
        
        # 提交猜测按钮
        self.submit_btn = tk.Button(self.root, text="提交猜测", command=self.check_guess, font=("Arial", 12))
        self.submit_btn.pack(pady=5)
        
        # 结果反馈标签
        self.result_label = tk.Label(self.root, text="", font=("Arial", 12), fg="red")
        self.result_label.pack(pady=5)
        
        # 重试按钮(初始隐藏不可用)
        self.reset_btn = tk.Button(self.root, text="再来一局", command=self.reset_game, font=("Arial", 12))
        self.reset_btn.pack(pady=10)
        self.reset_btn.config(state=tk.DISABLED)
        
    def check_guess(self):
        try:
            guess = int(self.guess_entry.get())
            self.guess_entry.delete(0, tk.END)
            
            # 验证输入范围
            if guess < 1 or guess > 13:
                self.result_label.config(text="请输入1-13之间的数字!")
                return
                
            # 剩余次数减1并更新统计显示
            self.guesses_left -= 1
            self.update_stats()
            
            # 判断游戏结果
            if guess == self.random_number:
                self.result_label.config(text=f"恭喜你猜对了!数字是{self.random_number}", fg="green")
                self.wins += 1
                self.end_game()
            elif self.guesses_left == 0:
                self.result_label.config(text=f"次数用完了!正确数字是{self.random_number}", fg="red")
                self.losses += 1
                self.end_game()
            elif guess < self.random_number:
                self.result_label.config(text="太小啦,再试试更大的数字!")
            else:
                self.result_label.config(text="太大啦,再试试更小的数字!")
                
        except ValueError:
            self.result_label.config(text="请输入有效的整数!")
            
    def update_stats(self):
        # 更新统计信息的显示内容
        self.stats_label.config(text=f"胜场: {self.wins} | 败场: {self.losses} | 剩余次数: {self.guesses_left}")
        
    def end_game(self):
        # 游戏结束时禁用输入和提交按钮,启用重试按钮
        self.submit_btn.config(state=tk.DISABLED)
        self.guess_entry.config(state=tk.DISABLED)
        self.reset_btn.config(state=tk.NORMAL)
        
    def reset_game(self):
        # 重置游戏核心状态,保留胜败统计
        self.guesses_left = self.max_guesses
        self.random_number = random.randint(1, 13)
        self.result_label.config(text="")
        
        # 恢复交互状态,隐藏重试按钮
        self.guess_entry.config(state=tk.NORMAL)
        self.submit_btn.config(state=tk.NORMAL)
        self.reset_btn.config(state=tk.DISABLED)
        
        self.update_stats()

if __name__ == "__main__":
    root = tk.Tk()
    game = GuessNumberGame(root)
    root.mainloop()

关键功能拆解

  • 统计数据持久化:用类的实例变量self.wins和self.losses跟踪胜败次数,重置游戏时只刷新猜测次数和随机数,不会清空统计数据。
  • 游戏结束触发逻辑:在check_guess方法中判断猜对或次数耗尽时,自动调用end_game方法锁定交互,显示重试按钮。
  • 重试功能实现:reset_game方法负责重置游戏的可玩状态,恢复输入和提交按钮的可用性,同时更新剩余次数显示。
  • 输入合法性验证:添加了非整数输入、超出范围输入的提示,避免游戏崩溃,提升用户体验。

小调整建议

如果想修改最大猜测次数,直接改self.max_guesses的值就行,比如改成3或者6,游戏会自动适配这个数值。

内容的提问来源于stack exchange,提问作者mase

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:11:00