Dungeon Crawler v1.1
Über das Projekt
Was ist der Dungeon Crawler?
Der Dungeon Crawler war mein erstes größeres C-Projekt. Ziel war es, ein vollständig spielbares Spiel mit Standard-C zu bauen.
Die Karte wird aus einem zweidimensionalen Array aufgebaut. Wände, freie Felder, Gegner und Items haben jeweils eigene Zeichen. Der Spieler bewegt sich mit den Pfeiltasten und muss Gegnern ausweichen, während er Schätze einsammelt.
Features
Was kann das Spiel?
- Grafisches Rendering — Das Spiel läuft in einem raylib-Fenster (1280×720); Karte, Spieler, Gegner und Effekte werden GPU-beschleunigt gezeichnet.
- Spielerbewegung — Steuerung mit WASD oder Pfeiltasten, Kollisionserkennung mit Wänden, Fallen und anderen Objekten.
- Gegner-KI — Gegner verfolgen aktiv den Spieler (Pathfinding entlang X/Y-Achse); bei Kontakt stirbt der Spieler. Gegner können per Taste ein- und ausgeschaltet werden.
- Rundenbasiertes Fortschrittssystem — Jede Runde besteht aus einer prozedural generierten Karte. Der Schatz beendet die Runde; ein Portal überspringt direkt zur nächsten.
- Münzen & Fallen — Münzen ($) erhöhen den Punktestand. Fallen (+) töten den Spieler sofort, sofern kein Schild aktiv ist.
- Partikeleffekte & Kamera — Explosionen, Münzfunken und Todeseffekte als Partikelsystem; die Kamera folgt dem Spieler weich durch die Karte.
- Highscore & Persistenz — Beste Runde, meiste Schätze, meiste Münzen und gesamte Lifetime-Coins werden in einer Datei gespeichert und im Menü angezeigt.
- Game Over & Neustart — Nach dem Tod kann das Spiel neu gestartet oder ins Hauptmenü gewechselt werden.
- SPD – Verdoppelt die Bewegungsgeschwindigkeit für 8 Sekunden.
- SHD – Schild absorbiert einen Treffer (Falle oder Gegner).
- BMB – Bombe zerstört alle Fallen in einem 5×5-Bereich.
- WLK – Ghostwalk: Spieler kann 6 Sekunden lang durch Wände gehen.
- SWD – Schwert: Tötet alle Gegner im Umkreis von 3 Kacheln.
Zukünftige Features
Was wird noch kommen?
- Vollbildfunktion — Bisher ist das Spiel fest auf eine spezifische Größe beschränkt. Das soll sich in Zukunft ändern.
- Besseres UI — Das Menü soll besser aussehen
- Gegner-Killcount — Besiegte Gegner sollen gezählt werden.
Screenshots
Einblicke ins Spiel
Die Karte mit Spieler, Gegnern und Items
Links: Startmenü · Rechts: Game Over
Technisches
Wie wurde es gebaut?
Das gesamte Projekt besteht aus einer einzigen .c-Datei mit ~800 Zeilen Code, gebaut mit raylib — einer C-Bibliothek für 2D/3D-Grafik.
Die Karte ist ein statisches 2D-Array aus char-Zeichen (char map[MAP_ROWS][MAP_COLS]),
wird aber prozedural generiert und nicht hardcoded.
for (int y = 0; y < mh; y++)
for (int x = 0; x < mw; x++) {
int r = GetRandomValue(0,99);
map[y][x] = (r < tp) ? '#' : (r < xp) ? '+' : '.';
}
/* Tile-Map-Konstanten */
'#' = Wand, '.' = Boden, '+' = Falle
'T' = Schatz, 'O' = Portal, '$' = Münze
'I' = Item, 'X' = Gegner
Rendering mit raylib: Jedes Tile wird als 32×32 Pixel gerendert — Wände bekommen 3D-Bevel-Effekte, Items und Gegner sind animierte Formen/Kreise. Die Kamera folgt dem Spieler weich; Partikeleffekte werden pro Frame aktualisiert.
Eingabe mit raylib: Tasteneingaben erfolgen über IsKeyPressed() und IsKeyDown() — plattformübergreifend ohne spezielle Anpassungen nötig.
Spiellogik: Eine State Machine (`GState`: MENU → PLAY → DEAD/NEXT) steuert den Flow. Die Hauptschleife nutzt Delta-Time (`GetFrameTime()`) für konstante Physik — 60 FPS. Gegner-KI, Partikel, Timer und Kamerabewegung werden alle frame-unabhängig mit `dt` aktualisiert.
Persistenz: Highscores (beste Runde, Schätze, Münzen) werden in eine Datei geschrieben und geladen (`STATS_FILE`).
Rückblick
Was ich gelernt habe
Dieses Projekt hat mir gezeigt, wie viel man mit reinem C umsetzen kann — und wo die Grenzen des Terminals liegen. Besonders die Arbeit mit Zeigern, Arrays und der Terminalsteuerung war lehrreich. Durch den erfolgreichen Umstieg auf Raylib habe ich gelernt, wie ich eine schöne grafische Oberfläche mit gutem UI erstellen kann.
Versionshistorie