如何阻止Tkinter猜单词游戏重复接受已猜对的字母?
解决重复猜字母被惩罚的问题
你的代码核心问题是:不管字母有没有被猜过,都会执行后续的对错判断逻辑,导致重复猜已猜字母时,若该字母不在目标单词里会被误扣次数。要实现重复猜已猜字母无惩罚,只需在处理前先检查字母是否已被猜过即可。
修改后的代码
def guess_letter(self, event=None): guess = self.entry.get().lower() self.entry.delete(0, tk.END) # 验证输入格式 if not guess or len(guess) != 1 or not guess.isalpha(): return # 如果字母已经被猜过,直接结束函数,不做任何处理 if guess in self.guessed_letters: return # 只有未猜过的字母才加入已猜集合 self.guessed_letters.add(guess) self.guessed_label.config(text="Guessed Letters: " + ", ".join(sorted(self.guessed_letters))) if guess in self.word: for i, letter in enumerate(self.word): if letter == guess: self.display_word[i] = guess self.word_label.config(text=" ".join(self.display_word)) else: self.tries_left -= 1 self.draw_hangman() if "_" not in self.display_word: messagebox.showinfo("Hangman", "You won!") self.master.quit() elif self.tries_left == 0: messagebox.showinfo("Hangman", f"You lost! The word was: {''.join(self.word)}") self.master.quit()
修改说明
- 在输入格式验证通过后,先判断
guess是否已经在self.guessed_letters集合中:如果是,直接return终止函数,跳过后续所有逻辑,自然不会产生惩罚 - 将
self.guessed_letters.add(guess)移到这个判断之后,确保只有真正新的猜测才会被记录到已猜字母列表里
内容的提问来源于stack exchange,提问作者Welsworth
相关产品推荐
相关产品推荐

