Spieleentwicklung · C-Projekt

Dungeon Crawler

Ein Dungeon-Spiel, das mit Raylib komplett in C geschrieben wurde. Der Spieler navigiert durch eine Karte, flieht vor Gegnern und sammelt Items.

🎮 Spieleentwicklung v1.4 01. Juli. 2026

Dungeon Crawler v1.4

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.

Sprache: C | Kompiliert mit GCC | Läuft als Anwendung im eigenen Fenster

Was kann das Spiel?

Was wird noch kommen?


Einblicke ins Spiel

Karten-Ansicht

Die Karte mit Spieler, Gegnern und Items

Startbildschirm Game Over Bildschirm

Links: Startmenü · Rechts: Game Over


Wie wurde es gebaut?

Das gesamte Projekt besteht weiterhin aus einer einzigen .c-Datei, mittlerweile auf ~3.350 Zeilen Code angewachsen, 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.

/* Karte wird zur Runtime generiert */
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`).

Shop & Fortschritt: Jedes der 5 Items hat ein eigenes Upgrade-Level, das per Array (Dauer/Reichweite pro Stufe) ausgelesen wird; Skin-Besitz, Levels und Coins werden separat gespeichert (`SHOP_FILE`). Die 30 Skins sind nach Seltenheit gestaffelt und je nach Stufe mit eigenen Zeichenfunktionen gerendert — von einfarbigen Common-Skins bis zu animierten Epic-Skins. Achievements laufen über dieselben Stats-Werte und werden live mit Zielwerten je Stufe abgeglichen.


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 und Arrays war lehrreich. Durch den erfolgreichen Umstieg auf Raylib habe ich gelernt, wie ich eine schöne grafische Oberfläche mit gutem UI erstellen kann.

Im weiteren Verlauf des Projekts habe ich außerdem eine Web-Integration mithilfe von Emscripten umgesetzt, sodass das Spiel nicht mehr nur als lokale Anwendung läuft, sondern direkt im Browser spielbar ist. Dabei habe ich verstanden, wie aus nativen C/C++-Programmen durch WebAssembly eine Brücke zum Web entsteht und welche Anpassungen dafür notwendig sind. Besonders interessant war es, mit den Build-Prozessen und der Kompilierung für unterschiedliche Zielplattformen zu arbeiten, da sich dadurch viele neue technische Zusammenhänge erschließen.

Insgesamt habe ich durch dieses Projekt nicht nur meine Programmierkenntnisse in C deutlich vertieft, sondern auch gelernt, wie wichtig eine saubere Strukturierung des Codes ist, wenn Projekte größer und komplexer werden. Außerdem habe ich ein besseres Verständnis dafür entwickelt, wie Spiele-Logik, Rendering und Benutzerinteraktion zusammenwirken. Die Kombination aus klassischer Softwareentwicklung und moderner Web-Technologie hat mir gezeigt, wie flexibel heutige Entwicklungswerkzeuge sind und welche Möglichkeiten sich daraus ergeben.


Wie das Projekt gewachsen ist

v1.4
01. Juli. 2026
Version 1.4 Achievements hinzugefügt, Settings-Menü hinzugefügt, Future-Updates-Info nach oben verschoben, Mehr Item-Upgrades, 10+ neue Skins hinzugefügt, animierte Skins möglich, Nerfes für Skin-Prices
v1.3
14. Juni. 2026
Version 1.3 Menü-Redesign, Pause-Funktion hinzugefügt, HUD-Anzeigen überarbeitet, In-Game-Shop für Skins und Upgrades eingebaut, Counter komplett neu aufgebaut.
v1.2
31. Mai. 2026
Version 1.2 Vollbildfunktion hingefügt, Spielbarkeit im Web ermöglicht, Gegner-Killcount hinzugefügt.
v1.1
21. Mai. 2026
Version 1.1 Schilde schützen gegen Gegner, Item um Gegner zu besiegen hinzugefügt, Item um durch Wände zu gehen hinzugefügt, Bugfixes.
v1.0
21. Mai. 2026
Finales Release Raylib-Integration, Partikeleffekte, Gegner hinzugefügt,Highscore-System, 3 Item-Typen, verbessertes UI und viele Bugfixes.
v0.9.3
27. Jan. 2026
Alpha — Finale Version Bugfixes, Animationen hinzugefügt.
v0.9
20. Jan. 2026
Alpha Farben hinzugefügt.
v0.8
20. Jan. 2026
Version 0.8 Neue Runden vergrößern die Map.
v0.7
19. Jan. 2026
Version 0.7 Schatz hinzugefügt, danach wird die nächste Runde generiert.
v0.6
19. Jan. 2026
Version 0.6 getch_ hinzugefügt, um Eingaben zu lesen, ohne enter zu drücken.
v0.5
18. Jan. 2026
Version 0.5 Fallen und Mauern hinzugefügt.
v0.4
18. Jan. 2026
Version 0.4 Wände hinzugefügt.
v0.3
18. Jan. 2026
Version 0.3 Performance-Optimierungen.
v0.2
13. Jan. 2026
Version 0.2 Map hinzugefügt, Spieler kann sich bewegen.
v0.1
12. Jan. 2026
Erster Commit Koordinatensystem zum Bewegen erstellt.