ย้ายเต่า Python อย่างไม่มีกำหนดในขณะที่อนุญาตให้ป้อนข้อมูล

ฉันเพิ่งเริ่มทำงานกับ 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 หากเป็นไปได้


person acousticewe    schedule 11.10.2018    source แหล่งที่มา


คำตอบ (1)


สภาพแวดล้อมที่ขับเคลื่อนด้วยเหตุการณ์เช่นเต่าไม่ควรมี 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()
person cdlane    schedule 11.10.2018
comment
ใช่แล้ว ขอบคุณมาก มันได้ผลอย่างสมบูรณ์แบบ :) ยิ่งคุณรู้มากเท่าไร - person acousticewe; 11.10.2018