Projekt 2: Cascadia
Im zweiten Projekt des SoPra24d 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 Spieler. Ziel des Spiels ist es, ein Habitat für Widtiere aufzubauen und dabei möglichst viele Punkte zu erziehlen.
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 Reihenfolge der Spielenden soll vor Spielstart sowohl frei wählbar konfiguriert als auch randomisiert werden können.
- Das Spiel soll in zwei Modi unabhängig gespielt werden können (eine Mischung der beiden Modi ist nicht vorgesehen):
- Die Spielenden wählen nacheinander und reihum am gleichen Bildschirm ihre Aktionen aus (Hotseat-Modus).
- Die Spielenden 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, die z.B. nur randomisiert einen der möglichen Züge auswählt, sowie eine „richtige“ 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.
- Die Bots dürfen beim Spielen keine Vorteile gegenüber einem menschlichen Spielenden ausnutzen.
- Kein Bot-Zug darf länger als 10 Sekunden benötigen.
- Jede Gruppe soll zu ihrem Spiel auch eine PDF-Anleitung beilegen, die beschreibt, wie das Spiel ausgeführt und bedient wird.
Update 17.12.
- 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).
Zu implementierende Regeln
- Das Spiel ist gemäß der offiziellen Regeln zu implementieren.
- Es müssen weder der Solo-Modus, die einfache Wertung, 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).
Regelklarstellungen / -ergänzungen
26.11.
- 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.)
- Ausschlaggebend ist immer die englische Fassung der Regeln.
04.12.
- 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.
- 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.
17.12.
- 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: „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. Der genaue Ablauf des Turniers wird im Laufe des Projekts noch festgelegt.
Ein Bot-Zug darf dabei 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 Turnier ausgeschlossen.