Prof. Dr. Franz Schweiggert und Dr. Johannes Mayer Abt. Angewandte Informationsverarbeitung 12. Mai 2006
Ralph Guderlei Blatt 3


Uni Logo



Software Engineering Praxis (SS 2006)


Abgabetermin: 19. Mai 2006

1 Schiffe versenken! (10 Punkte)

Gegenstand der Aufgabe ist es, das Spiel ''Schiffe versenken'' in Java umzusetzen. Das Spiel soll auf der Kommandozeile gespielt werden können. Der Einfachheit halber soll das Spiel alleine gegen einen Computer-Gegner spielbar sein. Der Computer-Gegner platziert die Schiffe auf dem Spielfeld und wertet die Eingaben des Spielers aus. Die Java-Klasse Console stellt dafür die Methode readInt() zur Verfügung. Die Klasse befindet sich bei den Beispielen zu den Übungen. Ein Beispiel-Spiel steht ebenfalls zur Verfügung und kann für die Lösung der Aufgabe verwendet werden.

Ihre Aufgabe ist es, ist das Spielfeld zu implementieren. Die Funktionalität der Spielfeldklasse sind im Interface Field vorgegeben. In diesem Interface sind folgende Methoden definiert:

Die Parameter und die Beschreibung der Parameter befindet sich im Interface. Bei den Funktionen placeShip() und placeBomb() soll überprüft werden, ob das Schiff bzw. die Bombe tatsächlich auf dem Spielfeld platziert werden können. Falls das nicht der Fall ist, soll eine Exception geworfen werden. Beim Platzieren der Schiffe soll zusätzlich darauf geachtet werden, dass sich kein anderes Schiff schon an der selben Stelle befindet. Auch in diesem Fall soll eine Exception geworfen werden.

Das eigentliche Spielfeld ist ein in der Spielfeld-Klasse gekapseltes zweidimensionales Array beliebiger Höhe und Breite. Die Höhe und Breite des Spielfeldes soll der Spielfeld-Klasse als Konstruktor-Parameter übergeben werden. Die Elemente des Arrays sind Objekte zweier unterschiedlicher Klassen, ''Wasser'' oder ''Schiff''. Ein Schiff mit Länge > 1 belegt natürlich mehrere Elemente des Spielfelds. Überlegen Sie sich eine geeignete Objektstruktur die es ermöglicht, diese beiden Typen in einem Array zu speichern.

Die Klassen ''Wasser'' und ''Schiff'' sollen ebenfalls eine toString()-Methode enthalten, die für die Darstellung des Spielfeld-Elements durch das Spielfeld zuständig ist. Ausserdem sollen die Spielfeld-Elemente speichern, ob sie bereits von einer Bombe getroffen wurden.

Viel Erfolg!



Ralph Guderlei 2006-05-12