Replace the single HauntedManor.jar with two self-contained jars, one per entry point (HauntedManor-Console.jar -> App, HauntedManor-GUI.jar -> AppGui), each with its own Main-Class so both run via plain `java -jar`. The console jar omits the OGG decode libraries and the ~11 MB of music tracks (GameIO.setMusic is a no-op in text mode), dropping it from 17 MB to ~5 MB. README documents running each jar. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
117 lines
4.6 KiB
Markdown
117 lines
4.6 KiB
Markdown
# 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/`](release/) liegen zwei fertig gebaute, eigenständige
|
||
JARs mit allen Abhängigkeiten – je eine pro Frontend. Sie brauchen nur Java 25:
|
||
|
||
```bash
|
||
java -jar release/HauntedManor-Console.jar # Konsolen-Version (~5 MB, ohne Audio)
|
||
java -jar release/HauntedManor-GUI.jar # Swing-GUI (~17 MB, mit Musik)
|
||
```
|
||
|
||
Die Konsolen-JAR enthält weder die Musikdateien noch die OGG-Bibliotheken –
|
||
der Textmodus spielt keine Musik, daher werden sie dort weggelassen.
|
||
|
||
## Bauen und Testen
|
||
|
||
Mit dem Wrapper (empfohlen, keine Maven-Installation nötig) – unter Windows
|
||
`mvnw.cmd` statt `./mvnw`:
|
||
|
||
```bash
|
||
./mvnw clean test # alle Tests ausführen (233 Tests)
|
||
./mvnw clean package # baut beide JARs nach release/ (Console + GUI)
|
||
```
|
||
|
||
Ein systemweit installiertes `mvn` funktioniert identisch (`mvn clean test` …).
|
||
|
||
## Spielen
|
||
|
||
Über die im `pom.xml` konfigurierten Run-Profile des `exec-maven-plugin`:
|
||
|
||
```bash
|
||
./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](#schnellstart-ohne-maven)).
|
||
|
||
### 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/`](docs/README.md): Package-Struktur, Datenstrukturen, Item-Modell,
|
||
YAML-Schemas, Lade-Ablauf, Befehle und NPC-Modell.
|