Menu
CoddyTech

Una lista de enemigos

Parte de la sección Sprites e imágenes del Journey de Pygame de Coddy. Lección 15 de 39.

Un enemigo ahora es un objeto. Los otros dos todavía necesitan sus propios Rects y blits. Pon los tres en una lista, como hizo el campo de estrellas con sus estrellas, y dos bucles cortos los ejecutarán a todos:

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

for enemy in enemies:
    enemy.update()

Una lista se puede escribir elemento por elemento entre corchetes, como aquí, o crear con append en un bucle. Cada enemigo de la lista se mueve mediante su propio Rect.

Mantén cada enemigo en la lista una sola vez. Un enemigo que también se actualiza por su cuenta, fuera del bucle, se mueve dos veces en cada fotograma.

challenge icon

Desafío

Intermedio

Mantén a los tres enemigos en una sola lista.

  1. Crea enemies, una lista de tres objetos Enemy: el rojo centrado en (160, 100), el verde en (320, 100) y el amarillo en (480, 100).
  2. Actualiza a todos los enemigos de la lista en el bucle y dibújalos todos después del relleno.
  3. Elimina red_enemy, los Rect verdes y amarillos y sus líneas.

Pulsa «Jugar»: caerán tres enemigos como antes. Después, pulsa «Comprobar».

Pruébalo tú mismo

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()

Todas las lecciones de Sprites e imágenes

Practica por tu cuenta: Playground de Pygame