Python Turtle游戏,检查不工作?

时间:2016-09-24 15:20:05

标签: python visual-studio if-statement turtle-graphics

import turtle

# Make the play screen
wn = turtle.Screen()
wn.bgcolor("red")

# Make the play field
mypen = turtle.Turtle()
mypen.penup()
mypen.setposition(-300,-300)
mypen.pendown()
mypen.pensize(5)
for side in range(4):
    mypen.forward(600)
    mypen.left(90)
mypen.hideturtle()

# Make the object
player = turtle.Turtle()
player.color("black")
player.shape("circle")
player.penup()


# define directions( East, West , South , Nord )

def west():
    player.setheading(180)

def east():
    player.setheading(0)

def north():
    player.setheading(90)

def south():
    player.setheading(270)

# define forward

def forward():
    player.forward(20)

# Wait for input
turtle.listen()
turtle.onkey(west, "a")
turtle.onkey(east, "d")
turtle.onkey(forward,"w")
turtle.onkey(north,"q")
turtle.onkey(south,"s")

if player.xcor() > 300 or player.xcor() < -300:
    print("Game over")   
if player.ycor() > 300 or player.ycor() < -300:
    print("Game over")

所以一切正常,直到If语句。当我走进游乐场时,它应该给我一个打印&#34;游戏结束&#34;。坐标是正确的,但它不检查坐标!我究竟做错了什么 ?

1 个答案:

答案 0 :(得分:0)

问题是你测试玩家是否超出界限的逻辑是你的代码的最高级别 - 它不属于那里。你应该通过mainloop()将控制权交给turtle listener,并在你的一个回调方法中处理边界检测,即forward()

在您的代码返工中演示以上内容:

import turtle

QUADRANT = 250

# Make the play screen
screen = turtle.Screen()
screen.bgcolor("red")

# Make the play field
play_pen = turtle.Turtle()
play_pen.pensize(5)
play_pen.speed("fastest")
play_pen.penup()
play_pen.setposition(-QUADRANT, -QUADRANT)
play_pen.pendown()
for _ in range(4):
    play_pen.forward(QUADRANT * 2)
    play_pen.left(90)
play_pen.hideturtle()

# Make the object
player = turtle.Turtle()
player.color("black")
player.shape("circle")
player.penup()

# define forward

def forward():
    player.forward(20)

    if player.xcor() > QUADRANT or player.xcor() < -QUADRANT or player.ycor() > QUADRANT or player.ycor() < -QUADRANT:
        player.hideturtle()
        player.setposition((0, 0))
        player.write("Game over", False, align="center", font=("Arial", 24, "normal"))

# define directions(East, West, North, South)

turtle.onkey(lambda: player.setheading(180), "a")  # west
turtle.onkey(lambda: player.setheading(0), "d")  # east
turtle.onkey(lambda: player.setheading(90), "q")  # north
turtle.onkey(lambda: player.setheading(270), "s")  # south

turtle.onkey(forward, "w")

# Wait for input

turtle.listen()

turtle.mainloop()