Files
Jander_Semester2/Semesterprojekt
Jean-Luc Makiola aa802582ec feat(io): bundle background music as classpath resources
Switch OggMusicBackend from streaming an external, git-ignored music/ folder
(relative to the run directory) to streaming bundled classpath resources under
/music/, so the four manor tracks ship inside the JAR and play out of the box —
consistent with how fonts are bundled. The play loop reopens the resource each
iteration via a BufferedInputStream (the vorbisspi SPI needs mark/reset to read
the OGG header). Missing tracks still fall back to silence.

Add the four converted OGG Vorbis tracks (manor-theme/cellar-drone/musicbox/
lament) under src/main/resources/music/, un-ignore that path, and re-anchor the
gitignore so only the top-level MP3 source folder stays ignored. Update
docs/music.md for the bundled approach and conversion recipes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 09:21:11 +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.