Projekt 2: Blokus
Im zweiten Projekt des SoPra23a soll das Brettspiel Blokus als Kotlin-Anwendung unter Verwendung des BoardGameWork realisiert werden.
Blokus ist ein abstraktes Strategiespiel, bei dem die Spieler versuchen, so viele Teile wie möglich auf das Brett zu legen und die meiste Fläche zu bedecken. Die Teile haben verschiedene Formen und Farben. Die Teile derselben Farbe dürfen sich nicht an den Außenkanten berühren, sondern müssen über die Ecken verbunden sein. Das Spiel ist einfach zu verstehen für Anfänger, aber eine echte Herausforderung für Profis.
Für die Implementierung ist allein das englische Regelwerkdokument (Official Instructions) ausschlaggebend.
Anforderungen an das Programm
Das zu entwickelnde Programm soll den Spielablauf steuern und für die Einhaltung der Spielregeln sorgen. Zusätzliche Features, die nicht direkt auf den Spielregeln basieren, sollen umgesetzt werden:
- Die Farben und die Reihenfolge der 2-4 Spieler sollen vor Spielstart frei wählbar oder randomisiert sein.
- Die erweiterten Regeln (Zusatzpunkte für alle abgelegten Teile + Endteil) müssen umgesetzt werden.
- Das Spiel soll in zwei Modi unabhängig gespielt werden können (Mischung der beiden Modi ist nicht vorgesehen):
- Die Spieler wählen nacheinander und reihum am gleichen Bildschirm ihre Aktionen aus (Hotseat-Modus).
- Die Spieler spielen gegeneinander via Netzwerk unter Verwendung des BGW-Net Moduls.
- Ein Spiel soll unterbrochen und gespeichert werden können, um es an einem späteren Zeitpunkt (auch nach Neustart des Programms) fortzusetzen.
- Es sollen simulierte Mitspieler („KI-Spieler“) zur Verfügung stehen. Hierbei soll es eine einfache Test-KI geben, die z.B. nur randomisiert einen der möglichen Züge auswählt, sowie eine „richtige“ für das am Ende stattfindende KI-Turnier. Es soll auch möglich sein, dass reine KI-Spiele (also ohne menschliche Spieler) durchgeführt werden. Damit ein Zuschauen und Nachvollziehen der Züge möglich wird, soll die Simulationsgeschwindigkeit angepasst werden können.
- Die KIs dürfen beim Spielen keine Vorteile gegenüber einem menschlichen Spieler ausnutzen.
- Kein KI-Zug darf länger als 10 Sekunden benötigen.
- Um verschiedene Strategien studieren und ausprobieren zu können, soll das Spiel über eine Undo- und eine Redo-Funktion verfügen. Die Spielzüge sollen bis zum Spielstart zurückgenommen werden können. Für Netzwerkspiele soll dieses Feature deaktiviert sein.
Regelanpassungen und -erläuterungen
Klarstellungen (Stand 21.03.2023 19:47 Uhr)
- Die Anforderung des Speicherns und Ladens von Spielen bezieht sich ausschließlich auf lokale Spiele und gilt nicht für Spiele über das Netzwerk.
- Wenn mindestens ein Stein auf das Brett im Rahmen eines Zuges gelegt werden kann, muss dies auch erfolgen. Ein „freiwilliges“ Passen ist nicht möglich.
- Steine können gedreht und gespiegelt werden, bevor sie auf dem Brett platziert werden.
- Für die Implementierung soll das Advanced Scoring umgesetzt werden.
- Die Reihenfolge bzw. die Farbenfolge, in der gespielt wird, kann in der 4-Spieler-Variante frei gewählt werden. Die Spieler sind nacheinander an der Reihe. In den 2- bzw. 3-Spieler-Varianten sind die Reihenfolgen der Farben dagegen festgelegt (Blau → Gelb → Rot → Grün), damit die Spieler abwechselnd an der Reihe sind bzw. die übrig gebliebene Farben von allen anderen Spielern abwechselnd gespielt wird.
- Beim 2-Spieler-Spiel werden in die Advanced Scoring-Regeln in dem Sinne umgesetzt, dass die beiden Spieler einzeln betrachtet werden und entsprechend individuell die Sonderpunkte erhalten können und die Punkte dann zum Schluss zusammengerechnet werden.
- Es kann mehrere Gewinner geben, wenn z.B. zwei Spieler 20 Punkte errreicht haben.
- Zu Beginn eines Spiels muss jeder Spieler seinen ersten Stein in eine freie Ecke legen. Die freie Ecke kann dabei beliebig gewählt werden.
- Wenn im 3-Spieler-Spiel nur noch der geteilte Spieler Züge durchführen kann, kann das Spiel vorzeitig beendet und gewertet werden.
- Bei einem Spiel über Netzwerk legt der Host die Farben der einzelnen Spieler fest und teilt diese den Clients über die InitGameMessage mit.
- Wenn ein Spiel gespeichert und dann zu einem späteren Zeitpunkt geladen wird, soll die bereits gespielte History weiter vorhanden sein, d.h. Undo und Redo sollen genau so funktionieren wie bei einem nicht unterbrochenen Spiel.
- Beim 2-Spieler-Spieler mit 14×14 Feld darf jeder Spieler nur eine Ecke verwenden und nicht noch an einer zweiten Ecke starten.
Erweiterungen
Im SoPra 23a soll für die zwei-Spieler-Variante mit jeweils zwei Farben pro Spieler auch eine vereinfachte Variante mit zwei Farben und einem Brett von 14×14 umgesetzt werden.
Öffentliche Informationen
Alle noch nicht angelegten Plättchen aller Spieler sind für alle Spieler einsehbar.
KI-Turnier
Am Ende des Projekts findet ein Turnier statt, bei dem die KIs der Gruppen in 1v1-Spielen über den Netzwerkmodus gegeneinander antreten. Der genaue Ablauf des Turniers wird im Laufe des Projekts noch festgelegt.
Network Task Force
Aus je einem Teilnehmer jeder Gruppe wird eine Network Task Force (NTF) gebildet, die gemeinsam das Austauschformat für das Netzwerkspiel in Form eines (oder mehrerer) JSON-Schema definiert und die dazugehörigen Kotlin Data Classes gemeinschaftlich implementiert. Für die NTF sind drei Treffen vorgesehen, in denen auch BGW-Net-Entwickler und SoPra-Organisation beratend zur Verfügung stehen: