Python: 为什么数学运算符不起作用?
Python: How come the math operators won't work?
我一直在学习向初学者展示如何制作 "Space Invaders" 游戏的教程。我主要只是想要一种方法来玩海龟图形或类似的东西。一切都进行得很顺利,直到我注意到我在定义 move_left 函数的地方创建的 if 语句不起作用。然而,问题不在于 if 语句本身。我尝试在其下执行的任何数学运算都会被程序完全忽略,没有任何错误消息或任何内容。我什至试图在 if 语句下制作一个打印语句,只是为了查看实际语句是否响应,并且确实看到了按我计划打印的语句。那么给出了什么?为什么我不能在这两个函数下做任何数学方程式或类似的事情?
所以,这是我在下面遵循的代码:
import turtle
import os
def main():
#Set up the screen
wn = turtle.Screen()
wn.bgcolor("black")
wn.title("Space Invaders")
#Draw Border
border_pen = turtle.Turtle()
border_pen.speed(0)
border_pen.color("white")
border_pen.penup()
border_pen.setposition(-300, -300)
border_pen.pendown()
border_pen.pensize(3)
for side in range (4):
border_pen.fd(600)
border_pen.lt(90)
border_pen.hideturtle()
#create the player turtle
player = turtle.Turtle()
player.color("blue")
player.shape('triangle')
player.penup()
player.speed(0)
player.setposition(0, -250)
player.setheading(90)
#Player controls
playerspeed = 15
def move_left():
x = player.xcor()
x -= playerspeed
player.setx(x)
print(x)
if x < -280:
print("Reached") #It is here I tested rather or not the if statement
#above works, which it does
x = -280 #The following code here will not take effect. I tried all
#of different signs to use. Nothing happens. Not even an
#error
def move_right(): #I did not put the if statement here since I noticed the
#problem with the left side first
x = player.xcor()
x += playerspeed
player.setx(x)
if x > 280:
x = 280
turtle.listen()
turtle.onkey(move_left, "Left")
turtle.onkey(move_right, "Right")
turtle.mainloop()
main()
代码没有影响的原因是因为您修改了 x
的值,函数范围的局部变量,而不是玩家位置。在更新局部变量 x
后,调用 player.setx(x)
实际更新玩家位置。如果你想限制你的位置,你也可以使用内置的 min
/max
方法:
def move_left():
x = player.xcor()
x -= playerspeed
player.setx(max(x, -280))
def move_right():
x = player.xcor()
x += playerspeed
player.setx(min(x, 280))
我一直在学习向初学者展示如何制作 "Space Invaders" 游戏的教程。我主要只是想要一种方法来玩海龟图形或类似的东西。一切都进行得很顺利,直到我注意到我在定义 move_left 函数的地方创建的 if 语句不起作用。然而,问题不在于 if 语句本身。我尝试在其下执行的任何数学运算都会被程序完全忽略,没有任何错误消息或任何内容。我什至试图在 if 语句下制作一个打印语句,只是为了查看实际语句是否响应,并且确实看到了按我计划打印的语句。那么给出了什么?为什么我不能在这两个函数下做任何数学方程式或类似的事情?
所以,这是我在下面遵循的代码:
import turtle
import os
def main():
#Set up the screen
wn = turtle.Screen()
wn.bgcolor("black")
wn.title("Space Invaders")
#Draw Border
border_pen = turtle.Turtle()
border_pen.speed(0)
border_pen.color("white")
border_pen.penup()
border_pen.setposition(-300, -300)
border_pen.pendown()
border_pen.pensize(3)
for side in range (4):
border_pen.fd(600)
border_pen.lt(90)
border_pen.hideturtle()
#create the player turtle
player = turtle.Turtle()
player.color("blue")
player.shape('triangle')
player.penup()
player.speed(0)
player.setposition(0, -250)
player.setheading(90)
#Player controls
playerspeed = 15
def move_left():
x = player.xcor()
x -= playerspeed
player.setx(x)
print(x)
if x < -280:
print("Reached") #It is here I tested rather or not the if statement
#above works, which it does
x = -280 #The following code here will not take effect. I tried all
#of different signs to use. Nothing happens. Not even an
#error
def move_right(): #I did not put the if statement here since I noticed the
#problem with the left side first
x = player.xcor()
x += playerspeed
player.setx(x)
if x > 280:
x = 280
turtle.listen()
turtle.onkey(move_left, "Left")
turtle.onkey(move_right, "Right")
turtle.mainloop()
main()
代码没有影响的原因是因为您修改了 x
的值,函数范围的局部变量,而不是玩家位置。在更新局部变量 x
后,调用 player.setx(x)
实际更新玩家位置。如果你想限制你的位置,你也可以使用内置的 min
/max
方法:
def move_left():
x = player.xcor()
x -= playerspeed
player.setx(max(x, -280))
def move_right():
x = player.xcor()
x += playerspeed
player.setx(min(x, 280))