Z#Textadventure2 - JirkaDellOro/Softwaredesign GitHub Wiki
10.0 Das charaktervolle Abenteuer Adventures leben von der Interaktion mit Charakteren in der Spielwelt. Leiten Sie von der nebenstehenden Klasse „Character“ Subklassen ab, welche ganz verschiedene Arten von Charakteren beschreiben (z.B. Tiere, Monster, Menschen etc.), die sich in ihrem Verhalten unterscheiden. Dieses Verhalten ist hier reduziert auf die Reaktion auf einen Angriff durch den Spieler und die dabei und bei der Selbstbeschreibung zu generierende Zeichenkette für die Ausgabe. Verteilen Sie Objekte dieser Subklassen in den Räumen, damit der Spieler mit diesen interagieren kann. Die Interaktion ist ebenso reduziert auf die Anzeige der Selbstbeschreibung des Charakters beim Kommando „look“ und die Anzeige der Reaktion beim Kommando „hit“. 10.0.1 Konzeption Untersuchen Sie den nebenstehenden Code der Superklasse. Konzipieren Sie dann Ihre Subklassen und deren abweichendes Verhalten. Zeichnen Sie ein entsprechendes Klassendiagramm. 10.0.2 Produktion Integrieren Sie zunächst die nebenstehende Klasse „Character“. Zur Nutzung der Klasse (und der Subklassen) muss lediglich das Interface „Location“ um die Eigenschaft „character“ vom Typ „Character“ erweitert werden. Zur Platzierung eines Charakters wird dann einfach dieser Eigenschaft bei der Definition des Raumes eine neue Instanz einer Subklasse zugewiesen. Soll sich kein Charakter im Raum befinden, wird der Wert „null“ zugewiesen. null ist ein reserviertes Wort und ein gültiger Wert für Objektreferenzen. Er gibt an, dass kein Objekt referenziert wird. Erweitern Sie dann den look-case in Ihrem Hauptprogramm gemäß nebenstehender Vorlage, so dass die Selbstbeschreibung des Charakters in die Szenenbeschreibung integriert wird. Definieren Sie dann analog einen hit-case, mit welchem die Reaktion des Charakters provoziert und seine Antwort ausgegeben wird. Implementieren Sie dann Ihre Subklassen und deren Instanzen! export class Character { name: string; health: number; strength: number;
constructor(_name: string, _strength: number) {
this.name = _name;
this.health = 100;
this.strength = _strength;
}
getDescription(): string {
return this.name +
", a default-character, shouldn't be here...";
}
reactToHit(_damage: number): string {
this.health -= _damage;
if (this.isAlive())
return this.name +
" yells: \"Please don't hit me, my health dropped to " + this.health + "\"";
else
return "Aaargh!";
}
isAlive(): boolean {
return this.health > 0;
}
}
Erweiterung des Kommandos „look“ im Hauptprogramm: if (currentLocation.character != null) { if (currentLocation.character.isAlive()) output += "You notice somebody: " + currentLocation.character.getDescription() + "\n"; else output += "There is a dead body on the ground...\n"; }