Python turtle赛跑如何让海龟到达指定坐标停止并解决运行无响应问题
海龟赛跑项目无响应问题修复

问题原因
- 你添加的while循环属于阻塞式死循环,持续占用主线程资源,导致turtle的GUI界面无法获得刷新、响应键盘输入的机会,直接触发程序无响应。
- 终点判断逻辑存在错误:红海龟初始y坐标为-75,你判断它的坐标等于(220, 0)永远不可能触发;且用完全等于匹配坐标容错性极低,若海龟移动步长超过220就会无法触发终止逻辑。
- 存在冗余代码:开头已经初始化过一次Screen对象,监听事件前重复定义
wn = trtl.Screen()属于无效代码。
修复方案
- 移除阻塞式while循环,将终点判断逻辑嵌入到两个海龟移动的函数中,每次移动后触发判断,不会占用主线程资源。
- 调整终点判断规则:仅判断海龟的x坐标是否大于等于220即可,不需要匹配y坐标,提升容错性。
- 删除重复的Screen对象初始化代码,全局变量修改时添加global声明。
修复后完整代码
import turtle as trtl # 初始化窗口 wn = trtl.Screen() wn.setup(width = 1.0 , height = 1.0) wn.bgpic("image.png") # 初始化参赛海龟 BlueTurtle = trtl.Turtle() BlueTurtle.shape("turtle") BlueTurtle.color("blue") BlueTurtle.speed(4) BlueTurtle.penup() BlueTurtle.goto(-220,0) BlueTurtle.pendown() RedTurtle = trtl.Turtle() RedTurtle.color("red") RedTurtle.speed(4) RedTurtle.shape("turtle") RedTurtle.penup() RedTurtle.goto(-220,-75) RedTurtle.pendown() # 游戏状态变量 keepPlaying = True # 移动函数+终点判断 def move_blue(): global keepPlaying if not keepPlaying: return BlueTurtle.forward(10) if BlueTurtle.xcor() >= 220: pen.penup() pen.goto(-220, -220) pen.pendown() pen.write("蓝海龟冲过了终点线,蓝海龟获胜!" , font = ("Arial", 20, "normal")) keepPlaying = False def move_red(): global keepPlaying if not keepPlaying: return RedTurtle.forward(10) if RedTurtle.xcor() >= 220: pen.penup() pen.goto(-220, -220) pen.pendown() pen.write("红海龟冲过了终点线,红海龟获胜!" , font = ("Arial", 20, "normal")) keepPlaying = False # 绘制标题和赛道编号 pen = trtl.Turtle() pen.pensize(10) pen.speed(20) pen.penup() pen.goto(-100, 70) pen.pendown() pen.write("Turtle Race", font=("Times New Roman", 40, "normal")) numbers = ["1","2"] coordinates = (-200,50) for i in range(2): pen.penup() pen.goto(coordinates) pen.pendown() pen.write(numbers[i], font=("Arial", 15, "normal")) coordinates = (coordinates[0], coordinates[1] - 100) # 绘制赛道分隔线和终点线 pen.penup() pen.goto(-180, -40) pen.pendown() pen.forward(400) pen.penup() pen.goto(-180, 40) pen.pendown() pen.forward(400) pen.penup() pen.goto(-180, -110) pen.pendown() pen.forward(400) pen.pensize(0) pen.penup() pen.goto(230, 60) pen.pendown() pen.right(90) pen.forward(175) pen.hideturtle() # 自定义按键设置 key1 = input("输入你要用来操控蓝海龟的按键:") key2 = input("输入你要用来操控红海龟的按键:") # 绑定按键监听 wn.onkeypress(move_blue, key1) wn.onkeypress(move_red, key2) wn.listen() wn.mainloop()
内容的提问来源于stack exchange,提问作者MKS
相关产品推荐
相关产品推荐

