Gomoku oder Fünf in einer Reihe ist ein Brettspiel, das von zwei Spielern auf einem Gitter mit schwarzen und weißen Steinen gespielt wird. Wer 5 Steine hintereinander platzieren kann (horizontal, vertikal oder diagonal), gewinnt das Spiel.
Regeln
In diesem KoTH spielen wir die Swap2-Regel, was bedeutet, dass ein Spiel aus zwei Phasen besteht: In der Anfangsphase bestimmen die beiden Spieler, wer zuerst geht / wer schwarz spielt. Danach legen sie jede Runde eine Klappe, beginnend mit dem Spieler wer wählte schwarz.
Anfangsphase
Lassen Sie die Spieler A & B sein und A soll das Spiel eröffnen:
- A legt zwei schwarze und einen weißen Stein auf das Brett
- B kann einen der folgenden drei Züge wählen:
- Spieler B entscheidet sich für Schwarz: Die Anfangsphase ist beendet
- Spieler B beschließt, einen weißen Stein zu platzieren und spielt Weiß: Die Anfangsphase ist vorbei
- Spieler B beschließt, einen schwarzen und einen weißen Stein zu spielen: A darf die Farbe auswählen
Spielphase
Jeder Spieler legt einen Stein seiner Farbe auf das Brett, beginnend mit dem Spieler, der Schwarz spielt. Dies geht so lange weiter, bis keine freien Plätze mehr zum Spielen vorhanden sind (in diesem Fall ist es ein Unentschieden) oder ein Spieler es schafft, Steine in einem zu spielen Reihe (in diesem Fall gewinnt der Spieler).
Eine Reihe bedeutet entweder horizontal, vertikal oder diagonal. Ein Gewinn ist ein Gewinn - es spielt keine Rolle, ob der Spieler mehr als eine Reihe erzielt hat.
KoTH-Spielregeln
- Jeder Spieler spielt zweimal gegeneinander:
- Zunächst wird nach dem Zufallsprinzip entschieden, wer zuerst geht
- Im nächsten Spiel geht der Spieler, der zuletzt gespielt hat, zuerst
- Ein Sieg ist 2 Punkte wert, ein Unentschieden 1 und eine Niederlage 0
- Ziel ist es, möglichst viele Punkte zu erzielen
Dein Bot
Um diese Herausforderung für möglichst viele Sprachen zugänglich zu machen, erfolgt die Eingabe / Ausgabe über stdin / stdout ( zeilenbasiert ). Das Richterprogramm fordert Ihr Programm auf, indem es eine Zeile in den Standard Ihres Bots druckt, und Ihr Bot druckt eine Zeile in den Standard .
Sobald Sie eine EXIT
Nachricht erhalten haben, haben Sie eine halbe Sekunde Zeit, um das Schreiben in Dateien abzuschließen, bevor der Richter den Prozess abbricht.
Zufälligkeit
Um die Turniere überprüfbar zu machen, verwendet der Richter eine gesetzte Randomisierung, und Ihr Bot muss dies aus demselben Grund auch tun. Der Bot erhält über das Befehlszeilenargument einen Startwert, den er verwenden sollte. Weitere Informationen finden Sie im nächsten Abschnitt.
Argumente
Der Bot erhält zwei Befehlszeilenargumente:
- Name des Gegners
- Samen für Zufälligkeit
Benutzerstatus
Da Ihr Programm für jedes Spiel immer neu gestartet wird, müssen Sie Dateien verwenden, um alle Informationen beizubehalten, die Sie behalten möchten. Sie dürfen alle Dateien in Ihrem aktuellen Verzeichnis lesen / schreiben oder Unterordner erstellen / entfernen. Sie dürfen nicht auf Dateien in einem übergeordneten Verzeichnis zugreifen!
Eingabe- / Ausgabeformat
BOARD
((X,Y),COLOR)
X
Y
COLOR
"B"
"W"
SP
XY
(X,Y)
|
In der Anfangsphase gibt es drei verschiedene Arten von Nachrichten:
Prompt (judge) -> Answer (bot)
"A" SP "[]" -> XY XY XY
"B" SP BOARD -> "B" | "W" SP XY | XY XY
"C" SP BOARD -> "B" | "W"
- Die erste Nachricht fragt nach drei Tupeln, die ersten beiden sind die Positionen der schwarzen Steine und die dritte die Position der weißen.
- Die zweite Nachricht fragt entweder nach:
"B"
-> wähle schwarz"W" SP XY
-> Weiß auswählen und einen weißen Stein darauf legenXY
XY XY
-> zwei Steine platzieren (der erste schwarz und der zweite weiß)
- Der letzte fragt nur, welche Farbe Sie spielen möchten
Danach beginnt das reguläre Spiel und die Nachrichten werden viel einfacher
N BOARD -> XY
N
XY
Es gibt eine zusätzliche Nachricht, die keine Antwort erwartet
"EXIT" SP NAME | "EXIT TIE"
Wo NAME
ist der Name des Bots, der gewonnen hat? Die zweite Nachricht wird gesendet, wenn das Spiel endet, weil niemand gewinnt und keine freien Plätze mehr zum Platzieren von Steinen vorhanden sind (dies bedeutet, dass Ihr Bot nicht benannt werden kann TIE
).
Formatierung
Da Nachrichten vom Bot ohne Leerzeichen dekodiert werden können, werden alle Leerzeichen ignoriert (z. B. werden sie (0 , 0) (0,12)
wie behandelt (0,0)(0,12)
). Nachrichten des Richters enthalten nur ein Leerzeichen, um verschiedene Abschnitte zu trennen (dh wie oben mit SP
), sodass Sie die Linie auf Leerzeichen aufteilen können.
Jede ungültige Antwort führt zum Verlust dieser Runde (Sie erhalten weiterhin eine EXIT
Nachricht) (siehe Regeln).
Beispiel
Hier sind einige Beispiele für aktuelle Nachrichten:
A []
B [((0,0),"B"),((0,1),"W"),((14,14),"B")]
1 [((0,0),"B"),((0,1),"W"),((1,0),"B"),((1,1),"W"),((14,14),"B")]
Richter
Das Richterprogramm finden Sie hier : Um einen Bot hinzuzufügen, erstellen Sie einfach einen neuen Ordner im bots
Ordner, platzieren Sie Ihre Dateien dort und fügen Sie eine Datei hinzu, meta
die Name , Befehl , Argumente und jeweils ein Flag 0/1 (disable / enable stderr ) enthält in einer separaten Zeile.
Um ein Turnier zu starten, laufen Sie einfach ./gomoku
und debuggen Sie einen einzelnen Bot-Lauf ./gomoku -d BOT
.
Hinweis: Weitere Informationen zum Einrichten und Verwenden des Richters finden Sie im Github-Repository. Es gibt auch drei Beispiel-Bots ( Haskell , Python und JavaScript ).
Regeln
- Bei jedem Wechsel eines Bots * wird das Turnier wiederholt und der Spieler mit den meisten Punkten gewinnt (Tie-Breaker ist die erste Einreichung).
- Sie können mehr als einen Bot einreichen, solange diese keine gemeinsame Strategie spielen
- Sie dürfen keine Dateien außerhalb Ihres Verzeichnisses berühren (z. B. die Dateien anderer Player bearbeiten).
- Wenn Ihr Bot abstürzt oder eine ungültige Antwort sendet, wird das aktuelle Spiel beendet und Sie verlieren diese Runde
- Während der Richter (derzeit) kein Zeitlimit pro Runde festlegt, wird empfohlen, die aufgewendete Zeit niedrig zu halten, da es unmöglich werden könnte, alle Einsendungen zu testen **
- Der Missbrauch von Fehlern im Richterprogramm gilt als Lücke
* Sie werden aufgefordert, Github zu verwenden, um Ihren Bot separat direkt im bots
Verzeichnis einzureichen (und möglicherweise zu ändern util.sh
)!
** Falls es zu einem Problem wird, werden Sie benachrichtigt. Ich würde sagen, dass alles unter 500 ms (das ist viel!) Im Moment in Ordnung sein sollte.
Plaudern
Wenn Sie Fragen haben oder über dieses KoTH sprechen möchten, können Sie sich gerne dem Chat anschließen !