【问题标题】:Python Turtle game, Check not working?Python Turtle 游戏,检查不起作用?
【发布时间】:2017-02-02 07:51:42
【问题描述】:
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 语句。当我穿过运动场时,它应该给我一个打印“游戏结束”。坐标是正确的,但它不检查坐标!我究竟做错了什么 ?

【问题讨论】:

  • 你怎么知道它不检查坐标?
  • edit: 我刚试过 if player.xcor() == 0: print("Game over") 这行得通,所以它确实检查坐标。但它只适用于 if xcor == 0

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


【解决方案1】:

问题在于,您测试玩家是否越界的逻辑位于代码的顶层——它不属于那里。您应该通过mainloop() 将控制权交给海龟侦听器,并在您的一种回调方法中处理边界检测,即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()

【讨论】:

  • 这很好,先生,谢谢!我只是不明白 lambda(!) 所以我像以前一样定义了方向。
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2013-12-17
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
相关资源
最近更新 更多