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

如何在Kivy中点击按钮释放时重置整个猜数字应用?

解决猜数字游戏的重置问题

要实现点击"Play Again"的Yes按钮时完全重置游戏(生成新随机数、恢复剩余猜测次数),咱们可以分两步来修改代码:

步骤1:给App类添加重置游戏的方法

原来的随机数和剩余次数只在App启动时初始化一次,所以重启游戏时不会更新。咱们新增一个reset_game方法,专门负责重置所有游戏状态,同时更新UI里的剩余次数显示:

class GuessingGameApp(App):
    def build(self):
        # 启动时先初始化一次游戏状态
        self.reset_game()
        return kv

    def reset_game(self):
        # 生成1-10之间的新随机数
        self.computer_num = random.randint(1, 10)
        self.random_num = str(self.computer_num)
        print(f"新随机数已生成:{self.random_num}")
        # 把剩余猜测次数重置回3次
        self.guesses_left = 3
        # 获取TimeToGuess页面的剩余次数标签,同步更新显示文本
        time_to_guess_screen = self.root.get_screen('time_to_guess')
        time_to_guess_screen.ids.guesses_left.text = f'Guesses Left: {self.guesses_left}'

注意:要把原来在类顶部定义的computer_num、random_num、guesses_left删掉,这些变量现在由reset_game方法来初始化和更新。

步骤2:修改KV文件里的"Play Again"按钮逻辑

在Winner和Loser页面的Yes按钮中,添加调用重置方法的操作,确保跳转页面之前先重置游戏状态:

Winner页面的Yes按钮修改:

Button:
    text: 'Yes'
    on_release:
        app.reset_game()
        root.manager.current = 'guess_choice'
        root.manager.transition.duration = 0

Loser页面的Yes按钮修改:

Button:
    text: 'Yes'
    on_press:
        app.reset_game()
        root.manager.current = 'guess_choice'
        root.manager.transition.duration = 0

完整修改后的Python代码

from kivy import *
import random
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

class WannaPlay(Screen):
    pass
class Guesses(Screen):
    pass
class TimeToGuess(Screen):
    pass
class Winner(Screen):
    pass
class Loser(Screen):
    pass
class ScreenManage(ScreenManager):
    pass

kv = Builder.load_file('guessinggame.kv')

class GuessingGameApp(App):
    def build(self):
        self.reset_game()
        return kv

    def reset_game(self):
        self.computer_num = random.randint(1, 10)
        self.random_num = str(self.computer_num)
        print(f"新随机数已生成:{self.random_num}")
        self.guesses_left = 3
        time_to_guess_screen = self.root.get_screen('time_to_guess')
        time_to_guess_screen.ids.guesses_left.text = f'Guesses Left: {self.guesses_left}'

if __name__ == '__main__':
    GuessingGameApp().run()

这样修改后,每次点击"Play Again"的Yes按钮,游戏都会生成新的随机数,把剩余猜测次数恢复到3次,同时UI里的剩余次数显示也会同步更新,完全回到初始游戏状态~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:37:32