Files
Jander_Semester2/Semesterprojekt
Jean-Luc Makiola 4604952f63 feat(app): main-menu shell loop wiring; gitignore saves/
Replace App.run with a main-menu shell (New Game / Load / Settings /
Quit) above the game loop, wire SaveCommand + MenuCommand into the
registry with an autosave callback, and remove the now-unused
QuitCommand. Migrate GameTest from QuitCommand to MenuCommand.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 15:17:46 +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+

Bauen und Testen

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:

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 <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.