Ü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.