Menu
CoddyTech

Une liste d’ennemis

Fait partie de la section Sprites et images du Journey Pygame de Coddy. Leçon 15 sur 39.

Un ennemi est maintenant un objet. Les deux autres ont encore besoin de leurs propres Rects et blits. Mets-les tous les trois dans une liste, comme le champ d’étoiles l’a fait avec ses étoiles, et deux petites boucles les parcourent tous :

enemies = [Enemy(red, 100, 50), Enemy(green, 300, 50)]

for enemy in enemies:
    enemy.update()

Une liste peut être écrite élément par élément entre crochets, comme ici, ou construite avec append dans une boucle. Chaque ennemi qu’elle contient se déplace grâce à son propre Rect.

Ne mets chaque ennemi qu’une seule fois dans la liste. Un ennemi qui est aussi mis à jour séparément, en dehors de la boucle, se déplace deux fois à chaque image.

challenge icon

Défi

Moyen

Garde les trois ennemis dans une seule liste.

  1. Crée enemies, une liste de trois objets Enemy : red centré à (160, 100), green à (320, 100) et yellow à (480, 100).
  2. Mets à jour chaque ennemi de la liste dans la boucle, puis dessine-les tous après le remplissage.
  3. Supprime red_enemy, les Rect verts et jaunes, ainsi que leurs lignes.

Appuie sur « Jouer » : les trois ennemis tombent comme avant. Puis appuie sur « Vérifier ».

Essayez vous-même

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Rain")
clock = pygame.time.Clock()

red = pygame.image.load("assets/images/enemy_red.png").convert_alpha()
green = pygame.image.load("assets/images/enemy_green.png").convert_alpha()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert_alpha()

class Enemy:
    def __init__(self, image, x, y):
        self.image = image
        self.rect = image.get_rect(center=(x, y))
        self.speed = 2

    def update(self):
        self.rect.y += self.speed
        if self.rect.top > 480:
            self.rect.bottom = 0

    def draw(self, screen):
        screen.blit(self.image, self.rect)


red_enemy = Enemy(red, 160, 100)
green_rect = green.get_rect(center=(320, 100))
yellow_rect = yellow.get_rect(center=(480, 100))

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

    red_enemy.update()
    for rect in (green_rect, yellow_rect):
        rect.y += 2
        if rect.top > 480:
            rect.bottom = 0

    screen.fill((20, 22, 40))
    red_enemy.draw(screen)
    screen.blit(green, green_rect)
    screen.blit(yellow, yellow_rect)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Toutes les leçons de Sprites et images

Entraînez-vous par vous-même : Playground Pygame