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

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

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.

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

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.

Mehr Hilfe zum Spielende

Ergänze die Lücken und ordne die Zeilen.

if (numberOfObjects §§==§§ §§0§§) {
    showText("Schritte: §§$schritte§§", 100, 50)
    stop()
}
Beachte den Unterschied: = weist einen Wert zu, == vergleicht zwei Werte. In einer Bedingung ist == erforderlich.

Aufgabe 3

Spiele eine Runde. Wie viele Schritte brauchst du?

Suche

v
100.123.2.2.6 Spiellogik
Kopieren durch Anklicken

Rückmeldung geben