Spiellogik
Noch fehlt das Spiel
Bisher laufen die Tiere nur herum. Zum richtigen Spiel fehlen noch zwei
Dinge: Ein angeklicktes Tier soll eingefangen werden und verschwinden, und
das Spiel soll enden, wenn kein Tier mehr da ist.
Für beides brauchst du Fallunterscheidungen,
wie du sie schon bei den Methoden der Klasse Tier verwendet
hast.
Den Code schreibst du diesmal weitgehend selbst - alle Bausteine, die du
dafür brauchst, findest du auf dieser Seite.
Baustein 1: isClicked
Ein Actor weiß selbst, ob er gerade angeklickt wird - dafür hat
er das geerbte Attribut isClicked.
Es hat den Wert true, wenn genau dieses Objekt in diesem Moment
angeklickt wurde, sonst false.
Baustein 2: this
Die Welt kann Objekte entfernen: world.removeObject(...)
entfernt das übergebene Objekt vom Spielfeld.
Dabei ist world ein geerbtes Attribut des Actors, in dem seine
Welt gespeichert ist.
Aber welches Objekt soll das Tier beim Anklicken übergeben - es soll ja
sich selbst entfernen?
Dafür gibt es in Kotlin das Schlüsselwort this:
Es bezeichnet immer das Objekt, dessen Code gerade ausgeführt wird.
Die Zeile world.removeObject(this) bedeutet also:
"Liebe Welt, entferne mich."
Aufgabe 1
act der Klasse Ausreisser so,
dass ein Tier vom Spielfeld verschwindet, sobald es angeklickt wird.
Teste dein Spiel: Du solltest jetzt alle drei Tiere einfangen können.
Hilfe zum Einfangen
Du brauchst eine Fallunterscheidung mit isClicked als Bedingung.
Da isClicked selbst schon true oder
false ist, kannst du es direkt als Bedingung verwenden -
ein Vergleich mit == ist nicht nötig.
Im Wenn-Fall steht dann die Zeile, mit der sich das Tier selbst entfernt.
Baustein 3: numberOfObjects und stop
Ob noch Tiere da sind, weiß die Welt: Ihr geerbtes Attribut
numberOfObjects enthält die Anzahl der Objekte, die gerade auf
dem Feld liegen.
Zum Anhalten des Spiels gibt es stop().
Beachte dabei: stop() ist keine Methode, sondern eine
Funktion aus BluePlayFunctions -
genau wie println gehört sie zu keiner Klasse.
Deshalb rufst du sie ohne Objekt und Punkt davor auf, von überall aus.
Aufgabe 2
act der Klasse Spielfeld um
das Spielende: Wenn kein Tier mehr auf dem Feld ist, soll die Anzahl der
gebrauchten Schritte auf dem Spielfeld erscheinen und das Spiel anhalten.
Hilfe zum Spielende
Die Bedingung der Fallunterscheidung vergleicht
numberOfObjects mit 0.
Im Wenn-Fall zeigst du die Schritte mit showText an - das hast
du auf der Seite Unterklasse von World schon gelöst - und rufst
danach stop() auf.
= weist einen Wert zu,
== vergleicht zwei Werte. In einer Bedingung brauchst du
==.
Aufgabe 3
Aufgabe 4
0 durch eine 1 ersetzt.
Probiere es anschließend aus.