如何创建一个for循环来初始化我的类的对象,而不是逐个初始化

1 投票
4 回答
528 浏览
提问于 2025-04-17 19:15
def main():
    screen = pygame.display.set_mode((675, 480))
    pygame.display.set_caption("Space Invaders")

    background = pygame.Surface(screen.get_size())
    background.fill((0, 0, 0))

    allSprites = pygame.sprite.Group()

    for j in range(0, 5):
        for i in range(0, 10):
            invader1 = Invader1(screen, (0, 0))
            invader1.x += 75
            invader1.add(allSprites)
        invader1.y += 75

我正在为一个项目制作一个太空入侵者游戏,但在使用for循环时遇到了一些麻烦。我想创建10个敌人,但不想一个一个地输入。我知道for循环可以解决这个问题,只是不太确定怎么开始。我想让第一个敌人出现在(0, 0)的位置,然后每个敌人沿着x轴移动75个单位,等10个敌人创建完后,再在y轴上向下移动75个单位,然后重复这个过程。有没有人知道我该怎么做?谢谢大家!

4 个回答

0

如果你使用嵌套的列表推导式,就可以把Pavel的答案简化成一行代码。

invaders =  [ Invader1(screen, (x, y)) for x in range(0, 750, 75) for y in range(0, 325, 75) ]
6

使用带有 step 参数的范围。

In [4]: range(0, 75 * 5, 75)
Out[4]: [0, 75, 150, 225, 300]

 

allSprites = pygame.sprite.Group()
for y in range(0, 75 * 5, 75):
    for x in range(0, 75 * 10, 75):
        Invader1(screen, (x, y)).add(allSprites)
0

把你的代码改成这样:

def main():
screen = pygame.display.set_mode((675, 480))
pygame.display.set_caption("Space Invaders")

background = pygame.Surface(screen.get_size())
background.fill((0, 0, 0))

allSprites = pygame.sprite.Group()

for j in range(0, 5):
    for i in range(0, 10):
        invader1 = Invader1(screen, (75*i,75*j ))
        invader1.add(allSprites)

撰写回答