ÜBUNG „Schach 1“

Werbung
ÜBUNG „Schach 1“
Aufgaben
Klasse Schach mit der inneren Klasse Feld
Schreiben Sie eine Klasse Schach mit einer privaten statischen inneren Klassen Feld.
Feld soll int- Attribute zeile, spalte und farbe bestitzen. Eine Schach-Instanz besitzt 8x8
Felder, abwechseln Schwarz (= 0) und Weiss (= 1) . Im Konstruktor von Schachwerden die
Felder erzeugt und in einem Array vom Typ Feld verwaltet. Geeignete toString-Methoden
in Schach und Feld sollen den Aufbau des Schachbrettmusters als Stringaufbereiten.
Testen Sie dies in einer Klasse SchachTester.
Interface IFeld
Die Feld-Objekte sollen außerhalb von Schach als Objekte vom Interface-Typ
IFeldhandhabbar sein. In der Klasse Schach soll es eine Methode getFeld ermöglichen,
durch Angabe von zeile und spalte gezielt auf Felder zugreifen zu können.
Implementieren und testen Sie dies.
Iterator für Schachfelder als nicht-statische innere Klasse
Eine private innere nicht-statische Klasse FeldIterator stelle nun die Funktionalität
zur Verfügung, alle Felder einer Schach-Instanz zu iterieren. Zu diesem Zweck
implementiert diese Klasse das Interface vom Typ java.util.Iterator <IFeld>. Die Methode
remove() soll dabei allerdings keine Feld entfernen, sondern einfach keinen Effekt
haben. Die Klasse Schachbesitze eine Factory-Methode feldIterator, die einen solchen
Iterator zurückgibt. Testen Sie Ihre Implementierung indem Sie mit dem Iterator
die Felder iterieren.
Iterator für Schachfelder als anonyme innere Klasse
Schreiben Sie nun eine zweite Variante des Iterators für Felder als anonyme innere Klasse.
Die Klasse Schach besitze nun zusätzlich hierfür eine Factory-Methode iterator(),
die einen solchen Iterator zurückgibt. Testen Sie Ihre Implementierung indem Sie mit dem
Iterator die Felder iterieren. Ergänzen Sie für die Klasse die Schach Deklaration
implements Iterableum die Iteration mit Hilfe einer „foreach“-Schleife durchführen zu
können, d.h. mit for (IFeld feld: schach) {…}, wenn schacheine Referenz auf eine SchachInstanz ist.
Klasse Figur als innere Klasse (fortgeschritten)
Schreiben Sie eine private innere nicht-statische abstrakte Klasse Figur, die ein
Interface IFigur implementiert. Erweitern Sie IFeldso, dass man IFigur-Instanzen auf Felder
setzen kann. Separieren Sie die Business-Logik (d.h. hier die Spielregeln,
insbesondere die Regeln, wie eine Figur ziehen kann) in eine Methode
berechneFelder,
die eine Objekt Collection<IFeld> zurückliefert. Eine Methode
feldIterator gebe einen Iterator vom Typ java.util.Iterator<IFeld> zurück, der auf
berechneFelderbasiert. Jede konkrete Subklasse von Figurüberschreibe individuell jeweils die
Methode
berechneFelder.
Weiter Spielfiguren (freiwillig)
Programmieren Sie weitere Spielfiguren.
Herunterladen