Der Zombie-Simulator
Survival-Game mit dynamischer KI & State-Logic
Dieses Projekt ist ein Top-Down Survival-Game, entwickelt mit Pygame. Der Spieler muss sich gegen immer größer werdende Horden von Zombies verteidigen. Das Spiel demonstriert wichtige Konzepte der 2D-Spieleentwicklung, darunter Kollisionserkennung, dynamische Schwierigkeit und effektives Sound-Management.
Der Startbildschirm lädt zum Überleben ein.
Wenn die Gesundheit auf Null fällt – der Game Over Screen.
Gameplay Eindrücke
Erste Minuten im Spiel – die Bedrohung wächst.
Das Sammeln von Power-Ups kann das Blatt wenden.
Vektorgestützte KI
Die Zombie-Gegner verfolgen den Spieler mithilfe von pygame.Vector2. Durch die Normalisierung der Vektoren wird eine konstante Bewegungsgeschwindigkeit gewährleistet.
Pixel-perfekte Kollision
Anstelle einfacher Rechteckkollisionen verwendet das Spiel pygame.mask. Dies ermöglicht eine präzise, Pixel-genaue Kollisionsabfrage zwischen Spieler und Gegnern.
Sound-Management
Mittels pygame.mixer.Channel werden Soundeffekte auf separaten Audiokanälen abgespielt, um Überlagerungen und Sound-Clipping zu verhindern.
Dynamische Schwierigkeit
Ein Level-System erhöht mit steigendem Score die Spawn-Rate der Zombies. Die Spawn-Zeit wird schrittweise reduziert, wodurch das Spiel kontinuierlich anspruchsvoller wird.
Einblicke in den Code
1. Initialisierung und Sound-Setup
Die Codebasis startet mit der Initialisierung von Pygame und der Konfiguration des Audio-Mixers, um mehrere Sounds gleichzeitig zu verwalten:
import pygame import sys import random import os pygame.init() pygame.mixer.init() pygame.mixer.set_num_channels(8) # Acht Kanäle für diverse Sounds
2. Spieler-Bewegung und Blickrichtung
Die Spielerbewegung wird über Tastatureingaben gesteuert. Gleichzeitig wird die Blickrichtung des Spielers angepasst, indem das Bild des Spielers horizontal gespiegelt wird:
keys = pygame.key.get_pressed()
dx = dy = 0
if keys[pygame.K_LEFT] or keys[pygame.K_a]: dx -= speed
# ... weitere Bewegungen ...
if dx < 0:
player_facing_right = False
elif dx > 0:
player_facing_right = True
3. Gegner-KI: Verfolgung und Kollision
Zombies bewegen sich direkt auf den Spieler zu. Bei Kontakt wird der Spieler verletzt, der Zombie entfernt und ein visueller "Hit-Flash" ausgelöst:
player_center = pygame.Vector2(player.center)
for e in enemies:
enemy_center = pygame.Vector2(e.center)
dir_vec = player_center - enemy_center
if dir_vec.length() != 0:
dir_vec = dir_vec.normalize()
move = dir_vec * enemy_speed
e.move_ip(move.x, move.y)
offset = (e.left - player.left, e.top - player.top)
if player_mask.overlap(enemy_mask, offset):
enemies.remove(e)
player_health -= damage
hit_flash_until = pygame.time.get_ticks() + HIT_FLASH_DURATION_MS
# ... weitere Logik für Treffer und Game Over