Two separated brothers, Marlon (conservatory) and Malte (boiler room), can be reunited as optional content. Carry each twin's marble to the other as proof he's alive and that twin follows you; lead both to the foyer and they escape together, granting a Brass Compass keepsake and unlocking a new top-priority "No One Left Behind" ending. Purely optional — no main win condition depends on it. The new EscortEngine drives following and the foyer reunion from flags alone, so save/load needs no format change (it reconciles follower placement on the first tick after loading). Adds Room.removeNpc, one tick call in the game loop, and a follower note appended by LookCommand. descriptionStates swap the twins' home-room prose once they leave. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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+ oder der mitgelieferte Maven Wrapper (
./mvnw) – damit ist keine separate Maven-Installation nötig; der Wrapper lädt die passende Maven-Version beim ersten Aufruf selbst herunter.
Schnellstart ohne Maven
Im Ordner release/ liegt eine fertig gebaute, eigenständige JAR
(HauntedManor.jar) mit allen Abhängigkeiten. Sie braucht nur Java 25:
java -jar release/HauntedManor.jar # Konsolen-Version
java -cp release/HauntedManor.jar thb.jeanluc.adventure.AppGui # Swing-GUI
Bauen und Testen
Mit dem Wrapper (empfohlen, keine Maven-Installation nötig) – unter Windows
mvnw.cmd statt ./mvnw:
./mvnw clean test # alle Tests ausführen (233 Tests)
./mvnw clean package # baut die eigenständige JAR nach release/HauntedManor.jar
Ein systemweit installiertes mvn funktioniert identisch (mvn clean test …).
Spielen
Über die im pom.xml konfigurierten Run-Profile des exec-maven-plugin:
./mvnw exec:java@run # Konsolen-Version (thb.jeanluc.adventure.App)
./mvnw exec:java@gui # Swing-GUI (thb.jeanluc.adventure.AppGui)
./mvnw exec:java ohne Profil startet ebenfalls die Konsolen-Version.
Alternativ direkt aus der gebauten JAR (siehe Schnellstart).
Befehle im Spiel
| Befehl | Aliase | Wirkung |
|---|---|---|
go <richtung> |
move, walk |
In eine Himmelsrichtung gehen |
look |
l |
Aktuellen Raum beschreiben |
map |
m |
Karte der erkundeten Räume anzeigen |
quests |
log, journal |
Aktive und erledigte Quests anzeigen |
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.