Как заставить фигуру черепахи двигаться с помощью клавиш со стрелками

Мне нужно импортировать черепаху и заставить ее рисовать квадрат. Я сделал этот шаг, но следующий шаг — заставить этот квадрат перемещаться по экрану с помощью клавиш со стрелками. Я уже добавил код, который должен позволить это сделать, но черепаха все еще не двигается. Он просто появляется на экране, и я нажимаю клавиши со стрелками, но ничего не движется. Я не уверен, в чем ошибка в моем коде.

import turtle
t = turtle.Turtle

screen = turtle.Screen()
screen.setup(300,300)
screen.tracer(0)

def square():
  for i in range(4):
    turtle.forward(100)
    turtle.left(90)

def move_up():
  turtle.setheading(90) #pass an argument to set the heading of our turtle arrow
  turtle.forward(15)

def move_right():
  turtle.setheading(0) #the direction is east
  turtle.forward(15)

def move_down():
  turtle.setheading(270) #the direction is south
  turtle.forward(15)

def move_left():
  turtle.setheading(180) #the direction is west
  turtle.forward(15)

while True :
    turtle.clear()
    square()            #call function
    screen.update()         # only now show the screen, as one of the frames




screen.onkey(move_up, "Up") 
screen.onkey(move_right, "Right")
screen.onkey(move_down, "Down")
screen.onkey(move_left, "Left")
screen.listen()

person Ferefly    schedule 18.07.2020    source источник


Ответы (1)


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

Ваша непосредственная проблема заключается в том, что вы не привязали ключи к действиям, когда они вам нужны:

while True :
    turtle.clear()
    square()            #call function
    screen.update()         # only now show the screen, as one of the frames

screen.onkey(move_up, "Up") 
screen.onkey(move_right, "Right")
screen.onkey(move_down, "Down")
screen.onkey(move_left, "Left")
screen.listen()

У вас есть бесконечный цикл перед вашими привязками: вы никогда не доберетесь до этого кода, поэтому на клавиши со стрелками нет внимания, и ваш экран не listening. Вы должны сделать это перед циклом.

Вы также, кажется, запутались в том, какие методы применяются к объекту, а какие вы вызываете как вызовы класса. Вы не создали экземпляр объекта Turtle для выполнения команд движения.

Я рекомендую вам вернуться к материалам вашего класса и медленнее работать с каждой техникой. Добавляйте их в свою программу по мере изучения... и проверяйте, прежде чем двигаться дальше.

person Prune    schedule 18.07.2020
comment
Я ценю ваш ответ. Я смог решить свою проблему. Еще раз спасибо. - person Ferefly; 19.07.2020