在每次更新时将海龟稍微靠近随机坐标

Move turtle slightly closer to random coordinate on each update

我正在做作业,我想知道如何将 turtle 移动到一个随机位置,每次移动一小步。比如我可以慢动作使用 turtle.goto() 吗?

有人说我应该使用 turtle.setheading()turtle.forward(),但我对如何在目标是随机的情况下使用 setheading() 感到困惑。

我希望每次我将程序更新到那个随机点时,乌龟都能移动半个半径(即 3.5)。

你的意思是要移动一小步,停下来,重复?如果是这样,你可以'导入时间'并在每个'forward'

之后添加'time.sleep(0.1)'

您在问题的标题和正文中两次使用 half radius 一词,但从未真正解释过它。就您的问题而言,我们只是在谈论一些任意的小距离——对吗?

我会避免使用 import timetime.sleep(),因为它们对付像乌龟这样的 event-driven 世界。相反,我会使用 turtle 自己的 ontimer() 方法来保持同步:

from turtle import Screen, Turtle
from random import randrange

HALF_RADIUS = 3.5  # unexplained constant
DELAY = 1000  # milliseconds
WIDTH, HEIGHT = 640, 480
CURSOR_SIZE = 20

def forward_slowly(distance):
    if distance > 0:
        turtle.forward(min(distance, HALF_RADIUS))

        remaining = max(distance - HALF_RADIUS, 0)

        screen.ontimer(lambda d=remaining: forward_slowly(d), DELAY)
    else:
        screen.ontimer(move_target, DELAY)

def move_target():
    x = randrange(CURSOR_SIZE - WIDTH//2, WIDTH//2 - CURSOR_SIZE)
    y = randrange(CURSOR_SIZE - HEIGHT//2, HEIGHT//2 - CURSOR_SIZE)
    target.goto(x, y)

    target.pendown()

    turtle.setheading(turtle.towards(target))

    forward_slowly(turtle.distance(target))

screen = Screen()
screen.setup(WIDTH, HEIGHT)

turtle = Turtle('turtle')
turtle.speed('slowest')
turtle.width(3)

target = Turtle('turtle')
target.speed('fastest')
target.color('red')
target.penup()

move_target()

screen.exitonclick()

(如有雷同,纯属巧合。)