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.
Aufgabe
MittelBehalte alle drei Gegner in einer Liste.
- Erstelle
enemies, eine Liste mit drei Enemy-Objekten: red zentriert bei(160, 100), green bei(320, 100)und yellow bei(480, 100). - Aktualisiere in der Schleife jeden Gegner in der Liste und zeichne nach dem Füllen jeden davon.
- 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
1Bilder laden
Ein Bild ladenMit einem Rect platzierenDas Bild bewegenEinen Hintergrund kachelnTransparente Pixel2Drehen, Spiegeln, Skalieren
Um den Mittelpunkt drehenIn Flugrichtung ausrichtenEin Bild skalierenVom Original aus drehen3Klassen für Spielobjekte
Deine erste KlasseMethodenSelf ist das ObjektEine Liste von ObjektenObjekte mit BildernEine Liste von GegnernEine Unterklasse6Animation mit Sprite Sheets
Ein Sprite Sheet zuschneidenEin Frame-ZählerMit Zeit animierenEine einmalige ExplosionÜbe selbstständig: Pygame-Playground