我正在做作业,我想知道每次如何都能将乌龟移到一个随机位置。像我可以慢动作使用turtle.goto()吗?
有人说我应该使用turtle.setheading()
和turtle.forward()
,但是当目的地是随机的时,我对如何使用setheading()
感到困惑。
我希望每次将程序更新到随机位置时,乌龟都能移动一半半径(即3.5)。
答案 0 :(得分:0)
您是说要移动一小步,停止并重复吗?如果是这样,您可以“导入时间”并在每次“转发”之后添加“ time.sleep(0.1)”
答案 1 :(得分:0)
您在问题的标题和文本中使用了 half radius 一词两次,但从未真正对其进行解释。为了您的问题,我们只是在谈论一些任意的小距离-对吗?
我会避免使用import time
和time.sleep()
,因为它们与乌龟之类的事件驱动的世界对抗。相反,我会使用乌龟自己的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()
(任何与PepéLe Pew卡通漫画的相似之处纯属巧合。)