Haunted Manor – Textadventure
Semesterprojekt im Modul Programmierung 2 (Algorithmen und Datenstrukturen, 2. Semester). Ein textbasiertes Adventure in Java: Der Spieler navigiert durch Räume eines Spukhauses, sammelt Gegenstände, interagiert mit NPCs und löst so das Spiel.
Die Spielwelt ist vollständig datengetrieben – Räume, Gegenstände und NPCs werden aus YAML-Dateien geladen, nicht im Code festverdrahtet.
Features
- Navigation durch beliebig viele Räume in den Himmelsrichtungen
- Inventar mit Aufnehmen (
take) und Ablegen (drop) von Gegenständen - Item-Hierarchie: einfache, lesbare (
read) und schaltbare (use) Gegenstände - NPCs mit Gesprächen (
talk) und Geschenk-Reaktionen (give) - Zwei Frontends: klassische Konsole und Swing-GUI (Bonus)
- Datengetriebene Welt aus YAML inkl. Referenzauflösung und Validierung beim Laden
Voraussetzungen
- Java 25+
- Maven 3.9+
Bauen und Testen
mvn clean test # alle Tests ausführen (67 Tests)
mvn clean package # JAR bauen
Spielen
Über die im pom.xml konfigurierten Run-Profile des exec-maven-plugin:
mvn exec:java@run # Konsolen-Version (thb.jeanluc.adventure.App)
mvn exec:java@gui # Swing-GUI (thb.jeanluc.adventure.AppGui)
mvn exec:java ohne Profil startet ebenfalls die Konsolen-Version.
Befehle im Spiel
| Befehl | Aliase | Wirkung |
|---|---|---|
go <richtung> |
move, walk |
In eine Himmelsrichtung gehen |
look |
l |
Aktuellen Raum beschreiben |
inventory |
inv, i |
Inventar anzeigen |
take <item> |
pick, get |
Gegenstand aufnehmen |
drop <item> |
put |
Gegenstand ablegen |
use <item> |
Gegenstand benutzen / schalten | |
read <item> |
Lesbaren Gegenstand lesen | |
examine <item> |
x, inspect |
Gegenstand genauer ansehen |
talk <npc> |
speak |
Mit einem NPC sprechen |
give <item> <npc> |
NPC einen Gegenstand geben | |
help |
? |
Befehlsübersicht anzeigen |
quit |
exit |
Spiel beenden |
Projektstruktur
Semesterprojekt/
├── src/main/java/thb/jeanluc/adventure/
│ ├── App.java - Einstiegspunkt Konsole
│ ├── AppGui.java - Einstiegspunkt Swing-GUI
│ ├── command/ - Befehlsparser, Registry + Command-Implementierungen
│ ├── game/ - Spielschleife (Game) und Kontext (GameContext)
│ ├── io/ - GameIO-Abstraktion: ConsoleIO, SwingIO
│ ├── loader/ - YAML-Laden: DTOs, Factories, Resolver, Validator
│ └── model/ - Domänenmodell: Room, World, Player, Npc, Item-Hierarchie
├── src/main/resources/world/
│ ├── game.yaml - Metadaten (Titel, Startraum, Begrüßung)
│ ├── rooms.yaml - Räume mit Ausgängen, Items, NPCs
│ ├── items.yaml - Gegenstände
│ └── npcs.yaml - NPCs und ihre Reaktionen
└── docs/ - Design- und Architekturdokumentation
Technologie-Stack
- Java 25
- Jackson (YAML) für das Laden der Spielwelt
- Lombok zur Reduktion von Boilerplate
- JUnit 5 + AssertJ + Mockito für Tests
- SLF4J + Logback für Logging
- Swing für die GUI (Bonus)
Dokumentation
Ausführliche Design- und Architekturdokumentation liegt unter
docs/: Package-Struktur, Datenstrukturen, Item-Modell,
YAML-Schemas, Lade-Ablauf, Befehle und NPC-Modell.