по своей природе не может рисовать более чем одну вещь в одно и то же время
Вы должны знать лучше, чем сказать не может когда дело доходит до черепах. Грубо, но функционально:
from turtle import Screen, Turtle
def draw_b(t):
t.begin_poly()
t.forward(220)
t.right(90)
t.forward(50)
for _ in range(36):
t.right(5)
t.forward(5)
t.forward(45)
t.right(180)
t.forward(50)
for _ in range(36):
t.right(5)
t.forward(5)
t.forward(45)
t.end_poly()
return t.get_poly()
def draw_e(t):
t.begin_poly()
t.forward(220)
t.right(90)
t.forward(100)
t.backward(100)
t.right(90)
t.forward(110)
t.left(90)
t.forward(100)
t.backward(100)
t.right(90)
t.forward(110)
t.left(90)
t.forward(100)
t.end_poly()
return t.get_poly()
def draw_n(t):
t.begin_poly()
t.forward(220)
t.right(160)
t.forward(235)
t.left(160)
t.forward(220)
t.end_poly()
return t.get_poly()
def draw_i(t):
t.begin_poly()
t.forward(220)
t.backward(220)
t.end_poly()
return t.get_poly()
def draw_polygon(turtle, polygon):
head, *tail = polygon
turtle.goto(head)
turtle.pendown()
if tail:
screen.ontimer(lambda p=tail: draw_polygon(turtle, p), 75)
else:
turtle.hideturtle()
LETTERS = {
'B': ('dark turquoise', draw_b, 'fastest'),
'E': ('light blue', draw_e, 'slowest'),
'I': ('pale green', draw_i, 'fast'),
'N': ('plum', draw_n, 'slow'),
}
screen = Screen()
for i, letter in enumerate("BENI"):
color, function, speed = LETTERS[letter]
turtle = Turtle()
turtle.hideturtle()
turtle.speed('fastest')
turtle.penup()
turtle.setheading(90)
turtle.setx(-250 + 150 * i)
polygon = function(turtle)
turtle.color(color)
turtle.pensize(20)
turtle.speed(speed)
turtle.showturtle()
draw_polygon(turtle, polygon)
screen.mainloop()
Мы следуем замечательному совету @ SamStafford по превращению отдельных букв в функции. Но вместо того, чтобы функции печатали буквы, мы заставили их незаметно нарисовать букву и вернуть полученный многоугольник. Мы проходим все полигоны параллельно (смоделировано с помощью ontimer()
), наконец рисуя буквы.
Чтобы облегчить это, я изменил код рисования, чтобы не поднимать ручку. Это не было большой проблемой, так как большая часть розыгрыша пером перекрывала существующие линии.