Schatzssuche

Im Folgenden sollen Teile eines Spiels implementiert werden, in dem zwei Schatzsucher auf einem quadratischen Spielfeld, hier als „Welt“ bezeichnet, einen Schatz suchen. Die genauen Spielregeln für die Schatzsuche selbst sind für die folgenden Aufgaben nicht relevant, es geht lediglich darum, die Welt mit einem Schatz und den Suchern anzulegen und zu verwalten.

In der Implementierung besitzt die Klasse Welt ein zweidimensionales Array zur Speicherung des Spielfeldes. Das Attribut groesse gibt die Länge und Breite des Arrays an. Jedes Element des Arrays entspricht einem Feld der Welt. Der Eintrag null im Array steht für ein leeres Feld, andernfalls kann mit feld[i][j] die Figur in der i-ten Zeile und j-ten Spalte angesprochen werden. Eine Figur kann entweder ein Akteur oder ein Schatz sein.

Teil 1

(T1A1)

Übertrage die UML-Klassendiagramme – ohne die Attribute und die Methoden – auf dein Lösungsblatt und ergänze die Klassenbeziehungen, indem du die gerichteten Assoziationen und Vererbungen einzeichnest.

Anmerkung: Für die folgenden Programmieraufgaben dürfen Methoden, die im obigen UML-Klassendigramm aufgeführt sind, auch benutzt werden, sofern in der konkreten Aufgabenstellung nichts anderes gefordert wird. Die Programmieraufgaben sind – als Übung für die Abiturprüfung – auf Papier zu lösen.

(T1A2)

Implementiere die Klasse Position aus dem UML-Klassendiagramm.

(T1A3)

Implementieren Sie einen Konstruktor Spiel(weltGroesse: int) so, dass eine Welt der Größe weltGroesse mit zwei Schatzsuchern namens „Anton“ und „Berta“ und einem Schatz im Wert von 50EUR erzeugt wird. Die Schatzsucher und der Schatz sollen unter Verwendung der Methode figurZufaelligPlatzieren(figur: Figur) aus der Klasse Welt eine zufällige Startposition erhalten.

Hinweis: Sie dürfen davon ausgehen, dass die Methode figurZufaelligPlatzieren bereits implementiert ist.

(T1A4)

Implementiere Methode akteurNachLinks(akteur: Akteur): boolean der Klasse Welt so, dass ein Akteur in der Welt um ein Feld nach links verschoben wird, falls das entsprechend der Grenzen der Welt möglich ist und das Zielfeld nicht bereits von einer anderen Figur besetzt ist.

Die Methode soll true zurückgeben, falls die Verschiebung erfolgreich war, andernfalls false.

Die Information, wo sich eine Figur in der Welt befindet, ist an zwei Stellen gespeichert: Einerseits im Attribut position in der Klasse Figur, andererseits indirekt im Array feld der Klasse Welt.

(T1A5)

Beschreibe wie die Methode akteurNachLinks jeweils abgeändert werden müsste, wenn man auf das Attribut position in der Klasse Figur bzw. das Array feld in der Klasse Welt verzichten würde.