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) <noreply@anthropic.com>
This commit is contained in:
2
Semesterprojekt/.gitignore
vendored
2
Semesterprojekt/.gitignore
vendored
@@ -36,4 +36,4 @@ build/
|
|||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
### Mac OS ###
|
### Mac OS ###
|
||||||
.DS_Store
|
.DS_Store.superpowers/
|
||||||
|
|||||||
93
Semesterprojekt/README.md
Normal file
93
Semesterprojekt/README.md
Normal file
@@ -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 <richtung>` | `move`, `walk` | In eine Himmelsrichtung gehen |
|
||||||
|
| `look` | `l` | Aktuellen Raum beschreiben |
|
||||||
|
| `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.
|
||||||
@@ -97,6 +97,28 @@
|
|||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>3.5.2</version>
|
<version>3.5.2</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>exec-maven-plugin</artifactId>
|
||||||
|
<version>3.5.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>run</id>
|
||||||
|
<configuration>
|
||||||
|
<mainClass>thb.jeanluc.adventure.App</mainClass>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>gui</id>
|
||||||
|
<configuration>
|
||||||
|
<mainClass>thb.jeanluc.adventure.AppGui</mainClass>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<mainClass>thb.jeanluc.adventure.App</mainClass>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
exits:
|
exits:
|
||||||
north: hallway
|
north: hallway
|
||||||
east: cellar
|
east: cellar
|
||||||
|
south: dungeon
|
||||||
items: [letter, lamp]
|
items: [letter, lamp]
|
||||||
npcs: [old_man]
|
npcs: [old_man]
|
||||||
|
|
||||||
@@ -39,3 +40,12 @@
|
|||||||
west: kitchen
|
west: kitchen
|
||||||
items: []
|
items: []
|
||||||
npcs: []
|
npcs: []
|
||||||
|
|
||||||
|
- id: dungeon
|
||||||
|
name: Dungeon
|
||||||
|
description: |
|
||||||
|
A dark, damp room.
|
||||||
|
exits:
|
||||||
|
north: kitchen
|
||||||
|
items: []
|
||||||
|
npcs: []
|
||||||
|
|||||||
Reference in New Issue
Block a user