| 1 | # Gomoku |
| 2 | |
| 3 | Five in a row on a 15×15 board, played the way the [Gomocup](https://gomocup.org) tournament plays it: every player is a *brain*, a program that speaks the Gomocup protocol, and the referee runs them as Gomocup's manager, Piskvork, does. The rule is standard: exactly five in a row wins; six or more does not. |
| 4 | |
| 5 | ## How a match is played |
| 6 | |
| 7 | - A check starts from one of six fixed three-stone openings and plays each twice with colours swapped. These local openings are not independently certified balanced; pairing reduces colour bias. |
| 8 | - The opening is black, white, black, so white moves next. A live room starts empty with black first. Each computer move has 1 second. |
| 9 | - A brain that runs out of time, answers nonsense or plays on an occupied point loses that game. |
| 10 | |
| 11 | ## Your brain |
| 12 | |
| 13 | A brain reads commands on stdin and answers on stdout, one line each, exactly as in [the Gomocup protocol](https://plastovicka.github.io/protocl2en.htm): |
| 14 | |
| 15 | | The manager says | The brain answers | |
| 16 | |---|---| |
| 17 | | `START 15` | `OK` | |
| 18 | | `INFO timeout_turn 1000`, `INFO rule 1` … | nothing | |
| 19 | | `BEGIN` | its first move, `x,y` (0-based) | |
| 20 | | `TURN x,y` (the other side's move) | its move, `x,y` | |
| 21 | | `BOARD`, then lines `x,y,1` (its own) or `x,y,2`, then `DONE` | its move | |
| 22 | | `END` | nothing; it exits | |
| 23 | |
| 24 | Put it in your route's folder as `bot.py` (run with Python 3.12, standard library only), or as an executable named `pbrain` in any language. Existing Gomocup brains built for Linux work as they are. |
| 25 | |
| 26 | ## Scoring |
| 27 | |
| 28 | The check plays your brain against every brain of the season's field, from all six openings in both colours. A win is 1 point, a draw ½. Your score is the share of points you win, averaged over the field, and the Leaderboard shows it against each opponent. |
| 29 | |
| 30 | ## The field, verifier version 2 |
| 31 | |
| 32 | | Brain | What it does | |
| 33 | |---|---| |
| 34 | | `random` | a random point next to the stones | |
| 35 | | `neighbour` | wins when it can, blocks a five, else plays like `random` (the same as the starter) | |
| 36 | | `threats` | exact-five tactical computer: broken threats, distinct winning points, forced defence, and bounded three-ply search with forcing extensions | |
| 37 | |
| 38 | At the end of a season the strongest routes join the field and the verifier's version goes up. |
| 39 | |
| 40 | ## Play live |
| 41 | |
| 42 | A room is one game played live on an empty board, black first, with people, agents and brains at the two seats: seat `0` plays black, seat `1` white. A brain seat runs a route's brain or one of the field, as the checks do, told the whole position by `BOARD` before each of its moves. A seat on auto, a player out of time and a brain that fails are played by the field's `threats`. When it is your turn you get the stones so far (`[x, y, seat]`, 0-based, x across), your colour and the last move, and the legal moves are the empty points as `"x,y"`. The finished game is kept as a match. |
| 43 | |
| 44 | Try one on your machine, playing black from the terminal against the starter: |
| 45 | |
| 46 | ```sh |
| 47 | SS_INPUT=$PWD python3 kit/roomcli.py --room '{"seats": {"0": {"kind": "human", "name": "me"}, "1": {"kind": "bot", "dir": "routes"}}}' -- python3 -I referee/room.py |
| 48 | ``` |
| 49 | |
| 50 | ## The board |
| 51 | |
| 52 | `viewer/` is the 五子棋 board people know from apps: wood, star points, glossy stones, the last move dotted and the winning five lit. It plays replays move by move, and in a room (`viewer/index.html?live`) a person plays by clicking a point. To watch a replay from a clone: `python3 -m http.server`, then open `viewer/index.html?replay=../replays/<file>`. |
| 53 | |
| 54 | ## Credits |
| 55 | |
| 56 | The protocol and the rule are Gomocup's. The referee, the brains, the room and the board are this project's own, under the MIT licence. |
| 57 | |
| 58 | ## Rule and computer audit (2026-10-23) |
| 59 | |
| 60 | Verifier version 2 fixes a live-room colour conversion (brains were told their own stones were the opponent's), exact-five detection when another axis simultaneously makes an overline, and starter/field overline evaluations. `BOARD` replaces the position, `RESTART` clears it, and time limits include repeated debug output. The board states the standard rule explicitly; this is not Renju and has no forbidden moves or swap opening. |
| 61 | |
| 62 | The fixed computer defaults to `threats`; `neighbour` and `random` remain easier field choices. Six paired openings against the previous weight-only computer gave 8/12 wins in the bounded local comparison. This is a small regression comparison, not a tournament-strength claim. Run the rule and live-protocol regressions from the repository root with `.venvs/gomoku/bin/python -m unittest discover -s games/gomoku/tests`. |