Menu
CoddyTech

Eine Liste von Gegnern

Teil des Abschnitts Sprites und Bilder der Pygame-Journey von Coddy. Lektion 15 von 39.

Ein Gegner ist jetzt ein Objekt. Für die beiden anderen werden noch eigene Rects und Blits benötigt. Fasse alle drei in einer Liste zusammen, wie das Sternenfeld es mit seinen Sternen gemacht hat, und zwei kurze Schleifen führen sie alle aus:

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

for enemy in enemies:
    enemy.update()

Eine Liste kann wie hier Element für Element in eckigen Klammern ausgeschrieben oder in einer Schleife mit append erstellt werden. Jeder Gegner darin bewegt sich anhand seines eigenen Rects.

Führe jeden Gegner nur einmal in der Liste. Ein Gegner, der zusätzlich außerhalb der Schleife einzeln aktualisiert wird, bewegt sich in jedem Frame zweimal.

challenge icon

Aufgabe

Mittel

Behalte alle drei Gegner in einer Liste.

  1. Erstelle enemies, eine Liste mit drei Enemy-Objekten: red zentriert bei (160, 100), green bei (320, 100) und yellow bei (480, 100).
  2. Aktualisiere in der Schleife jeden Gegner in der Liste und zeichne nach dem Füllen jeden davon.
  3. Entferne red_enemy, die grünen und gelben Rects sowie ihre Zeilen.

Drücke „Spielen“: Drei Gegner fallen wie zuvor. Drücke dann „Prüfen“.

Probier es selbst

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

Alle Lektionen in Sprites und Bilder

Übe selbstständig: Pygame-Playground