每次更新时将乌龟稍微移近随机坐标

时间:2019-04-23 06:19:56

标签: python python-3.x turtle-graphics

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

有人说我应该使用turtle.setheading()turtle.forward(),但是当目的地是随机的时,我对如何使用setheading()感到困惑。

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

2 个答案:

答案 0 :(得分:0)

您是说要移动一小步,停止并重复吗?如果是这样,您可以“导入时间”并在每次“转发”之后添加“ time.sleep(0.1)”

答案 1 :(得分:0)

您在问题的标题和文本中使用了 half radius 一词两次,但从未真正对其进行解释。为了您的问题,我们只是在谈论一些任意的小距离-对吗?

我会避免使用import timetime.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卡通漫画的相似之处纯属巧合。)