我正在尝试使用海龟图形在 python 中编写游戏,但移动出现问题

I'm trying to write a game in python with turtle graphics, but the movement's broken

所以,这就是我目前所拥有的:

import time
import random

#Window
wn = turtle.Screen()
wn.title("Turtle Game")
wn.bgcolor("black")
wn.setup(width=600, height=600)
wn.tracer(0)

#Player's character
player = turtle.Turtle()
player.speed(0)
player.shape("square")
player.color("white")
player.penup()
player.goto(0,0)
player.direction = "stop"

#Player's movement
def go_up():
    if player.direction != "down":
        player.direction = "up"

def go_down():
    if player.direction != "up":
        player.direction = "down"

def go_left():
    if player.direction != "right":
        player.direction = "left"

def go_right():
    if player.direction != "left":
        player.direction = "right"

def move():
    if player.direction == "up":
        y = player.ycor()
        player.sety(y + 20)

    if player.direction == "down":
        y = player.ycor()
        player.sety(y - 20)

    if player.direction == "left":
        x = player.xcor()
        player.setx(x - 20)

    if player.direction == "right":
        x = player.xcor()
        player.setx(x + 20)

#Listen for keypresses
wn.listen()
wn.onkeypress(go_up, "w")
wn.onkeypress(go_down, "s")
wn.onkeypress(go_left, "a")
wn.onkeypress(go_right, "d")

目前,我得到的只是 window 中的一个空白屏幕。 #Window 似乎工作正常,但除此之外,没有其他任何东西出现。老实说,我不确定为什么会这样,所以我转向 Whosebug 寻求帮助。

关于您的代码的一些要点:

  1. 我必须在开头添加 import turtle,才能使用 turtle 模块。

  2. window打开后立即关闭。我必须在末尾添加 wn.exitonclick() 以保持 window 打开。

  3. 永远不会调用 move() 函数。在播放器方向更新后,我必须在 go_upgo_downgo_leftgo_right 中添加对 move() 的调用。

  4. 您通过设置 wn.tracer(0) 禁用跟踪。在 documentation 之后,如果没有跟踪,您必须使用 turtle.update() 手动刷新 window。我将此调用添加到 move() 函数的末尾。或者,您可以使用 wn.tracer(1) 在每次更改时自动刷新屏幕。

    诚然,文档对 0.

    的影响并不十分清楚

将这些更改应用到您的代码中,我得到了一个 window,我可以在其中使用 w/a 在乌龟周围移动/s/d.

一个附加说明:我不清楚您在 go_... 函数中尝试使用 if 语句做什么。在 go_up() 中,仅当当前不是 down 时才将方向设置为 up。这样的效果是,当我将海龟向下移动时,我无法再次向上移动它,直到我通过 go_left()/go_right() 进行侧步。这似乎很奇怪。如果方向还没有 up,也许你打算只更新到 up?如:

    if player.direction != "up":
        player.direction = "up"