0ca905eb71
Precompute board adjacency and square sets, look up opponents once per move, and cache walks that exclude only the start square. Every game is unchanged for the same seed, checked with agents/scripts/fingerprint_games.py. Plan: skip catch-up 6.9 (D44), stop running the random lineup (D45). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
63 lines
2.4 KiB
Markdown
63 lines
2.4 KiB
Markdown
# Il Labirinto del Dojo
|
||
|
||
A small tabletop game (1–2 h, 3–8 players, best at 4), plus the tooling used to design and
|
||
balance it.
|
||
|
||
| Document | What it is |
|
||
|---|---|
|
||
| [`RULES.md`](RULES.md) | The rulebook (English working draft). |
|
||
| [`board/FORMAT.md`](board/FORMAT.md) | How the board is written as text. |
|
||
| [`agents/plans/`](agents/plans/) | Active work plan: decisions, phases, open questions. |
|
||
|
||
## Setup
|
||
|
||
Requires [uv](https://docs.astral.sh/uv/). It installs the pinned Python and all tools:
|
||
|
||
```sh
|
||
uv sync
|
||
```
|
||
|
||
## Board
|
||
|
||
The board is authored as one 8x8 quadrant in `board/quadrant.txt` (tunnel links in
|
||
`board/legend.toml`) and rotated into the full 16x16 board.
|
||
|
||
```sh
|
||
uv run dojo board validate # check the board against the rules, print stats
|
||
uv run dojo board render # print the full 16x16 board
|
||
uv run dojo board render -o board/board.txt # regenerate the full board file (never edit it by hand)
|
||
uv run dojo board validate --quadrant other.txt --legend other.toml # check another draft
|
||
```
|
||
|
||
`validate` exits with `0` when the board is fine (warnings allowed), `1` on rule violations,
|
||
`2` when the file is malformed or missing.
|
||
|
||
## Simulation
|
||
|
||
Plays many seeded games with bots and prints metrics per scenario. Every combination of the
|
||
listed values is a scenario; game `i` of each scenario uses seed `--seed + i`, and the lineup
|
||
rotates one seat per game. Bots: `random`, `casual`, `balanced`, `farmer`, `aggressive`
|
||
(`casual` is `balanced` comparing only 6 random moves of those offered, like a person).
|
||
|
||
```sh
|
||
uv run dojo sim # 4 players, current rules, 200 games
|
||
uv run dojo sim --games 1000 --csv games.csv # more games; one CSV row per game
|
||
uv run dojo sim --lineup casual balanced --summary-csv s.csv # one CSV row per scenario
|
||
uv run dojo sim --exam c none a ac # Final Exam options in force (rules: c), combinable
|
||
uv run dojo sim --players 3 4 6 8 --start 0 3 # player counts x start position
|
||
uv run dojo sim --kiai 2 1 # Kiai +2 vs +1
|
||
uv run dojo sim --lineup farmer aggressive,farmer # several lineups (comma-separated seats)
|
||
uv run dojo sim --seed 42 --jobs 1 # other dice; single process
|
||
```
|
||
|
||
Minutes are estimated as 45 s per turn plus 30 s per Kumite.
|
||
|
||
## Development
|
||
|
||
```sh
|
||
uv run pytest # tests
|
||
uv run ruff check . # lint
|
||
uv run ruff format . # format
|
||
uvx pyright src tests # type check
|
||
```
|