我试图在游戏中制作一个“太空入侵者”游戏......我已经有很多游戏已经在运行,但是我遇到了一个令我讨厌的问题,我无法自己解决(这是我已经采取的第一个编程课程) 。以下是有问题的代码:
for enemy in enemies:
if hero.sprite.rect.colliderect(enemy.sprite.rect) or enemy.posy>400:
hero.health-=1
initgame()
break
else:
enemy.moveBy(enemyPos, ENEMYVERT)
enemy.draw()
所以应该做的是:
然而,这样做实际上是从触摸播放器中移除所有生命。因为我用过休息时不应该停止计算吗?我认为它一直在计算敌人是否已达到400px,从而不断从我的玩家身上移除生命。
这是我的initgame函数
def initgame():
enemies=[]
createEnemies("1.png", 50, 250)
createEnemies("2.png", 50, 190)
createEnemies("3.png", 50, 130)
createEnemies("4.png", 50, 70)
createEnemies("5.png", 50, 10)
enemyPos=0
enemyDir=-1
hero.score=0
restartFlag=False
for enemy in enemies:
enemy.draw()
答案 0 :(得分:1)
看起来你没有清空enemies
,所以在initgame()
之后,旧的加上新的加上enemies=[]
。问题是行def initgame():
global enemies
enemies=[]
正在创建和设置局部变量。为了做你想做的事,试试:
{{1}}
答案 1 :(得分:1)
尝试放
global enemies
在initgame()
中敌人= []之前的行否则您不会清除全局敌人变量。一般来说,最好将所有内容放在一个类中,并使用self.enemies在函数之间共享数据,而不是依赖于全局变量。
您将函数放在一个类中,如下所示:
class SpaceInvaders:
def __init__(self):
self.initgame()
def initgame(self):
self.enemies = []
...#createEnemies
self.enemyPos = 0
self.enemyDir = -1
#etc
def run(self):
#your while loop here
现在应该在函数之间共享的所有变量都被称为self ..这将它们与仅在函数内部使用的局部变量(如for循环中的“enemy”)区分开来。
通过使对象成为调用运行来使用此类。
game = SpaceInvaders()
game.run()
答案 2 :(得分:0)
您的休息声明应该按预期工作。 健康必须有另一个原因一直在下降(除了循环太多)。可能在initgame()中找到了这个原因。