我是python的新手,我正在浏览这个小游戏的代码(https://www.raywenderlich.com/2795-beginning-game-programming-for-teens-with-python的完整描述)我试图理解这段代码如何跟踪屏幕上的实际元素,更具体地说,它是如何“知道“一旦达到设定的边界,列表中的哪个元素必须弹出。 (见下文)从理论上讲,我得到了代码中使用的for循环的概念,但我感觉这些代码中的某些东西不正确,或者同样可能的是,我认为它的方式缺少逻辑部分。
非常感谢你!
for bullet in arrows:
index=0
velx= math.cos(bullet[0])*10
vely= math.sin(bullet[0])*10
bullet[1]+=velx
bullet[2]+=vely
if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480:
arrows.pop(index)
index+=1
index=0
for badguy in badguys:
if badguy[0]<-64:
badguys.pop(index)
badguy[0]-=7
index+=1
我想到它的方式,在第一个“箭头”循环中索引将始终保持为“0”,因此无论哪个箭头离开屏幕,箭头列表中的第一个元素[0]都将被删除(弹出) 。然后我也不明白为什么最后有一个索引+ = 1,之后它又变回[0]?
然后是第二个,索引实际上是上升的(我在屏幕上显示它),但仍然只有离开屏幕的“badguy”(在这种情况下始终是列表[0]的第一个元素)弹出该列表,虽然从代码中我认为它应该是具有指定索引值的元素(例如[3]或[4] ...)
非常感谢,抱歉这篇长篇文章。
我也不明白index += 1
之后是否有任何代码?但真正的循环是for bullet in arrows
所以每个箭头都被检查。但你的权利是删除的箭头始终在索引0.所以index = 0
应该在循环之外。
但是你的第二次调查是错误的。 badguy[0]
不是第一个坏蛋。相反,它是活跃badguy(for badguy in badguys
)的第一个信息(像x值一样)。