Z#Textadventure1 - JirkaDellOro/Softwaredesign GitHub Wiki

8.0 Das große Abenteuer...! Assoziative Arrays und Interfaces eröffnen die Möglichkeit, komplexe Informationen sicher und gut zu strukturieren. Damit können Sie ihr einfaches Text-Adventure leicht auf mehrere Orte erweitern. Der nebenstehende Code zeigt bereits die hierfür erforderlichen Strukturen. Es sind dabei aber bislang nur zwei Orte „Hall“ und „Kitchen“ definiert. Untersuchen Sie zunächst intensiv diesen Code und durchdringen Sie ihn. Er ist so angelegt, dass er zusammen mit einem Hauptprogramm in einem Namespace (hier „AdventureBig“), aber in einer eigenen Datei verortet ist. Um die Strukturen dateiübergreifend im Hauptprogramm verfügbar zu machen, sind sie mit dem Schlüsselwort „export“ markiert. Das Hauptprogramm kann dann beispielsweise mit folgender Zeile beginnen: var currentLocation: Location = locations["Hall"];

8.0.1 Konzeption Planen Sie die Veränderungen an Ihrem Textadventure die erforderlich sind, um mit diesen Strukturen die Navigation durch mehrere Orte zu ermöglichen. Dem Nutzer sollen hierfür zusätzlich die Kommandos „north, east, west, south“ zur Verfügung stehen, mit denen er die angegebenen Verbindungen nutzen kann. An einem Ort abgelegte Gegenstände verbleiben dort und können auch nur dort wieder aufgenommen werden. Je nachdem wie geschickt Aufgabe 5.0 gelöst wurde, sind nur wenige Zeilen zu ändern und zu ergänzen oder es ist ein umfangreiches Redesign zu bewerkstelligen. Konzipieren Sie zudem die Erweiterung Ihres Codes und der Interfaces derart, dass jeder Ort die Anzahl der Besuche speichert und diese beim Betreten durch den Nutzer in der Konsole ausgegeben wird. Sofern Sie bislang Zeilenumbrüche in den Spieldaten untergebracht haben, konzipieren Sie zudem deren Eliminierung dort und die Behandlung derselben im darstellenden Code. 8.0.2 Implementation Kopieren Sie den nebenstehenden und ihren alten Code in einen neuen Ordner in zwei getrennte Dateien. Achten Sie auf die Reihenfolge der Einbindung in der HTML-Datei. Beginnen Sie dann mit der Umsetzung des Konzeptes. Wenn die zwei Orte voll begehbar und funktional sind, verändern Sie diese entsprechend der Geschichte, die Sie erzählen möchten, und ergänzen Sie wenigstens drei weitere Orte. Dabei darf es nicht mehr notwendig sein, dass Hauptprogramm zu verändern.

namespace AdventureBig {

export var locations: Locations = {};

export interface Locations {
    [id: string]: Location;
};

export interface Location {
    description: string;
    items: string[];
    connections: Connections;
}

export interface Connections {
    [direction: string]: string;
}

locations["Hall"] = {
    description: "You are in a big entrance hall with doors 					leading to the west, north and east.",
    items: ["small bell", "helmet", "sword"],
    connections: { "west": "Kitchen", "north": "Garden", 					"east": "Office" }
};

locations["Kitchen"] = {
    description: "You are in a rustic and somewhat filthy 					kitchen. There's a door to the east",
    items: ["knife", "bottle of wine"],
    connections: { "east": "Hall" },
};

}