Неограниченно перемещайте черепаху Python, позволяя вводить - PullRequest
0 голосов
/ 11 октября 2018

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

while True:
  win.onkey(up,"Up")
  win.onkey(right,"Right")
  win.onkey(down,"Down")
  win.onkey(left,"Left")
  win.listen()
#moves the snake one unit in the same direction it is currently facing
  movesnake()

Я новичок в Turtle, и это мое предположение о том, как решить эту проблему - что, очевидно, не работает.Любая помощь будет оценена.Я уверен, что Pygame может сделать это проще, но, поскольку я уже начал работать с Turtle, я бы предпочел получить решение Turtle, если это возможно.

1 Ответ

0 голосов
/ 11 октября 2018

В управляемой событиями среде, такой как черепаха, никогда не должно быть while True:, поскольку она потенциально блокирует события (например, клавиатура).Вместо этого используйте событие ontimer().

Как правило, onkey() и listen() не принадлежат циклу - для большинства программ их нужно вызывать только один раз.

Вотскелетный пример автономной черепахи, перенаправленной пользовательским вводом:

from turtle import Screen, Turtle

def right():
    snake.setheading(0)

def up():
    snake.setheading(90)

def left():
    snake.setheading(180)

def down():
    snake.setheading(270)

def movesnake():

    snake.forward(1)

    screen.ontimer(movesnake, 100)

snake = Turtle("turtle")

screen = Screen()

screen.onkey(right, "Right")
screen.onkey(up, "Up")
screen.onkey(left, "Left")
screen.onkey(down, "Down")

screen.listen()

movesnake()

screen.mainloop()
...