我正在尝试让我的程序以矩形的方式顺时针移动“寿司盘”,尽管在我的第三个if
语句之后它似乎不会继续移动:
from graphics import *
win =GraphWin("Draw and Animate",640,480)
win.setBackground("wheat1")
#Right
xmove = 1
ymove = 0
#Down
xmove2 = 0
ymove2 = 1
#Left
xmove3 = -1
ymove3 = 0
#Up
xmove4 = 0
ymove4 = -1
sushiplate = Rectangle(Point(300,160),Point(340,180))
sushiplate.setFill("white")
sushiplate.draw(win)
leftsushi = Circle(Point(310,170), 5)
leftsushi.setOutline("Green")
leftsushi.setFill("orange")
leftsushi.draw(win)
rightsushi = Circle(Point(330,170), 5)
rightsushi.setOutline("Green")
rightsushi.setFill("orange")
rightsushi.draw(win)
while(True):
#Move sushi
sushiplate.move(xmove4, ymove4)
leftsushi.move(xmove4, ymove4)
rightsushi.move(xmove4, ymove4)
sushicenter = sushiplate.getCenter()
if (sushicenter.getY()<=130):
xmove4 = xmove
ymove4 = ymove
if (sushicenter.getX()>=510):
xmove = xmove2
ymove = ymove2
if (sushicenter.getY()>=360):
xmove2 = xmove3
ymove2 = ymove3
update(60)
我的寿司盘将向上、向右、向下移动,但将继续向下移动,我的第三个if
语句将不运行:
if (sushicenter.getY()>=360):
xmove2 = xmove3
ymove2 = ymove3
问题是一旦这样的情况触发:
每次结果是Y方向发生变化,并且对象在X方向固定时,它都会继续触发。之后的案子永远不会触发。我们可以通过先“试水”来解决这个问题,看看移动是否会引发变化,然后再进行移动。我在下面对您的代码进行了重写,但同时也试图摆脱数字而代之以符号,因为所有编号的变量都很混乱,即使您考虑到代码中的错误:
你已经在
if (sushicenter.getY()<=130):
分支下了sushicenter.getY()>=360
在这种情况下不可能是真的这些条件应该在同一级别,而不是嵌套的。因为第二级if检查
sushicenter.getY() <= 130
,所以只有当getY()
同时是>=360
和<=130
时才可以触发第四级条件,而且这永远不会发生。 我想你的意思是让它们保持在同一水平,这样它们就可以独立触发,而不依赖于其他条件相关问题 更多 >
编程相关推荐