Базовый дизайн вашей программы неверен.Turtle (и tkinter) управляются событиями, но использование цикла while True:
с time.sleep()
работает против этого.Я переписал ваш код ниже, чтобы использовать события таймера вместе с другими изменениями.Враги должны продолжать двигаться, пока вы управляете игроком с клавиатуры.Я бросил код оболочки tkinter, так как он не делал ничего, что черепаха не могла сделать для себя:
from turtle import Screen, Turtle
from random import randint
def enemy_position_x():
return randint(-325, 325)
def enemy_position_y():
return randint(-300, 300)
# move the player
def move_left():
player.setheading(180)
player.setx(player.xcor() - player_speed)
def move_right():
player.setheading(360)
player.setx(player.xcor() + player_speed)
def move_up():
player.setheading(90)
player.sety(player.ycor() + player_speed)
def move_down():
player.setheading(270)
player.sety(player.ycor() - player_speed)
def move():
# move the enemy
for enemy in enemies:
enemy.setheading(enemy.towards(player))
if enemy.distance(player) > 10:
enemy.forward(enemy_speed)
screen.ontimer(move, 100)
# window
screen = Screen()
screen.setup(900, 700)
# player
player = Turtle()
player.speed('fastest')
player.color('green')
player.penup()
player_speed = 3
# enemies
enemies = []
for _ in range(5):
enemy = Turtle()
enemy.penup()
enemy.speed('fastest')
enemy.color('red')
enemy.goto(enemy_position_x(), enemy_position_y())
enemies.append(enemy)
enemy_speed = 3
screen.onkey(move_left, 'Left')
screen.onkey(move_right, 'Right')
screen.onkey(move_up, 'Up')
screen.onkey(move_down, 'Down')
screen.listen()
move()
screen.mainloop()