在每次更新时将海龟稍微靠近随机坐标
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 time
和 time.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()
(如有雷同,纯属巧合。)
我正在做作业,我想知道如何将 turtle 移动到一个随机位置,每次移动一小步。比如我可以慢动作使用 turtle.goto() 吗?
有人说我应该使用 turtle.setheading()
和 turtle.forward()
,但我对如何在目标是随机的情况下使用 setheading()
感到困惑。
我希望每次我将程序更新到那个随机点时,乌龟都能移动半个半径(即 3.5)。
你的意思是要移动一小步,停下来,重复?如果是这样,你可以'导入时间'并在每个'forward'
之后添加'time.sleep(0.1)'您在问题的标题和正文中两次使用 half radius 一词,但从未真正解释过它。就您的问题而言,我们只是在谈论一些任意的小距离——对吗?
我会避免使用 import time
和 time.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()
(如有雷同,纯属巧合。)