s n h m r u

Minimallogo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

s n h m r u
i

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

Ergänze die Methode 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

Ergänze die Methode 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.

Beachte den Unterschied: = weist einen Wert zu, == vergleicht zwei Werte. In einer Bedingung brauchst du ==.

Aufgabe 3

Spiele eine Runde. Wie viele Schritte brauchst du?

Aufgabe 4

Sage voraus, was passiert, wenn du in der Bedingung für das Spielende die 0 durch eine 1 ersetzt. Probiere es anschließend aus.

Suche

v
100.123.2.2.6 Spiellogik
Kopieren durch Anklicken

Rückmeldung geben