【问题标题】:Python turtle moves up and right but not left and downPython海龟上下移动但不左右移动
【发布时间】:2021-09-13 13:17:55
【问题描述】:

我正在用 Python 编写一个蛇游戏。

我有from turtle import Screen, Turtle,我有起始位置

STARTING_POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
MOVE_DISTANCE = 20
UP = 90
DOWN = 270
LEFT = 180
RIGHT = 0

然后

screen.onkey(snake.up, "Up")
screen.onkey(snake.down, "Down")
screen.onkey(snake.left, "Left")
screen.onkey(snake.right, "Right")
screen.listen()

向上和向右的行为符合预期,但向左和向下则不然。

蛇没有反应

例如,snake.speed(3),当我尝试减慢它时。

【问题讨论】:

    标签: python turtle-graphics python-turtle


    【解决方案1】:

    turtle.Turtle.up().left().right().down() 不要做你认为他们做的事。 .up().down() 上下放笔,不影响方向,.left().right() 不要立即将海龟捕捉到某个方向,它们将其转动一个必须指定的特定角度.

    您应该在常量中使用turtle.Turtle.setheading() 而不是这样做,如下所示:

    screen.onkey(lambda: snake.setheading(UP), "Up")
    screen.onkey(lambda: snake.setheading(DOWN), "Down")
    screen.onkey(lambda: snake.setheading(LEFT), "Left")
    screen.onkey(lambda: snake.setheading(RIGHT), "Right")
    screen.listen()
    

    请注意,这会设置他们面向的方向,但不会将他们朝那个方向移动。如果你想这样做,为每个方向创建你自己的函数并使用它,所以对于左,它看起来像:

    def move_left():
        snake.setheading(LEFT)
        snake.forward(5)
    
    screen.onkey(move_left, "Left")
    screen.listen()
    

    【讨论】:

    • 我同意你对这个问题的精彩分析,但它没有解释为什么right 为 OP 工作而left 没有。查看 OP 的代码,由于缺少角度参数,两者都应该失败!
    • 想通了,谢谢两位。正确的答案是两者的结合。我定义为常数的角度参数:UP = 90 DOWN = 270 LEFT = 180 RIGHT = 0;问题是我忘记了向上不是向下和向左不是正确的约束......
    最近更新 更多