水果打字游戏按键统计与准确率显示功能故障求助
水果主题打字游戏统计显示问题
我正在开发一款水果主题的打字游戏,核心需求是当按下屏幕最后一个字母时,显示正确按键数、总按键数及按键准确率。目前仅能触发最后字母按下的逻辑,但统计信息无法在屏幕上正常显示,怀疑是全局变量使用不当或代码逻辑缺失导致,以下是完整代码及问题分析:
初始设置代码
import turtle as trtl import random as rand #-----setup-----] apple_image = "apple.gif" pear_image = "pear.gif" # Store the file name of your shape font_setup = ('Ariel', 20, 'normal') wn = trtl.Screen() wn.bgpic("background.gif") wn.setup(width=1.0, height=1.0) wn.addshape(apple_image) # Make the screen aware of the new file wn.addshape(pear_image) letters = ['A', 'B', 'C', 'D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] curr_letters = [] correct = 0 total = 0
游戏主体逻辑代码
这部分负责字母绘制、水果掉落及重置逻辑:
def draw_fruit(active_fruit, letter): vowels = ['A','E','I','O','U'] if letter in vowels: active_fruit.shape(pear_image) else: active_fruit.shape(apple_image) draw_letter(active_fruit, letter) wn.update() def apple_drop(letter): index = curr_letters.index(letter) curr_letters.pop(index) active_apple = apples.pop(index) active_apple.clear() curr_xcor = active_apple.xcor() active_apple.goto(curr_xcor,-150) active_apple.hideturtle() apple_reset(active_apple) apples.append(active_apple) def draw_letter(active_apple, curr_letter): global letters, curr_letters curr_xcor = active_apple.xcor() curr_ycor = active_apple.ycor() active_apple.color("white") wn.tracer(False) active_apple.goto(curr_xcor - 18, curr_ycor - 40) active_apple.write(curr_letter, font=("Ariel", 55, 'bold')) active_apple.goto(curr_xcor , curr_ycor) wn.tracer(True) def apple_reset(active_apple): if len(letters) != 0: rand_x = rand.randint(-200,200) rand_y = rand.randint(-25,100) active_apple.goto(rand_x, rand_y) active_apple.showturtle() curr_letter = letters.pop(rand.randint(0,len(letters)-1)) curr_letters.append(curr_letter) draw_fruit(active_apple, curr_letter)
统计显示问题代码
这是核心问题区域:按下最后一个字母后,统计信息无任何显示:
def correct_presses(): global correct, total correct_displayer.hideturtle() correct_displayer.penup() correct_displayer.goto(-250,250) correct_displayer.pendown() correct_displayer.write("You got",correct,"amount of keypresses!", font=font_setup) def total_presses(): global correct, total total_displayer.hideturtle() total_displayer.penup() total_displayer.goto(250,250) total_displayer.pendown() total_displayer.write("You clicked",total,"amount of times.", font=font_setup) def accuracy_of_presses(): global correct, total accuracy_displayer.hideturtle() accuracy_displayer.penup() accuracy_displayer.goto(0,250) accuracy_displayer.pendown() accuracy_displayer.write("You got",correct//total*100,"percent of your keypresses correct.", font=font_setup) def end_of_game(): global correct, total if len(curr_letters) == 26: correct_presses() total_presses() accuracy_of_presses()
初始化及收尾代码
apples = [] for apple in range(5): apple = trtl.Turtle() apple.speed(0) apple.penup() apple.hideturtle() apples.append(apple) apple_reset(apple) print(curr_letters) correct_displayer = trtl.Turtle() total_displayer = trtl.Turtle() accuracy_displayer = trtl.Turtle()
问题修复点
write函数参数错误:write方法仅接受单个字符串参数,需用字符串格式化整合变量,示例修改:correct_displayer.write(f"You got {correct} amount of keypresses!", font=font_setup)同理修改
total_presses和accuracy_of_presses中的write语句,注意准确率计算要避免除以0,可加判断:accuracy = (correct / total) * 100 if total > 0 else 0 accuracy_displayer.write(f"You got {accuracy:.1f} percent of your keypresses correct.", font=font_setup)end_of_game触发条件错误:curr_letters是当前屏幕显示的字母列表,按下最后一个字母后它会被移除,此时长度为0,且原letters列表已空,修改条件:def end_of_game(): global correct, total if len(letters) == 0 and len(curr_letters) == 0: correct_presses() total_presses() accuracy_of_presses()显示海龟初始化缺失:给统计用海龟设置初始状态,避免痕迹:
correct_displayer = trtl.Turtle() correct_displayer.hideturtle() correct_displayer.penup() correct_displayer.color("black") total_displayer = trtl.Turtle() total_displayer.hideturtle() total_displayer.penup() total_displayer.color("black") accuracy_displayer = trtl.Turtle() accuracy_displayer.hideturtle() accuracy_displayer.penup() accuracy_displayer.color("black")按键触发逻辑缺失:绑定键盘事件,更新计数并触发结束检查:
def handle_keypress(key): global correct, total total += 1 key = key.upper() if key in curr_letters: correct += 1 apple_drop(key) end_of_game() # 绑定大小写字母按键 for letter in letters: wn.onkeypress(lambda l=letter: handle_keypress(l), letter.lower()) wn.onkeypress(lambda l=letter: handle_keypress(l), letter.upper()) wn.listen() wn.mainloop()
内容的提问来源于stack exchange,提问作者DemJevBoyd
相关产品推荐
相关产品推荐

