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
Ente passt. Lege fest, welchen
Datentyp ein entsprechendes Attribut haben muss.
Zeichne ein Klassendiagramm zur Klasse Ente mit dem neuen Attribut.
Aufgabe 2
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 findest du bei Bedarf in der Klasse Teich, da aktuell
dort die bisherige Randprüfung steht.
Hilfe: Größe des Spielfelds
In der Klasse Ente erhältst du die Breite und Höhe der Spielwelt
über world.width und world.height.
Das funktioniert, sobald die Ente mit addObject() in eine
Spielwelt aufgenommen wurde.
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.