Spiellogik
Spielelogik ergänzen
Damit man das Spiel in einer ersten Version spielen kann, fehlen noch zwei Dinge: Ein angeklicktes Tier soll verschwinden, und das Spiel soll enden, wenn kein Tier mehr da ist. Für beides werden Fallunterscheidungen verwendet.
Auf Mausklick reagieren
Ein Ausreisser weiß selbst, ob er gerade angeklickt wird - dafür hat
er das von Actor geerbte Attribut isClicked.
Es hat den Wert true, wenn genau dieses Objekt in diesem Moment
angeklickt wird, sonst false.
Wenn ein Tier angeklickt wird, soll es vom Spielfeld verschwinden.
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.
Mehr Hilfe zum Einfangen
Ergänze die entscheidenden Stellen der Fallunterscheidung und kopiere den
fertigen Code anschließend in die Methode act des Ausreißers.
if (§§isClicked§§) {
world.§§removeObject§§(§§this§§)
}
Das Spiel beenden
Ob noch Tiere da sind, weiß das Spielfeld:
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 wird sie ohne Objekt und Punkt davor aufgerufen, 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.
Mehr Hilfe zum Spielende
Ergänze die Lücken und ordne die Zeilen.
if (numberOfObjects §§==§§ §§0§§) {
showText("Schritte: §§$schritte§§", 100, 50)
stop()
}
= weist einen Wert zu,
== vergleicht zwei Werte. In einer Bedingung ist
== erforderlich.