L4: Text Adventure - JirkaDellOro/Softwaredesign GitHub Wiki
Entwickeln Sie ein Text-Adventure (https://de.wikipedia.org/wiki/Adventure#Text-Adventures)
Die Spielerin soll ihren Avatar zwischen Räumen und Plätzen navigieren können, hierzu stehen ihr Befehle wie beispielsweise north(n), east(e), west(w), south(s)
zur Verfügung, die sie über die Konsole eingibt (in Klammern sind Vorschläge für Kürzel angegeben). Sofern in der angegebenen Richtung eine Verbindung zu einem anderen Raum existiert, wechselt der Avatar in jenen. Nach jeder Navigation wird eine kurze Beschreibung des aktuell umgebenden Raumes und eine Liste der darin befindlichen aufnehmbaren Gegenstände angezeigt. Durch Eingabe von z.B. look (l)
wird diese Ausgabe wiederholt. take(t) <item>
fügt den als angegebenen Gegenstand dem Inventar der Spielerin an und entfernt ihn aus dem Raum. Mit inventory(i)
wird die Liste der aufgenommenen Gegenstände angezeigt. Per drop(d) <item>
wird ein mit angegebener Gegenstand umgekehrt aus dem Inventar entfernt und in den Raum gelegt. An einem Ort abgelegte Gegenstände verbleiben dort und können auch nur dort wieder aufgenommen werden.
Die Abbildung zeigt ein solches Fenster nach der Eingabe von look
in einem beispielhaften Raum.
You are in a barely lit cavern. You See
a club
a torch
a potion
What would you like to do?: commands
commands(c), look(l), inventory(i), take(t) item, drop(d) item, quit(q)]
What would you like to do?: : invento
Die Spielerin ist gerade dabei das Wort inventory
einzugeben. Oben erscheint immer die Information zur letzten Aktion und ggf. die Liste der Gegenstände. Als Hilfestellung werden dem Nutzer nach Eingabe von command(c)
eine Liste der Interaktionsmöglichkeiten dargestellt. Die Eingabe von quit(q)
beendet das Programm.
Adventures leben von der Interaktion mit Charakteren in der Spielwelt. Integrieren Sie also Nicht-Spieler-Charaktere wie Monster oder virtuelle andere Abenteurer usw., die sich in ihrem Verhalten unterscheiden. Das Minimal-Verhalten ist die Generierung einer Selbstbeschreibung für look
und die Reaktion auf Angriffe durch die Spielerin mit beispielsweise attack(a) <character>
. Zu Letzterem verfügen die Charaktere über einen Gesundheitszustand, der durch Kampf beeinflusst wird und der sich bis zum Tod des Charakters verschlechtern kann. Intelligentere Charaktere haben ein eigenes Inventory, verfügen über Gegenstände und auch Informationen, die sie mit der Spielerin austauschen können und können eigenständig zwischen den Räumen und Plätzen navigieren. Hier ist Ihre Kreativität gefragt, sie können die Charaktere nach Belieben ausbauen. Entscheiden Sie auch selbst, wie sich die Charaktere im Spiel darstellen und entwerfen Sie zusätzliche Interaktionsmöglichkeiten.
-
Entwerfen Sie zunächst eine Karte von einem Adventure mit wenigen (etwa 5) Räumen, Plätzen, Gegenständen und Charakteren, um sich einen Überblick über die Anforderungen zu verschaffen.
-
Entwerfen Sie sinnvolle Use-Case-Diagramme.
-
Entwerfen Sie vollständige und syntaktisch korrekte Klassendiagramme für die unterschiedlichen Entitäten im Spiel. Identifizieren Sie sinnvolle Klassenhierarchien und planen Sie diese.
-
Entwerfen Sie umfangreiche und syntaktisch korrekte Aktivitätsdiagramme für die wichtigsten zu verwendenden Algorithmen.
-
Entwerfen Sie Strukturen für die Dateien, welche den Aufbau eines Adventures und dessen vollständigen Startzustand beschreiben.
Hinweise: Achten Sie darauf, dass Sie Daten und Algorithmen trennen. Das Adventure selbst wird ausschließlich durch die Beschreibungsdatei definiert, die zur Laufzeit hinzugeladen wird. Damit kann ein Gamedesigner leicht weitere Räume und Plätze, Gegenstände und Charaktere ins Spiel zu integrieren und dieses erweitern ohne dass Änderungen der Programmlogik erforderlich sind. Zur Implementation eines neuen, komplexen Charakterstyps darf nur die Notwendigkeit der Erweiterung einer Subklasse und der Logik zur Erzeugung von Instanzen derselben aufgrund der Daten in der Beschreibungsdatei bestehen. Achten Sie auch darauf, dass das Programm sinnvoll auf mehrere Code-Dokumente verteilt werden soll.
Setzen Sie das Programm syntaktisch korrekt Schritt für Schritt in TypeScript-Code um. Beachten Sie dabei die im Rahmen dieser Veranstaltung vermittelten Inhalte und unsere Code-Konventionen
Erweitern Sie ihre Konzeption um weitere Entitäten und versuchen Sie, eine Geschichte zu erzählen. Integrieren Sie dies dann in ihre Programmierung und prüfen Sie dadurch, ob sie richtig geplant haben und die Erweiterungen einfach zu implementieren sind. Refaktorieren Sie, sofern erforderlich. Gegebenenfalls können Sie auch die Logik erweitern, um beispielsweise Rätselmechaniken zu implementieren, wie das Öffnen von Schlössern mit den richtigen Schlüsseln. Ermöglichen Sie das Speichern des aktuellen Spielstandes und die Rekreation des Spiels in diesem Zustand mithilfe der Speicherdatei.