Leon Löhle
Dustin Eversmann
Für das Team-Testat wollen wir gemeinsam ein Spiel entwickeln, und zwar Hitori, ein japanisches Logikrätsel. Dieses basiert auf einem Quadrat beliebiger Größe, das mit Zahlen gefüllt vorgegeben wird.
Diese Zahlen sind so zu schwärzen (bzw. zu streichen), dass in keiner Zeile und in keiner Spalte eine Zahl doppelt vorkommt. Dabei dürfen geschwärzte Felder nicht direkt horizontal oder vertikal (also "orthogonal") benachbart sein, wohl aber diagonal. Ferner müssen am Ende alle nicht gestrichenen Zahlen einen einzigen, orthogonal zusammenhängenden Bereich ergeben. Es darf also keine schwarze Mauer bspw. in der Mitte des Spielfelds geben.
Beispiele finden Sie unter janko.at, an dessen Implementierung Sie sich auch gerne ein Stück weit orientieren können.
Für das Testat implementieren Sie bitte mindestens folgende Funktionalität:
Eine GUI, in der beliebige Spielfelder angezeigt und bespielt werden können. (Sie erhalten einige Spielfelder von uns als Textdatei vorgegeben.)
Die Möglichkeit ein bestimmtes Spielfeld auszuwählen oder zufällig eines ausgesucht zu bekommen.
Die Felder des Spielfelds sollen zu Beginn grau hinterlegt sein und auf schwarz (gestrichen) oder weiß gesetzt werden können, um einen besseren Überblick zu behalten (vgl. janko.at)
Alle gesetzten Farb-Markierungen sollen gespeichert werden und beliebig vor und zurück geklickt werden können (Undo/Redo-Funktion).
Ferner soll es einen Reset-Button geben, der das laufende Spiel wieder komplett auf den Anfangsstand zurücksetzt; die Zeit soll aber weiterlaufen.
Eine Zeitmessung, die während des Spiels mitläuft.
Ein Highscore für jedes Spielfeld, in dem die Zeiten zusammen mit einem vom Spieler einzugebenden Namen (auf der Platte) gespeichert werden.
Sobald das Spielfeld komplett korrekt gelöst ist (die geschwärzten Zahlen alle korrekt gesetzt wurden), stoppt das Spiel die Zeit und gibt die Möglichkeit einen Namen für den Highscore einzutragen.
Das Spiel soll eine Markierung der fälschlich schwarz markierten Felder als Hilfestellung anzeigen können, es soll beim Highscore mitgespeichert werden, wie viele Fehler dabei insgesamt über das Spiel angezeigt wurden.
Beim Highscore soll für jedes Spielfeld auch die Durchschnittszeit aller bisherigen Einträge angezeigt werden.
Optional implementieren Sie die Zeitmessung so, dass die Uhr stoppt, sobald das Fenster nicht mehr angezeigt wird, bzw. verdeckt ist.
Optional implementieren Sie auch gerne das Abspeichern eines gerade laufenden Spiels beim Beenden des Programms, so dass es beim nächsten Start fortgesetzt werden kann.
Folgende formale Kriterien sind vorgegeben:
Die Bearbeitung findet in Zweier oder Dreier-Teams statt, Einzelabgaben sind nicht erlaubt.
Verwendung der bekannten OO-Prinzipien mit einer Layered Architecure und korrekten Packages.
Sinnvolles Abtesten der API des Backends (System- bzw. Integrationstests) sowie der Domäne (Unit-Tests) mit JUnit.
Nutzung von Maven -> mit Erstellung einer ausführbaren JAR-Datei.
Abgabe über Git, bitte tragen Sie alle Team-Mitglieder in der Readme-Datei Ihres gemeinsamen Git-Projekts ein.
Verwendung von mindestens Feature Branches durch alle Team-Mitglieder.
Verwenden Sie gerne Pull Requests zur Integration der Feature-Branches in den Code.
Sollten Sie keine Pull-Requests verwenden, achten Sie bitte darauf, dass den main-Branch nicht "kaputt machen", ggf. kann es sinnvoll sein, noch einen dev-Branch zu Integration der Feature-Branches anzulegen und von diesem dann nach main zu pushen.
Alle Personen im Team sollen ungefähr die gleiche Menge an Code zum Projekt beitragen und jeweils Produktiv-Code und Testfälle zum gemeinsamen Projekt beitragen.
Spätester Termin für die Gruppenwahl und das Hinzufügen von hummel und koehler zu den Git-Projekten ist der 08.12.24.
Spätester Termin für Änderungen im Git: 07.01.2025, 13:00 Uhr.