Python - клавиатура нескольких объектов черепахи

Я хотел бы создать программу, в которой объект Turtle реагирует на нажатия клавиш. Я могу сделать это, но я не могу понять, как перемещать второй объект Черепахи, который управляется компьютером, в то время как первый движется. Любая помощь будет оценена.

Вот мой код:

from turtle import *
from Tkinter import Tk
root = Tk()
root.withdraw()
turtle = Turtle()
def h1():turtle.forward(10)
def h2():turtle.left(45)
def h3():turtle.right(45)
def h4():turtle.back(10)
def h5(root=root):root.quit()
onkey(h1,"Up")
onkey(h2,"Left")
onkey(h3,"Right")
onkey(h4,"Down")
onkey(h5,"q")
listen()
root.mainloop()

2 ответа

Вставьте вторую черепаху перед listen() который движется с ключами w,a,s,d:

turtle2 = Turtle()
def h11():turtle2.forward(10)
def h21():turtle2.left(45)
def h31():turtle2.right(45)
def h41():turtle2.back(10)
onkey(h11,"w")
onkey(h21,"a")
onkey(h31,"d")
onkey(h41,"s")

Кажется, я не понимаю, как двигать второй объект Черепахи, который управляется компьютером, пока движется первый.

Ниже приведен минимальный код, который соответствует описанию. Зеленая черепаха Pokey управляется компьютером, а красная черепаха Hokey - пользователем (сначала нажмите на окно, чтобы услышать нажатия клавиш):

from turtle import Turtle, Screen

def move_pokey():
    pokey.forward(10)
    x, y = pokey.position()

    if not (-width/2 < x < width/2 and -height/2 < y < height/2):
        pokey.undo()
        pokey.left(90)

    screen.ontimer(move_pokey, 100)

hokey = Turtle(shape="turtle")
hokey.color("red")
hokey.penup()

pokey = Turtle(shape="turtle")
pokey.setheading(30)
pokey.color("green")
pokey.penup()

screen = Screen()

width = screen.window_width()
height = screen.window_height()

screen.onkey(lambda: hokey.forward(10), "Up")
screen.onkey(lambda: hokey.left(45), "Left")
screen.onkey(lambda: hokey.right(45), "Right")
screen.onkey(lambda: hokey.back(10), "Down")
screen.onkey(screen.bye, "q")

screen.listen()

screen.ontimer(move_pokey, 100)

screen.mainloop()

Это не законченный код (завершение события таймера должно быть более чистым, обработчики Hokey должны блокировать дополнительные события во время работы и т. Д.), Но оно должно дать вам базовое представление о том, как это сделать.

Другие вопросы по тегам