Pygame creating infinite amount of enemies

Viewed 155

class Enemy:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speedx = 10
        self.speedy = 10
        self.randomint = random.randint(0, 3)

    def draw(self, screen):
        screen.blit(enemyImage, (self.x, self.y))

    def move(self):
        if self.randomint == 0:
                self.x -= self.speedx
                self.y -= self.speedy
        if self.randomint == 1:
                self.x += self.speedx
                self.y -= self.speedy
        if self.randomint == 2:
                self.x -= self.speedx
                self.y += self.speedy
        if self.randomint == 3:
                self.x += self.speedx
                self.y += self.speedy
        if self.x == 0 or self.x == 768:
            self.speedx = -self.speedx
        if self.y == 0 or self.y == 568:
            self.speedy = -self.speedy

def drawGame():
    screen.fill((255,255,255))
    robot.draw(screen)
    for bullet in robot.bullets:
        bullet.drawBullet()
    for enemy in enemies:
        enemy.draw(screen)
    pygame.time.delay(30)
    pygame.display.update()

robot = Player(400, 300)
enemies = []

running = True
while running:
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False 


    enemy = Enemy(400, 200)

    enemies.append(enemy)
    for enemy in enemies:
        enemy.move()

    userInput = pygame.key.get_pressed()
    robot.shoot()
    robot.movePlayer(userInput)

    drawGame()

I thought this section of code could be useful for determining my problem. Running this code infinitely spawns enemies at the designated x and y value. Since I'm only calling one instance of the class Enemy, I thought only one enemy would spawn with a random movement direction. Why is this occurring instead? Thanks

1 Answers

You're problem seems to be caused by the enemy class being called within the 'while running:' loop you have, meaning that for every iteration of that game loop it will generate the enemy without end. Calling the enemy class and appending it to your list outside of that loop should fix the problem

robot = Player(400, 300)
enemy = Enemy(400, 200)
enemies = []
enemies.append(enemy)

running = True
while running:
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False 


    
    for enemy in enemies:
        enemy.move()

    userInput = pygame.key.get_pressed()
    robot.shoot()
    robot.movePlayer(userInput)

    drawGame()
Related