Перемещайте черепаху чуть ближе к случайной координате при каждом обновлении - PullRequest
1 голос
/ 23 апреля 2019

Я делаю домашнее задание и хочу знать, как я могу каждый раз перемещать черепаху в случайное место маленьким шагом. Как я могу использовать turtle.goto () в замедленном режиме?

Кто-то сказал, что я должен использовать turtle.setheading() и turtle.forward(), но я не совсем понимаю, как использовать setheading(), когда пункт назначения случайный.

Я надеюсь, что черепаха может двигаться на половину радиуса (что составляет 3,5) каждый раз, когда я обновляю программу до этого случайного места.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Вы используете термин половинный радиус дважды в заголовке и тексте вашего вопроса, но никогда не объясняете его.В целях вашего вопроса, мы просто говорим о некотором произвольном небольшом расстоянии - правильно?

Я бы избегал 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()

(Любое сходство с карикатурой Пепе Ле Пью является чисто случайным).

0 голосов
/ 23 апреля 2019

Вы хотите сказать, что хотите сделать маленький шаг, остановиться и повторить?Если это так, вы можете «импортировать время» и добавлять «time.sleep (0.1)» после каждого «вперед»

...