我正在尝试使用海龟图形在 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 寻求帮助。
关于您的代码的一些要点:
我必须在开头添加 import turtle
,才能使用 turtle
模块。
window打开后立即关闭。我必须在末尾添加 wn.exitonclick()
以保持 window 打开。
永远不会调用 move()
函数。在播放器方向更新后,我必须在 go_up
、go_down
、go_left
和 go_right
中添加对 move()
的调用。
您通过设置 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"
所以,这就是我目前所拥有的:
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 寻求帮助。
关于您的代码的一些要点:
我必须在开头添加
import turtle
,才能使用turtle
模块。window打开后立即关闭。我必须在末尾添加
wn.exitonclick()
以保持 window 打开。永远不会调用
move()
函数。在播放器方向更新后,我必须在go_up
、go_down
、go_left
和go_right
中添加对move()
的调用。您通过设置
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"