Skip to content

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.

fische

Die Objektbeziehung Beutefisch -> derRaeuber

Das UML-Diagramm zum Prototypen sieht so aus:

uml_fische_start

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):

uml_fische_zwischenschritt

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.

uml_fische_ende

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.