Pindahkan kura-kura Python tanpa batas sambil mengizinkan masukan

Saya baru saja mulai mengerjakan versi Snake menggunakan Turtle, dan saya mengalami masalah. Saya ingin ular itu bergerak tanpa batas waktu, tetapi juga mengizinkan pengguna menggerakkan ular itu dengan keyboard. Saya membuat ular berpindah dari masukan pengguna, tetapi saya tidak tahu cara membuat ular tetap bergerak ke arah yang sama saat tidak ada masukan, sekaligus mencegahnya mengabaikan masukan pengguna:

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()

Saya baru mengenal Turtle, dan inilah tebakan saya tentang cara mengatasi masalah ini - yang jelas tidak berhasil. Bantuan apa pun akan dihargai. Saya sadar Pygame mungkin membuat ini lebih mudah tetapi karena saya sudah memulai dengan Turtle, saya lebih memilih untuk mendapatkan solusi Turtle, jika memungkinkan.


person acousticewe    schedule 11.10.2018    source sumber


Jawaban (1)


Lingkungan yang digerakkan oleh peristiwa seperti turtle tidak boleh memiliki while True: karena berpotensi memblokir peristiwa (misalnya keyboard). Gunakan acara ontimer() sebagai gantinya.

Secara umum, onkey() dan listen() tidak termasuk dalam satu lingkaran -- untuk sebagian besar program, keduanya hanya perlu dipanggil satu kali.

Berikut adalah contoh kerangka penyu otonom yang dialihkan berdasarkan masukan pengguna:

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()
person cdlane    schedule 11.10.2018
comment
Ya terima kasih banyak, itu bekerja dengan sempurna :) semakin banyak Anda tahu - person acousticewe; 11.10.2018