0

这是我的程序中的一个例外代码。第一个块处理射击+敌人的碰撞,第二个处理地雷+敌人的碰撞,第三个实际产生新的波浪。目前,初始波大小会产生 10 个敌人,并且游戏循环不会在第一波之后产生新的敌人。

        # baddie and shot collision
        removed = False
        for a in baddies[:]:
            for b in shots[:]:
                if a.imgRect.colliderect(b.imgRect):
                    shots.remove(b)
                    a.toughness -= 1
                    if a.toughness < 1:
                        baddies.remove(a)
                        removed = True

                        print str(wavesize)

                        break

        # baddie and mine collision
        removed = False
        for a in baddies[:]:
            for b in mines[:]:
                if a.imgRect.colliderect(b.imgRect):
                    mines.remove(b)
                    a.toughness -= 1
                    if a.toughness < 1:
                        baddies.remove(a)
                        removed = True
                        break

        if removed:
            wavesize -= 1
            if wavesize < 1:
                loopcount += 1
                wavesize = 10+(loopcount*5)
                baddies = createNewWave(wavesize)
4

1 回答 1

1

每次运行循环并删除一个坏人时,您只会减少wavesize一,但您很可能一次删除多个坏人。此外,您在removed第一组循环之后重置变量,因此如果坏人被射击摧毁,您可能会错过他们。您应该做的是跟踪您删除了多少坏人,然后将波浪大小减少那么多。

removed = 0
for a in baddies[:]:
    for b in shots[:]:
        ...
        baddies.remove(a)
        removed += 1

for a in baddies[:]:
    for b in mines[:]:
        ...
        baddies.remove(a)
        removed += 1

wavesize -= removed
if wavesize < 1:
    loopcount += 1
    wavesize = 10+(loopcount*5)
    baddies = createNewWave(wavesize)
于 2013-04-24T01:39:51.090 回答