Projekt 2: Cascadia
Im zweiten Projekt des SoPra26b soll das Brettspiel Cascadia als Kotlin-Anwendung unter Verwendung des BoardGameWork realisiert werden.
Bei Cascadia handelt es sich um ein Legespiel für zwei bis vier Spielende. Ziel des Spiels ist es, ein Habitat für Wildtiere aufzubauen und dabei möglichst viele Punkte zu erzielen.
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:
- Das Spiel ist gemäß der offiziellen Regeln (englisch) zu implementieren.
- Die Namen der Spieler*innen müssen angegeben werden und eindeutig sein.
- Die Reihenfolge der Spielenden soll vor Spielstart sowohl frei wählbar konfiguriert als auch randomisiert werden können.
- Beim Spielsetup müssen die zu verwendenden Wertungskarten (Typ A oder B separat für jedes Tier) konfiguriert werden können. Zusätzlich soll eine zufällige Wahl möglich sein.
- Das Spiel soll in zwei Modi unabhängig gespielt werden können (Mischung der beiden Modi ist nicht vorgesehen):
- Die Spieler*innen wählen nacheinander und reihum am gleichen Bildschirm ihre Aktionen aus (Hotseat-Modus).
- Die Spieler*innen spielen gegeneinander via Netzwerk unter Verwendung des BGW-Net Moduls.
- Es sollen simulierte Mitspieler („Bots“) zur Verfügung stehen.
- Hierbei soll es einen einfachen Test-Bot geben, der z.B. nur randomisiert einen der möglichen Züge auswählt, sowie einen „richtigen“ für das am Ende stattfindende Bot-Turnier.
- Es soll auch möglich sein, dass reine Bot-Spiele (also ohne menschliche Spielende) durchgeführt werden.
- Damit ein Zuschauen und Nachvollziehen der Züge möglich wird, soll die Simulationsgeschwindigkeit angepasst werden können.
- Um verschiedene Strategien studieren und ausprobieren zu können, soll das Spiel über eine Undo- und eine Redo-Funktion verfügen. Die Undo-/Redo-Aktionen springen immer so weit zurück/vor, bis der vorherige/nächste menschliche Spieler am Zug ist. Alle Bot-Züge die währenddessen durchgeführt wurden, werden automatisch übersprungen. Nach diesen Aktionen ist also immer ein menschlicher Spieler wieder am Zug. Die Spielzüge sollen bis zum Spielstart zurückgenommen werden können. Für Netzwerkspiele und Spiele, in denen nur Bots vorhanden sind, soll dieses Feature deaktiviert sein.
- Ein Spiel soll unterbrochen und gespeichert werden können, um es zu einem späteren Zeitpunkt (auch nach Neustart des Programms) fortzusetzen. Für Netzwerkspiele soll dieses Feature deaktiviert sein. 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.
- Jede Gruppe soll zu ihrem Spiel auch eine PDF-Anleitung beilegen, die beschreibt, wie das Spiel der Gruppe ausgeführt und bedient wird.
Regelergänzungen
- Es müssen weder der Solo-Modus, die einfache Wertung (engl. Variants), noch die Herausforderungen umgesetzt werden (Seite 10 & 12-14).
- Bei den Wertungskarten müssen je nur die Varianten A und B implementiert werden (Seite 11).
- Am Ende des Spiels sollen die Punkte der Spieler entsprechend der Regeln berechnet und getrennt nach Einzelwertungen angezeigt werden (Siehe Regeln Seite 9 - Grafik rechts).
- Entgegen der Regeln gibt es nur zwei Nachziestapel/Beutel. Jeweils einen für die Habitatsteile und die Tierplättchen.
- Das Startplättchen, das aus drei Einzelplättchen besteht, kann nicht gedreht werden. (Für den weiteren Spielverlauf ist eine Drehung irrelevant, da das gesamte Feld rotationssymmetrisch zu einer nicht-gedrehten Fassung ist.)
- Da die Anzahl der Zapfen begrenzt ist, kann es vorkommen, dass ein Spieler beim Ansiedeln eines Tieres auf einem Plättchen mit Zapfensymbol keinen Zapfen bekommt.
- Zapfen können „freiwillig“ ausgegeben werde. Das bedeutet es ist zulässig einen Zapfen zu bezahlen, um eine beliebige Plättchenkombination zu nehmen und dann eine vertikale Kombination auszuwählen, die auch ohne Zapfen genommen werden könnte.
- Die Plättchen, die für die Spielrunde gewählt wurden, gelten als öffentliche Information. Das heißt Bot-Spielern ist insbesondere bekannt, welche Plättchen noch im Nachziehstapel sind (Achtung: Die Reihenfolge, in der sie gezogen werden, darf den Bots nicht zur Verfügung gestellt werden.)
- Habitatsteile und Tierplättchen werden immer von links nach rechts nachgefüllt.
- Wird eine Überbevölkerung festgestellt, werden die Tierplättchen zunächst zur Seite gelegt und erst am Ende der Überbevölkerungsbereinigung in zurück in das Säckchen gelegt. Sind nicht mehr genügend Plättchen im Beutel endet das Spiel sofort.
- Wird ein Zapfen zum Tauschen von Tierplättchen verwendet, werden die ausgetauschten Plättchen direkt nach dem Auffüllen zurück in das Säckchen gelegt. Sind nicht mehr genügend Tierplättchen im Beutel, endet auch hier das Spiel sofort.
- Nach dem Tausch von Tierplättchen durch Verwendung eines Zapfens wird sofort auf Überbevölkerung geprüft. Liegt eine Überbevölkerung vor, wird diese laut der Regeln beseitigt. Der wahlweise-Tausch von drei gleichen Tierplättchen ist genau ein Mal pro Zug möglich. Dies ist auch der Fall, wenn nach der Verwendung eines Zapfens Tierplättchen getauscht wurden, insofern vorher noch nicht davon Gebrauch gemacht wurde.
- Es kann ein Zapfen ausgegeben werden um eine beliebige (das heißt insbesodere auch keine) Tierplättchen zu tauschen. Dadurch können beliebig viele Zapfen freiwillig ausgegeben werden ohne Plättchen zu tauschen. In diesem Fall muss trotzdem der Beutel gemischt werden, auch wenn kein Tausch stattgefunden hat.
- Bussarde-Wertungskarte B: „Score an increasing number of points for each hawk that is not adjacent to any other hawk, and also has a direct line of sight to another hawk.“ / „Du erhältst Punkte für die Anzahl deiner Bussarde, die keinen anderen Bussard neben sich haben und eine Sichtlinie zu einem anderen Bussard haben.“: Der in der Sichtlinie liegende Bussard kann andere Bussarde neben sich haben. Der Constraint bezieht sich nur auf den aktuell zu wertenden Bussard.
- Lachs-Wertung: Lachs-Ketten werden von Lachsen unterbrochen, die mehr als zwei benachbarte Lachse haben. Alle Lachse dieser Kette, die weniger als drei Nachbarn haben werden aber weiterhin gewertet. Aus der Kette müssen also lediglich diejenigen mit mehr als zwei Nachbarn ausgenommem werden. Durch diese kann es vorkommen, dass Ketten in zwei kleinere gesplittet werden.
Beispiel: In der folgenden Grafik ist bei 1) eine 7er Lachskette. Durch Hinzufügen des hervorgehobenen Plättchens wird die Lachskette in 2 unterbrochen (Lachs mit blauem X hat drei Nachbarn und wird ausgeschlossen) und in eine 1er, eine 2er und eine 4er Lachskette getrennt. Die Punkte reduzieren sich von 25 auf 19 (2+5+12).
Import-Datei mit Spielteilen
Damit alle Gruppen auf den gleichen Spielmaterialien arbeiten, stellen wir eine Import-Datei (im CSV-Format) zur Verfügung, in der alle verfügbaren Wildnisplättchen enthalten sind.
Das Zeilenformat ist:
id;habitats;wildlife;keystone
- „id“ gibt dem Plättchen einen eindeutigen Identifier
- „habitats“ kodiert in einen String im Uhrzeigersinn (beginnend bei rechts oben), wie die Landschaft des Wildnisplättchens aufgebaut ist. Dabei gelten folgende Abkürzungen: M - Mountains, F - Forests, P - Prairies, W - Wetlands, R - Rivers
- „wildlife“ gibt in einem String an, welche 1-3 Tierarten auf das Plättchen platziert werden können: B - Bear, E - Elk, S - Salmon, H - Hawk, F - Fox
- „keystone“ gibt an, ob das Plättchen ein Zapfensymbol hat. Gültige Werte sind hier „yes“ und „no“
Beispiel (Plättchen aus der Anleitung, Seite 8)
1;RRRWWW;BHS;no 2;PPPMMM;FB;no 3;FFFFFF;E;yes
Die Startplättchen bestehen aus jeweils drei (ggf. gedrehten) „normalen“ Plättchen.
Beispiel (Plättchen aus der Anleitung, Seite 3)
Jeweils drei Zeilen der CSV beschreiben ein Start-Plättchen im Urzeigersinn beginnend mit dem Oberen.
20;WWWWWW;H;yes 21;PPMMMP;FB;no 22;RFFFRR;EHS;no
Bot-Turnier
- Am Ende des Projekts findet ein Turnier statt, bei dem die Bots der Gruppen in 1v1-Spielen über den Netzwerkmodus gegeneinander antreten. Hierbei ist zu beachten, dass das Bot-Turnier ausschließlich auf den Pool-Rechnern durchgeführt wird. Es darf kein eigener Rechner für das Turnier verwendet werden. Der genaue Ablauf des Turniers wird im Laufe des Projekts noch festgelegt.
- Ein Bot-Zug darf bei der schnellsten einzustellbaren Simulationsgeschwindigkeit maximal 10 Sekunden Rechenzeit benötigen und muss regelkonform sein. Sollte ein Bot sich nicht an die Spielregeln halten (beabsichtigt oder unbeabsichtigt), wird die Gruppe vom Bot-Turnier ausgeschlossen.
- Der Bot darf beim Spielen keine Vorteile gegenüber einem menschlichen Spielenden ausnutzen.
