5.2 Übung: Kleine Fische, große Fische
Im folgenden Projekt steuert der Spieler einen Räuberfisch, der Beutefische fangen muss. Das Projekt ist bis auf die Darstellung also sehr ähnlich zu dem Projekt Bälle fangen. Im Prototypen ist bereits vieles implementiert – es müssen nur die Objektbeziehungen hinzugefügt werden. Dies soll schrittweise erfolgen.

Die Objektbeziehung Beutefisch -> derRaeuber
Das UML-Diagramm zum Prototypen sieht so aus:

Um in der Klasse BeuteFisch eine Referenz zum Räuber (ein Objekt der Klasse SGBild) herstellen zu können, muss ein Attribut kenntRaeuber vom Datentyp SGBild ergänzt werden. Zusätzlich muss eine Methode lerneRaeuberKennen implementiert werden, die eine setze-Methode zu diesem Attribut ist. Das geänderte UML-Diagramm sieht so aus (die Änderungen sind blau markiert):

Abschließend muss in der Klasse Anwendung
bei der Erstellung der BeuteFisch-Objekte noch die lerneRaeuberKennen
-Methode für jeden Beutefisch aufgerufen und als Parameter der Räuber übergeben werden.
Jetzt kann in der Methode bewege der Klasse BeuteFisch auch die Kollisionsabfrage implementiert werden: Wenn das Objekt bild
mit dem Objekt kenntRaeuber
kollidiert, soll bild
auf nicht sichtbar gesetzt werden.
Die Objektbeziehung Beutefisch -> meineWelt
In dem Projekt soll eine weitere Objektbeziehung umgesetzt werden: Bisher hängt die Position und Bewegung der Beutefische von den Attributen breite und hoehe ab. Diese werden im Beutefisch auf statische Werte gesetzt. Im nächsten Schritt sollen diese beiden Attribute entfernt werden. Stattdessen soll eine Objektbeziehung zum SGLeinwand
-Objekt meineWelt
der Klasse Anwendung
hergestellt werden.
Dafür muss wieder ein zusätzliches Attribut in der Klasse Beutefisch
vom Datentyp SGLeinwand
erstellt werden. Um die Referenz auf das Objekt meineWelt
zu setzen, soll in diesem Fall der Konstruktor verändert und das Objekt meineWelt
als Parameter übergeben werden. Dies wird im Konstruktor dann im neu erstellten Attribut gespeichert.

An den Stellen, wo bisher die Attribute hoehe
und breite
abgefragt wurden, müssen nun mit kenntLW.gibBreite()
und kenntLW.gibHoehe()
die Abmessungen des SGLeinwand-Objekts genutzt werden. Abschließend muss noch der Aufruf des Konstruktors für die BeuteFisch
-Objekte in der Klasse Anwendung
geändert werden.