Vorstellung der Aufgabe Nonogramme Andrea Frank Programmerpraktikum FernUniversität in Hagen
Agenda Nonogramme,, was sind das? und wie kann man sie lösen? eindeutige und nicht eindeutige Lösungen Überblick über die Aufgabe Welche Anforderungen sind Bestandteil der Aufgabe? Fragen Folie 2
Nonogramme Zu diesem Rätsel gibt es eine eindeutige Lösung. Folie 3
Nonogramme Bei diesem Rätsel ist die Lösung nicht eindeutig. Folie 4
Überblick über die Anforderungen Die Aufgabe teilt sich in drei Kernbereiche: Lösen eines Rätsels durch einen interaktiven Benutzer Lösen eines Rätsels durch den Computer Erzeugen von Rätseln aus beliebigen Grafikdateien Folie 5
Lösen eines Rätsels durch einen Benutzer Laden und Speichern von Nonogrammen Dateiauswahldialoge verwenden (AWT: FileDialog / Swing: JFileChooser) beim Laden/Speichern das angegebene Datenformat beachten Interaktives Lösen beliebiges Feld mit einer Farbe des Rätsels belegen beliebiges Feld als Leerfeld markieren Feldbelegung wieder entfernen zum Ende: Überprüfen, ob Lösung korrekt ist Folie 6
Lösen eines Rätsels durch einen Benutzer (2) GUI - grafische Benutzeroberfläche zeigt den aktuellen Stand an nimmt Benutzereingaben entgegen Die Bedienung ist in der Dokumentation zu beschreiben. Hinweise: Falls Sie nicht viel Erfahrung haben, erstellen Sie eine einfache Benutzeroberfläche (AWT: Frame / Swing: JFrame) mit einem Zeichenbereich (Canvas / JPanel) und einem Menü (Menu / JMenu). Später können Sie z.b. eine Toolbar (JToolBar (nur Swing)) für die Auswahl der Farben hinzufügen. Bei sehr großen Rätseln könnte der Zeichenbereich durch Scrollen (ScrollPane / JScrollPane) oder Zoomen (AffineTransform) erweitert werden. Viele hilfreiche Tipps und Codebeispiele finden Sie z.b. im Swing-Tutorial: http://docs.oracle.com/javase/tutorial/uiswing/ Folie 7
Lösen eines Rätsels durch den Computer Die Techniken zum Lösen aus der Schritt-für-Schritt-Anleitung sind nur ein Vorschlag. Eigene Lösungsalgorithmen sind natürlich erlaubt. Lösungsalgorithmus: Eventuell wird es zu einer Situation kommen, in der kein sicheres Setzen einer Farbe möglich ist. In diesem Fall muss geprüft werden, ob eine eindeutige Lösung trotzdem möglich ist. Hinweise: Backtracking, 8-Damen-Problem Der verwendete Lösungsalgorithmus ist in der Dokumentation zu beschreiben. Folie 8
Lösen eines Rätsels durch den Computer (2) kein eindeutiger Schritt möglich Treffen einer willkürlichen Entscheidung [Zeitpunkt x] Lösung gefunden keine Lösung gefunden Testen, ob eine andere willkürliche Entscheidung zum Zeitpunkt x ebenfalls zu einer Lösung geführt hätte Testen, ob eine andere willkürliche Entscheidung zum Zeitpunkt x zu einer Lösung geführt hätte ja nein ja nein Rätsel nicht eindeutig lösbar Rätsel eindeutig lösbar Rätsel nicht lösbar Folie 9
Lösen eines Rätsels durch den Computer (3) Überprüfen des Lösungsalgorithmus mit dem Test-Interface Zusatzmaterial Nonogramme.zip von der ProPra-Webseite http://www.fernuni-hagen.de/mathinf/studium/lehre/praktika/programmierpraktikum/2013_2014_ws.shtml Library Nonogramme.jar in Java-Projekt einbinden Javadoc in IDE einbinden Testdaten verwenden Test-Interface INonogramSolver implementieren Methode getsolution() liefert das Ergebnis Testlauf durchführen (Aufruf mit Parameter t ) Einzeltests (Aufruf mit Parameter -t beispiel.test ) Folie 10
Folie 11
Erzeugen von Rätseln eine beliebige Grafik (*.gif, *.png, *.jpg) als Quelle verwenden Festlegen der späteren Größe des Rätsels Festlegen der Anzahl der Farben im Rätsel Skalieren der Grafik und Runterrechnen der Farben eine Farbe als Hintergrundfarbe wählen eventuell einige Felder vorbelegen (eindeutige Lösung) Rätsel im angegebenen Dateiformat speichern (Eindeutigkeit!!!) Folie 12
Erzeugen von Rätseln (2) Skalieren Für das Skalieren einer Grafik können Sie Klassen und Methoden aus dem Java-SDK verwenden. Runterrechnen der Farben Das Reduzieren der Farben wurde im Vortrag zum Thema Bildvektorisierung bereits besprochen und kann dort nachgelesen werden. Eindeutigkeit prüfen, eventuell einige Felder vorbelegen Folie 13
Fragen? Folie 14