From 32255994129f72dd23ae99230990443cb15d6c47 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Sun, 31 May 2026 19:39:42 +0200 Subject: [PATCH] semesterprojekt: finalize 1.0 deliverable (run profiles, dungeon room, README) - pom.xml: exec-maven-plugin run profiles (@run console, @gui Swing) - rooms.yaml: add dungeon room reachable south of the kitchen - README.md: project overview, build/run/play instructions - .gitignore: ignore brainstorming companion dir (.superpowers/) Co-Authored-By: Claude Opus 4.8 (1M context) --- Semesterprojekt/.gitignore | 2 +- Semesterprojekt/README.md | 93 +++++++++++++++++++ Semesterprojekt/pom.xml | 22 +++++ .../src/main/resources/world/rooms.yaml | 10 ++ 4 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 Semesterprojekt/README.md diff --git a/Semesterprojekt/.gitignore b/Semesterprojekt/.gitignore index 480bdf5..a110e81 100644 --- a/Semesterprojekt/.gitignore +++ b/Semesterprojekt/.gitignore @@ -36,4 +36,4 @@ build/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store.superpowers/ diff --git a/Semesterprojekt/README.md b/Semesterprojekt/README.md new file mode 100644 index 0000000..9125ad6 --- /dev/null +++ b/Semesterprojekt/README.md @@ -0,0 +1,93 @@ +# 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 + +```bash +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`: + +```bash +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 ` | `move`, `walk` | In eine Himmelsrichtung gehen | +| `look` | `l` | Aktuellen Raum beschreiben | +| `inventory` | `inv`, `i` | Inventar anzeigen | +| `take ` | `pick`, `get` | Gegenstand aufnehmen | +| `drop ` | `put` | Gegenstand ablegen | +| `use ` | | Gegenstand benutzen / schalten | +| `read ` | | Lesbaren Gegenstand lesen | +| `examine ` | `x`, `inspect` | Gegenstand genauer ansehen | +| `talk ` | `speak` | Mit einem NPC sprechen | +| `give ` | | 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. diff --git a/Semesterprojekt/pom.xml b/Semesterprojekt/pom.xml index f449b36..4e2dfd8 100644 --- a/Semesterprojekt/pom.xml +++ b/Semesterprojekt/pom.xml @@ -97,6 +97,28 @@ maven-surefire-plugin 3.5.2 + + org.codehaus.mojo + exec-maven-plugin + 3.5.0 + + + run + + thb.jeanluc.adventure.App + + + + gui + + thb.jeanluc.adventure.AppGui + + + + + thb.jeanluc.adventure.App + + diff --git a/Semesterprojekt/src/main/resources/world/rooms.yaml b/Semesterprojekt/src/main/resources/world/rooms.yaml index 8dccb7d..4521903 100644 --- a/Semesterprojekt/src/main/resources/world/rooms.yaml +++ b/Semesterprojekt/src/main/resources/world/rooms.yaml @@ -6,6 +6,7 @@ exits: north: hallway east: cellar + south: dungeon items: [letter, lamp] npcs: [old_man] @@ -39,3 +40,12 @@ west: kitchen items: [] npcs: [] + +- id: dungeon + name: Dungeon + description: | + A dark, damp room. + exits: + north: kitchen + items: [] + npcs: []