Ваши вытянутые (по времени) петли while
не имеют места в управляемой событиями среде, такой как черепаха. В общем, нам нужно контролировать все событиями, в частности событиями таймера . Давайте перепишем ваш код как конечный автомат. (Поскольку у меня нет ваших классов объектов, сущности, такие как start.state
, становятся глобальными, как start_state
в моем примере кода.)
from turtle import Screen, Turtle
start_state = True
end_state = False
def start_game():
global start_state
start_state = False
def end_game():
global end_state
if not start_state:
end_state = True
def restart_game():
global end_state, start_state
end_state = False
start_state = True
def flash(text):
turtle.clear()
turtle.write(text, align="center", font=('Arial', 24, 'bold'))
color = turtle.pencolor()
turtle.pencolor(turtle.fillcolor())
turtle.fillcolor(color)
def game_states():
if start_state:
flash("Start")
elif end_state:
flash("End")
else:
flash("Playing")
screen.ontimer(game_states, 500)
screen = Screen()
turtle = Turtle()
turtle.hideturtle()
turtle.fillcolor(screen.bgcolor())
screen.onkey(start_game, 'Return')
screen.onkey(restart_game, 'r')
screen.onkey(end_game, 'e')
screen.listen()
game_states()
screen.mainloop()
Правила конечного автомата:
Start via <Return> -> Playing
Playing via <e> -> End and via <r> -> Start
End via <r> -> Start