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

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

海龟赛跑项目无响应问题修复

示例图

问题原因

  • 你添加的while循环属于阻塞式死循环,持续占用主线程资源,导致turtle的GUI界面无法获得刷新、响应键盘输入的机会,直接触发程序无响应。
  • 终点判断逻辑存在错误:红海龟初始y坐标为-75,你判断它的坐标等于(220, 0)永远不可能触发;且用完全等于匹配坐标容错性极低,若海龟移动步长超过220就会无法触发终止逻辑。
  • 存在冗余代码:开头已经初始化过一次Screen对象,监听事件前重复定义wn = trtl.Screen()属于无效代码。

修复方案

  1. 移除阻塞式while循环,将终点判断逻辑嵌入到两个海龟移动的函数中,每次移动后触发判断,不会占用主线程资源。
  2. 调整终点判断规则:仅判断海龟的x坐标是否大于等于220即可,不需要匹配y坐标,提升容错性。
  3. 删除重复的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:36:03