Files
Jander_Semester2/Semesterprojekt/README.md
Jean-Luc Makiola f8f7eb90f0 build: add Maven wrapper and prebuilt release jar; ignore docs/superpowers
- Add ./mvnw wrapper (script-only) so the project builds/runs without a
  system Maven install.
- Add maven-shade-plugin producing a self-contained release/HauntedManor.jar
  (merges audio SPI services; no dependency-reduced-pom).
- Document running via ./mvnw and via the jar directly in the README.
- Ignore docs/superpowers/ (planning specs kept locally, untracked).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 09:51:04 +02:00

114 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/) liegt eine fertig gebaute, eigenständige JAR
(`HauntedManor.jar`) mit allen Abhängigkeiten. Sie braucht nur Java 25:
```bash
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`:
```bash
./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`:
```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.