如何在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
相关产品推荐
相关产品推荐

