Die Klasse Held
Eine Klasse Held hatten wir ja schon am Ende der Folge 7.2 in der letzten Übung implementiert, wenn Sie sich erinnern. Der Held verfügt über bestimmte Eigenschaften:
Inventar rucksack; String name; int angriff, verteidigung, leben;
Der Rucksack war auch schon mit Gegenständen gefüllt:
rucksack.hinzufuegen(new Gegenstand(3,"Helm",0,13,230)); rucksack.hinzufuegen(new Gegenstand(3,"Stiefel",4,10,177)); rucksack.hinzufuegen(new Gegenstand(3,"Knieschutz",4,50,120)); rucksack.hinzufuegen(new Gegenstand(1,"Schwert",40,3,1234)); rucksack.hinzufuegen(new Gegenstand(1,"Messer",20,1,12)); rucksack.hinzufuegen(new Gegenstand(2,"Stahlschild",1,60,140));
Und eine Methode zum Anzeigen hatten wir auch schon implementiert, bzw. haben Sie implementiert, wenn Sie die letzte Aufgabe erfolgreich gelöst haben.
Der Held kämpft
Ein Held in einem Adventure-Game muss natürlich auch gelegentlich kämpfen, und bei solchen Kämpfen kann der Held verletzt werden, und auch seine Gegenstände können beschädigt werden. Wie könnte man eine solche Beschädigung von Gegenständen in das Projekt einarbeiten?
Gegenstände werden beschädigt
In den meisten Adventure-Games haben die Gegenstände ein Attribut, das den Zustand des Objektes angibt. Ein völlig intakter Gegenstand hat dann beispielsweise den Zustandswert 100, was man natürlich als 100 Prozent lesen kann. Bei einer Beschädigung kann dieser Zustandswert dann abgesenkt werden, zum Beispiel auf 50, wenn der Gegenstand zur Hälfte beschädigt wurde.
Übung 7.4-1 (1 Punkt)
Ergänzen Sie die Klasse Gegenstand um ein Attribut zustand, welches genau diese Aufgabe erfüllt. Ein neu erzeugter Gegenstand hat automatisch den Zustand 100, weil er ja fabrikneu ist.
Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu
Angenommen, der Gegenstand hat folgende Werte:
typ = 1; name = "furchtbarer Hammer des Zorns"; angriffswert = 500; verteidigungswert = 150; goldwert = 2600; zustand = 100;
Der Held kämpft nun und - egal ober er siegt oder verliert - seine Gegenstände werden um 20% beschädigt.
Alternative 1
Dann müssen die Gegenstands-Werte nach dem Kampf folgendermaßen aussehen:
typ = 1; name = "furchtbarer Hammer des Zorns"; angriffswert = 400; verteidigungswert = 120; goldwert = 2080; zustand = 80;
Der Zustand ist also auf 80 zurückgegangen, und die anderen Werte sind ebenfalls auf 80% reduziert worden. Der Typ und der Name des Gegenstandes werden natürlich nicht verändert.
Alternative 2
Eine alternative, vielleicht sogar bessere Handhabung einer Beschädigung könnte so aussehen, dass nur der Zustand des Gegenstandes auf 80 abgesenkt wird, die anderen Werte werden nicht verändert. Bei einem Kampf oder einer anderen Handlung des Helden werden dann die urrsprünglichen und unveränderten Werte ausgelesen, beispielsweise der Angriffswert 500, und dann mit dem Zustandswert 80 verrechnet, um die "echten" bzw. "aktuellen" Werte zu finden, für den Angriffswert also dann 400: Aktueller Wert = Ursprünglicher Wert * Zustand / 100.
Übung 7.4-2 (3 Punkte)
Ergänzen Sie die Klasse Gegenstand um eine Methode
public void beschaedige(int prozent)
welche den Gegenstand um die angegebene Prozentzahl beschädigt. Wählen Sie dazu eine der beiden oben besprochenen Möglichkeiten.
Wenn es notwendig ist, können Sie dabei auch gern den Datentyp der Gegenstands-Attribute von int nach double ändern, vielleicht sind dann die Berechnungen der aktuellen Werte genauer.
Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu
Kleiner Tipp von mir: Ich würde die alternative Methode bevorzugen, weil dann nicht bei jeder Beschädigung alle Attributwerte neu berechnet werden müssen, sondern nur der Zustand des Gegenstandes. Eine Berechnung der Attributwerte ist nur dann notwendig, wenn die Attribute tatsächlich für irgendeine Handlung benötigt werden.
Übung 7.4-3 (3 Punkte)
Ergänzen Sie die Klasse Gegenstand die sondierenden Methoden
- public double getAngriffswert()
- public double getVerteidigungswert()
- public double getGoldwert()
- public double getZustand()
welche die aktuellen Werte - unter Berücksichtigung des Zustandes - zurückliefern. Jenachdem welche Alternative Sie bei Übung 2 gewählt haben, müssen Sie hier auch unterschiedlich vorgehen.
Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu
Das Inventar wird beschädigt
Nun wollen wir den Helden kämpfen lassen, er gewinnt den Kampf zwar, aber sein gesamtes Inventar wird beschädigt.
Übung 7.4-4 (2 Punkte)
Ergänzen Sie die Klasse Inventar um eine Methode
public void beschaedige(int prozent)
welche alle Gegenstände des Inventars um die angegebene Prozentzahl beschädigt.
Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu
Auch der Held leidet
Nicht nur das Inventar des Helden wird beschädigt, sondern auch seine veränderbaren Werte sinken entsprechend, also sein Angriffs- und Verteidigungswert sowie seine Lebenspunkte.
Übung 7.4-5 (3 Punkte)
Ergänzen Sie die Klasse Held um eine Methode
public void beschaedige(int prozent)
welche alle Gegenstände des Rucksacks sowie die veränderbaren Attribute des Helden (zum Beispiel seinen Angriffswert) um die angegebene Prozentzahl beschädigt.
Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu