我正在尝试创建一个游戏,其中有2个计数器,a和b,游戏继续而a不等于2(最初为0)且b不等于5(最初为3),并且b将每次公主都会触及窗户上的某个点。我在保留a和b值时遇到问题。我正在使用基于TKinter构建的Zelle第二版图形框架构建此游戏。我的b似乎永远不会超过4,并且总是重置为3而不是达到5以停止while循环。
相关代码如下(我的图像公主是一个具有自己的构造函数和方法移动的类),对于处理b的代码:
.... (irrelevant class informtion) ...
# I did not pass b into the __init__
# I only passed it into the move method, is that fine?
def move( self, mouse, b ):
dX = 0
if mouse.getY() > 300:
dY = 2
else:
dY = -2
self.img.move( dX, dY )
if self.img.getAnchor().getY() == 350:
newB = b + 1
return newB
else:
return b
.....(无关代码)......
while a != 2 or b!= 5:
mouse = win.getMouse()
b = 3
princess.move( mouse, b )
newB = princess.move( mouse, b )
continue
答案 0 :(得分:1)
我想说这只是与范围有关,但在进一步挖掘时,它似乎并非如此。
你有一个while循环,它应该在a==2 and b==5
时结束,它们最初都设置为0
,但在循环中,你永远不会改变{{1因此,第一个条件将始终为a
,并且您将获得无限循环。
您的true
始终会恢复为b
,因为您在循环中有3
,并且您从未将其设置为其他任何内容。我假设b=3
函数返回新位置princess.move(...)
。
此外,循环结束时的b
完全是多余的。
试试这个:
continue
作为旁注,你是否计划在那里用a,b = 0,0
while a != 2 or b!= 5:
mouse = win.getMouse()
b = princess.move(mouse, b)
做一些事情?因为目前它没有做任何事情,所以这应该足够了:
a
然后再进一步说明,调用变量b = 0
while b!= 5:
mouse = win.getMouse()
b = princess.move(mouse, b)
和a
对于阅读代码的人来说是无用的。有用地命名。
答案 1 :(得分:1)
你永远不会改变b的值。也许你想在你的while循环中说b = princes.move(mouse,b)
,所以在那之后b可能会增加。在你的代码中,b永远保持值为3。