微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

当我用箭头键移动另一只乌龟时,我试图在屏幕上缓慢移动绘图。问题是我的代码只让绘图在屏幕上移动,不允许我用键移动另一只乌龟。我尝试在 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) 调整为更高的值来提高块的速度。如果需要拖尾线,可以放下笔。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?