9.3 KiB
Enhancement-Ideen (Backlog)
Roh-Sammlung von Ausbau-Ideen über die Abgabe hinaus. Lebendes Dokument – noch kein Design, noch keine Festlegung. Wird in Teilprojekte zerlegt und nacheinander über den Brainstorming → Spec → Plan → Implementierung-Zyklus verfeinert.
Stand: 2026-05-31. Ausgangslage: Pflichtumfang ("bare minimum") erfüllt, alle Phasen 1–7 grün. Ziel: deutlich mehr Tiefe und Politur.
Leitziele
- Reichere Ausgabe statt nacktem Konsolentext – sowohl Konsole als auch GUI.
- GUI soll noch mehr bieten als die Konsole (mehr Raum für visuelle Mittel).
- ~60 Minuten Spielzeit anpeilen. Viel mehr Inhalt, viel mehr zu tun.
- Bestehendes NPC-System zu einem tieferen Quest-System ausbauen.
Themenblöcke
1. Reichere Präsentation / Ausgabe-Schicht ✅ umgesetzt (Branch feature/presentation-layer)
Umgesetzt: semantisches Modell (
io.text),ConsoleIO(ANSI + Box-Drawing, Color/Glyph-Modi),SwingIO(4 Regionen,JTextPane, gebündelter Font, HiDPI-Skalierung + ZoomStrg +/-/0), HUD pro Zug, Welcome-Banner. 79 Tests grün. Spec/Plan unterdocs/superpowers/. Karte/Menü/Save/Musik weiterhin offen.
- Weg vom reinen
write(String): formatierte Ausgabe (Überschriften, Trenner, Hervorhebungen für Items/NPCs/Richtungen). - Konsole: ANSI-Farben, Box-Drawing-Zeichen für Rahmen, evtl. ASCII-Art / Banner für Räume oder Spielstart.
- GUI (Swing): mehr als ein
JTextArea– Farben, Stile, evtl. Panels, Statusanzeige, Bilder/Icons.
Festgelegt (Zielbild Konsole): Stufe B als Baseline (Boxed Heading, gelabelte Sektionen, persistente HUD-Zeile: Ort · Gold · Zug · Licht), ASCII-Art nur für große Momente (Spielstart, Finale, Schlüsselräume). Semantische Farb-Rollen: Items / NPCs / Exits / Heading / Gefahr.
Designprinzipien:
- Nicht überladen / Progressive Disclosure – Raumeintritt zeigt nur das
Wesentliche (Ort, kurze Beschreibung, Auffälliges); Details auf Abruf
(
examine,look). - Info auf Regionen verteilen statt Text stapeln – die Karte ersetzt die
„Exits:"-Zeile. GUI: persistentes Map-Panel macht die Exit-Zeile überflüssig.
Konsole: kompakte Mini-Map (bei
mapbzw. knapp beim Raumeintritt).
2. Nerd Fonts / Glyphen – das Installationsproblem
- Nerd-Font-Glyphen (Icons) sehen gut aus, müssen aber auf dem System des Spielers installiert sein, sonst Tofu-Kästchen.
- Offene Frage: gute Lösung finden, damit es überall funktioniert.
- Erste Gedanken:
- GUI: Font ließe sich mitliefern (
.ttfin Resources, viaFont.createFontladen) → Installationsproblem entfällt für die GUI. - Konsole: Font nicht kontrollierbar → gestufte Fallbacks (reines ASCII → Unicode-Box-Drawing → Nerd-Glyphen) statt harter Annahme.
- GUI: Font ließe sich mitliefern (
3. Karte / Map ✅ umgesetzt (Branch feature/map)
Umgesetzt:
MapLayout(BFS-Gitter-Layout + Fog of War),MapView-Modell, GUI-MapPanel(Graphics2D, ersetzt die Exit-Liste), Konsolen-ASCII viaAsciiMap+map-Befehl, Besuchte-Räume-Tracking aufPlayer, Map-Push pro Zug. Item/NPC-Marker und Türen-Styling offen (Quest-Teilprojekt). Spec/Plan unterdocs/superpowers/.
- Übersichtskarte der Räume – in beiden Modi.
- Konsole: ASCII-Map. GUI: gezeichnete Map (Grid/Graph).
- Offene Fragen: nur bereits besuchte Räume zeigen? aktuelle Position markieren? fester Grundriss oder dynamisch aus den Exits berechnet?
4. Gameplay-Ausbau (Inhalt)
- Deutlich mehr Räume, Items, NPCs.
- Mehr zu tun: Rätsel, Mechaniken, Abhängigkeiten zwischen Objekten.
- Zielgröße: ~60 Min. Spielzeit (laut Annahme machbar, da überwiegend Text).
5. Quest-System (NPC-Ausbau)
✅ Fundament umgesetzt (Branch
feature/quest-foundation): World-Flags + Condition/Effect-Engine, verschlossene Exits, zustandsabhängige Beschreibungen, bedingte Dialoge, Reaktionen mit requires/effects, Schalter-Effekte. Demo: Generator schaltet Strom → Keller-Tür öffnet + Raum wird beleuchtet.✅ #3.2 umgesetzt (Branch
feature/quests): condition-driven Quests (Quest/QuestStage), QuestEngine mit Auto-Advance + Ansagen, START_QUEST-Effekt, Konsolen-Befehlquestsund GUI-Quest-Box unter der Karte. Demo-Questrestore_power. Offen: #3.3 Win-Condition/Enden sowie Licht/Dunkelheit & Item-Kombination.
- Aktuelles NPC-System: Begrüßung + Geschenk-Reaktion (Item → Item).
- Ausbau Richtung: mehrstufige Quests, Bedingungen, NPC-"Memory" (Zustand), Quest-Log, evtl. Win-Condition daran gekoppelt.
GUI-Layout (festgelegt): Quest-Log als dauerhaft sichtbare Box unterhalb der Karte im rechten Seitenbereich (Map oben, Quests darunter). Gehört zu Quest- Teilprojekt #2 (Quest-Log); das Fundament #1 reserviert/plant den Slot.
5b. Spielkern: zentraler Bogen + Mechanik-Spine
Leitidee (bestätigt): Bewusst kondensiert – wenige Mechaniken, die sich vielfach kombinieren, statt vieler Einzel-Gimmicks. Ein 60-Min-Spiel soll designt wirken, nicht gestreckt.
Hauptziel: Den Strom wieder anschalten (power_on). Der Weg dahin ist eine
Quest-Kette, die den Spieler Raum für Raum führt (Raum X freischalten → führt
zu Raum Y → … → Generator/Sicherungskasten). Das Hauptziel selbst ist das Ende
des Bogens; einzelne Teilziele schalten je den nächsten Bereich frei.
Mechanik-Spine (5 Bausteine, die sich kombinieren):
- World-Flags / Zustand – Rückgrat (
power_on,cellar_drained,ghost_banished). Beschreibungen, Exits und NPC-Reaktionen lesen/schreiben sie. - Verschlossene Exits & Schalter – Türen brauchen Schlüssel oder Flag; Hebel/Ventile setzen Flags und öffnen Bereiche.
- Licht & Dunkelheit – dunkle Räume brauchen eine brennende Lichtquelle, sonst keine Sicht auf Exits/Items (Atmosphäre, einfach umzusetzen).
- Item-Kombination – z.B.
match + candle → lit candle. Achtung: v1.0 hat bewusst arglosesuse Xohne Targets gewählt → Command-Grammatik muss erweitert werden (jetzt erlaubt, da über MVP hinaus). - Quest-Ketten + mehrere Enden – Teilziele referenzieren Flags; Kette abschließen = Win; welche Flags gesetzt sind, entscheidet das Ende.
Beispiel-Puzzle (zeigt das Stapeln): Strom wiederherstellen – Sicherung im
gefluteten Keller; erst Ventil → cellar_drained; Sicherung einsetzen → Schalter
→ power_on → oberes Stockwerk/Tür öffnet sich. Ein Puzzle, drei Mechaniken,
schaltet einen ganzen Flügel frei.
Weitere Puzzle-Ideen im Backlog (optional, nach Bedarf): Zahlenschloss mit
Code aus Lore, Caesar-Chiffre-Brief (decode), Geist bannen (Reliquien-Fetch),
Melodie-/Sequenz-Rätsel, dunkler Gang. Resource-Meter (Sanity/Öl) offen –
vorerst puzzle-fokussiert ohne Survival-Druck.
6. Hauptmenü & Settings
- Hauptmenü vor der Spielschleife: Neues Spiel, Spiel laden, Einstellungen, Beenden.
- Spielstände-Liste: gespeicherte Spiele mit Metadaten (Name, Raum, Zugzahl, Zeitstempel) anzeigen und hineinladen.
- Settings-Untermenü: z.B. Farben an/aus, Typewriter-Tempo, Musik-Lautstärke an/aus, ASCII vs. Unicode.
- Sollte in beiden Modi funktionieren: Konsole = nummeriertes Textmenü, GUI = Buttons/Liste. Architektur: Menü-Schicht oberhalb des Game-Loops.
7. Speichern / Laden
- Spielstand serialisieren (Player-Zustand, Inventar, World-Flags, besuchte Räume, Quest-Fortschritt) – Format z.B. YAML/JSON.
- Mehrere Speicherstände, benennbar; Anbindung an die Spielstände-Liste im Menü.
8. Musik (GUI)
- Hintergrundmusik nur in der GUI.
- Pro Raum definierbar via YAML: in
rooms.yamlein optionales Feld (z.B.music: <dateiname>), Dateien in einem Ordner. - Dateigröße ist ein Thema → Lösungsrichtung:
- Audiodateien nicht in JAR/Repo bündeln, sondern externer
music/-Ordner; Audio ggf. via.gitignoreausschließen + dokumentieren, wo Dateien hinkommen. - Komprimierte Formate (OGG/MP3) statt WAV, gestreamt statt komplett geladen.
- Bibliothek erlaubt → kleinen Audio-Decoder einbinden (Java
javax.soundkann OGG/MP3 nicht nativ). - Loop pro Track, sanfter Wechsel beim Raumwechsel, graceful fallback bei fehlender Datei, Lautstärke aus den Settings.
- Architektur:
MusicPlayer-Komponente hinter Interface; Konsole = No-Op.
- Audiodateien nicht in JAR/Repo bündeln, sondern externer
Festgelegte Erweiterungs-Entscheidungen
| Entscheidung | Wert |
|---|---|
Eigene uebung-Datenstrukturen verwenden? |
Nein – Standard-Collections (vom Prof bestätigt) |
| Algorithmen-Showcase | weiterhin willkommen, aber mit Standard-Datenstrukturen (z.B. BFS go to <raum>, Trie-Autocomplete) |
| Bibliotheken erlaubt? | Ja (Pflichtteil war bewusst ohne; Erweiterung darf welche nutzen) |
| Hauptmenü | ja: Neues Spiel / Laden / Settings / Beenden |
| Speichern/Laden | ja, mehrere benannte Spielstände |
| Musik | ja, nur GUI, pro Raum via YAML, externer Ordner, komprimiert + gestreamt |
Offene Designfragen (zu klären)
- Wie weit darf die
GameIO-Abstraktion aufgebohrt werden, ohne dass Konsole und GUI auseinanderlaufen? (Gemeinsamer Loop ist ein Kernwert der Architektur.) - Bleibt alles datengetrieben (YAML), auch Quests und Map-Layout?
- Reihenfolge / Abhängigkeiten der Teilprojekte.
Notiz: Datengetriebenheit (YAML), getrennte DTO/Domain-Schicht und ein für beide Frontends identischer Game-Loop sind etablierte Architekturwerte – neue Features sollten sie respektieren, nicht umgehen.