有没有办法用一只乌龟画一个正方形,同时用箭头键移动另一只乌龟?

Is there a way to keep drawing a square with one turtle while, at the same time, moving another turtle with the arrow keys?

我正在尝试在使用箭头键移动另一只乌龟的同时在屏幕上缓慢移动绘图。问题是我的代码只让绘图在屏幕上移动,不允许我用键移动另一只乌龟。我已经尝试在 while true 语句中定义键,但结果仍然相同。

这是我的代码:

from turtle import * 
setup(500, 500)
Screen()
screen = Screen()
title("Turtle Keys")
turtle1 = Turtle() 
turtle2 = Turtle()

def moving_square():
    turtle1.fillcolor("Red")
    turtle1.begin_fill()
    for i in range(4):
        turtle1.forward(50)
        turtle1.right(90)
    turtle1.end_fill()
turtle1.goto(-350, 0)
turtle1.pendown()
turtle1.hideturtle()

def k1():
    turtle2.forward(50)

def k2():
    turtle2.left(45)

def k3():
    turtle2.right(45)

def k4():
    turtle2.back(25)

onkey(k1, "Up")
onkey(k2, "Left")
onkey(k3, "Right")
onkey(k4, "Down")

while True:
    moving_square()
    screen.update()         
    turtle1.forward(5)

它需要 listen() 才能对按键做出反应。

而且您甚至在 onkey()

的文档中也有此信息
from turtle import * 

# --- functions ---

def moving_square():
    turtle1.fillcolor("Red")
    turtle1.begin_fill()
    for i in range(4):
        turtle1.forward(50)
        turtle1.right(90)
    turtle1.end_fill()
    
def k1():
    turtle2.forward(50)

def k2():
    turtle2.left(45)

def k3():
    turtle2.right(45)

def k4():
    turtle2.back(25)

# -- main ---

setup(500, 500)
Screen()
screen = Screen()
title("Turtle Keys")
turtle1 = Turtle() 
turtle2 = Turtle()

turtle1.goto(-350, 0)
turtle1.pendown()
turtle1.hideturtle()

onkey(k1, "Up")
onkey(k2, "Left")
onkey(k3, "Right")
onkey(k4, "Down")

listen()

while True:
    moving_square()
    screen.update()         
    turtle1.forward(5)
    
    

对于更多类似游戏的动作,我会以不同的方式进行。首先,不绘制红色方块,而是将第一只乌龟变成红色方块。其次,通过使用定时事件而不是 while True: 循环:

from turtle import Screen, Turtle

WIDTH, HEIGHT = 500, 500
BLOCK_SIZE = 50
CURSOR_SIZE = 20

def k1():
    turtle.forward(50)

def k2():
    turtle.left(45)

def k3():
    turtle.right(45)

def k4():
    turtle.back(25)

def move():
    block.forward(1)

    if block.xcor() < WIDTH/2 + BLOCK_SIZE/2:
        screen.ontimer(move, 75)  # milliseconds

screen = Screen()
screen.setup(WIDTH, HEIGHT)
screen.title("Turtle Keys")

block = Turtle()
block.hideturtle()
block.shape('square')
block.fillcolor('red')
block.shapesize(BLOCK_SIZE / CURSOR_SIZE)
block.penup()
block.setx(-WIDTH/2 - BLOCK_SIZE/2)
block.showturtle()

turtle = Turtle()
turtle.shape('turtle')
turtle.penup()

screen.onkey(k1, 'Up')
screen.onkey(k2, 'Left')
screen.onkey(k3, 'Right')
screen.onkey(k4, 'Down')
screen.listen()

move()

screen.mainloop()

您可以通过将 block.forward(1) 调整为更高的值来提高方块的速度。如果你需要拖尾线,你可以放下笔。