trigo / trigo-web /tools /README.md
k-l-lambda's picture
updated
502af73
# Trigo Tools
Development tools for the Trigo project.
## Random Game Generator
Generate random Trigo games in TGN (Trigo Game Notation) format for testing, development, and analysis.
### Usage
```bash
# Generate 10 games with default settings (play until territory settled)
npm run generate:games
# Generate 100 games with custom move range
npm run generate:games -- --count 100 --moves 20-80
# Generate games with exactly 30 moves each
npm run generate:games -- --moves 30 --count 50
# Generate games on 3x3x3 board (plays until settled)
npm run generate:games -- --board "3*3*3" --count 50
# Generate 2D games (9x9x1 board)
npm run generate:games -- --board "9*9*1" --count 20
# Higher pass probability
npm run generate:games -- --pass-chance 0.3
# Custom output directory
npm run generate:games -- --output "my_games" --count 50
```
### Options
| Option | Short | Default | Description |
|--------|-------|---------|-------------|
| `--count` | `-c` | 10 | Number of games to generate |
| `--moves` | `-m` | (settled) | Moves per game as "MIN-MAX" or single number. Default: play until neutral territory = 0 |
| `--pass-chance` | | 0 | Probability of passing (0.0-1.0) |
| `--board` | `-b` | "random" | Board size as "X*Y*Z" or "random" |
| `--output` | `-o` | "output" | Output directory (relative to tools/) |
| `--help` | `-h` | - | Show help message |
### How It Works
**Default Mode (no --moves specified):**
1. Creates a new Trigo game with the specified board shape
2. Plays random valid moves until the board reaches 90% coverage
3. After 90% coverage, checks territory after each move
4. Stops when neutral territory reaches 0 (game is fully settled)
5. Results in complete, finished games with all territory claimed
**Custom Move Mode (--moves specified):**
1. Creates a new Trigo game with the specified board shape
2. Randomly selects valid moves for the specified number of moves
3. Respects Go rules: Ko, suicide prevention, capture
4. Games may end early on double-pass
5. Exports each game to TGN format with metadata
### Output Format
Generated files are named using SHA-256 hash of the TGN content: `game_<HASH>.tgn`
This ensures:
- **Content-based naming**: Same game content = same filename
- **Duplicate detection**: Identical games won't overwrite each other
- **Deterministic**: Reproducible filenames independent of generation time
Example output:
```
tools/output/
├── game_a3f5c8d912e4b6f1.tgn
├── game_7b2d9e1a4c8f3605.tgn
└── game_9e4b6f1a3f5c8d91.tgn
```
### TGN Format Example
```tgn
[Event "Random Generated Game"]
[Site "Batch Generator"]
[Date "2025.11.03"]
[Black "Random Black"]
[White "Random White"]
[Board "5x5x5"]
[Rules "Chinese"]
[Application "Trigo Random Generator v1.0 (5×5×5)"]
1. 000 y00
2. 0y0 yy0
3. aaa zzz
4. Pass 0az
5. z0z Pass
```
### Performance
- **Small boards (3×3×3)**: ~250 games/second
- **Standard boards (5×5×5)**: ~75 games/second
- **Large boards (9×9×1)**: ~33 games/second
Generating 1000 games on a 5×5×5 board takes approximately 13 seconds.
### Use Cases
1. **Testing TGN parser** - Create diverse test files for import functionality
2. **Performance testing** - Generate large datasets for board rendering tests
3. **AI training** - Create training data for future AI opponent
4. **Game analysis** - Study patterns in random gameplay
5. **Format validation** - Verify TGN export works correctly across scenarios
### Board Sizes
**3D Boards:**
- `3*3*3` - Tiny cube (27 positions)
- `5*5*5` - Standard cube (125 positions)
- `7*7*7` - Large cube (343 positions)
- `9*9*2` - Wide board (162 positions)
**2D Boards (Traditional Go):**
- `9*9*1` - Small board (81 positions)
- `13*13*1` - Medium board (169 positions)
- `19*19*1` - Standard board (361 positions)
### Implementation Details
**File:** `tools/generateRandomGames.ts`
**Key Functions:**
- `generateRandomGame()` - Simulates a complete random game
- `getValidMoves()` - Finds all legal moves for current player
- `selectRandomMove()` - Randomly picks from valid moves
- `generateBatch()` - Generates multiple games in parallel
**Safety Features:**
- Validates all moves using game rules (Ko, suicide, occupation)
- Handles cases where no valid moves exist (must pass)
- Respects double-pass game end condition
- Progress indicator for large batches
- Error handling and validation
### Dependencies
- **tsx** - TypeScript execution
- **yargs** - Advanced command-line argument parsing with validation
- **TrigoGame** - Core game logic from `inc/trigo/game.ts`
- **Node.js fs/path** - File system operations
---
For more information about TGN format, see `/tests/game/trigoGame.tgn.test.ts`