Files
Jander_Semester2/Semesterprojekt
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
..

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.