Этот код беспорядок.Во-первых, установив размер окна на 100 x 100, а затем переместив вашу черепаху между -100 и 100 в обоих измерениях, вы увидите только 1/4 вашего поля игры!Зачем использовать модуль msvcrt
, если в turtle встроены отличные события клавиатуры?Насколько я могу судить, ваш код проверяет и исправляет положение черепахи, но фактически никогда не перемещает его!И у вас есть петля while True:
, которой нет места в управляемой событиями среде, такой как черепаха.
Давайте начнем с простого примера движения внутри квадрата, которым можно манипулировать с помощью клавиатуры:
from turtle import Screen, Turtle
def turn_left():
turtle.left(10)
def turn_right():
turtle.right(10)
def speed_up():
speed = turtle.speed() + 1
if speed > 10: # speed limitation
speed = 10
turtle.speed(speed)
def slow_down():
speed = turtle.speed() - 1
if speed < 1: # speed limitation
speed = 1
turtle.speed(speed)
def move():
# there are two different senses of 'speed' in play, we'll exploit
# both! I.e. as we move faster, we'll draw faster and vice versa
turtle.forward(turtle.speed())
# if we go out of square, go back into the square
if not -100 < turtle.xcor() < 100:
turtle.undo()
turtle.setheading(180 - turtle.heading())
elif not -100 < turtle.ycor() < 100:
turtle.undo()
turtle.setheading(360 - turtle.heading())
screen.ontimer(move, 100)
screen = Screen()
screen.setup(300, 300)
# show turtle's boundary
boundary = Turtle('square', visible=False)
boundary.color('pink')
boundary.shapesize(10)
boundary.stamp()
turtle = Turtle()
move()
screen.onkey(turn_left, 'j')
screen.onkey(turn_right, 'k')
screen.onkey(speed_up, 'a')
screen.onkey(slow_down, 'z')
screen.listen()
screen.mainloop()
![enter image description here](https://i.stack.imgur.com/WmUIi.png)