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
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.