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

Sicherer Bereich

Wer kennt den sicheren Bereich?

Der braune Streifen am Spielfeldrand stellt das gefährliche Ufer dar. Er ist 40 Pixel breit. Für die Prüfung zählt die Position der Ente, also ihr Mittelpunkt. Sobald dieser den Uferstreifen erreicht, endet das Spiel.

Bisher prüft die Klasse Teich selbst, ob eine Ente den sicheren Bereich verlassen hat:

if (ente.x <= 40 || ente.x >= width - 40 ||
    ente.y <= 40 || ente.y >= height - 40) {
    showText("Eine Ente ist am Ufer in Gefahr!", 240, 250)
    stop()
}

Damit muss die Spielwelt die genaue Lage der Grenzen und die Position der Ente auswerten. Sinnvoller wäre es, wenn jede Ente selbst überprüfen würde, ob sie sich noch im sicheren Bereich befindet. Sie könnte dazu ein Attribut imSicherenBereich besitzen, das beim Lesen überprüft, ob die Ente noch im sicheren Bereich ist.

Aufgabe 1

Begründe, warum die Entscheidung, ob sich eine Ente im sicheren Bereich befindet, gut zur Klasse Ente passt. Lege fest, welchen Datentyp ein entsprechendes Attribut haben muss. Zeichne ein Klassendiagramm zur Klasse Ente mit dem neuen Attribut.

Aufgabe 2

Ergänze in der Klasse Ente das abgeleitete Attribut imSicherenBereich. Sein Getter soll genau dann true zurückgeben, wenn der Mittelpunkt der Ente mehr als 40 Pixel von jedem der vier Spielfeldränder entfernt ist. Verknüpfe die vier notwendigen Vergleiche mit logischen Operatoren.
Hilfe

Der Getter gehört zur Klasse Ente, und Ente ist eine Unterklasse von Actor. Deshalb kannst du die Position der Ente direkt mit x und y abfragen. Die Breite und Höhe gehören dagegen zur Spielwelt. Greife auf sie über das Attribut world der Ente zu.

Mehr Hilfe

Ziehe die passenden Zugriffe und Attribute in die Lücken.

val imSicherenBereich: Boolean
    get() {
        return (
            §§x::baustein§§ > 40 §§gruppe=rand
            &&
            §§x::baustein§§ < §§world.::baustein§§§§width::baustein§§ - 40 §§gruppe=rand
            &&
            §§y::baustein§§ > 40 §§gruppe=rand
            &&
            §§y::baustein§§ < §§world.::baustein§§§§height::baustein§§ - 40 §§gruppe=rand
        )
    }

Aufgabe 3

Lösche die bisherige Randprüfung in Teich. Du findest die Prüfung in der Methode act() der Klasse Teich im unteren Bereich.

Ergänze stattdessen in der Methode act() der Klasse Ente eine Prüfung, die das Spiel beendet, sobald die Ente nicht imSicherenBereich ist.

Suche

v
100.123.3.2.3 Sicherer Bereich
Kopieren durch Anklicken

Rückmeldung geben