minimax/README.md

28 lines
1.6 KiB
Markdown
Raw Normal View History

2024-03-05 14:35:26 -08:00
# Minimax
2024-03-05 14:22:30 -08:00
## Rules
This game is played in two rounds, starting with an empty eleven-space board. Red always goes first.
On Red's board (i.e, duing the first round), Red's job is to maximize the value of the expression; Blue's job is to minimize it.
Players take turns placing the fourteen symbols `0123456789+-×÷` on the board, with the maximizing player taking the first move.
A board's syntax must always be valid. Namely, the following rules are enforced:
- Each symbol may only be used once
- The binary operators `+-×÷` may not be next to one another, and may not be at the end slots.
- The unary operator `-` (negative) must have a number as an argument. Therefore, it cannot be left of an operator (like `-×`), and it may not be in the rightmost slot.
- `0` may not follow `÷`. This prevents most cases of zero-division, but isn't perfect. `÷-0` will break the game, and `÷0_+` is forbidden despite being valid syntax once the empty slot is filled (for example, with `÷03+`). This is done to simplyify game logic, and might be improved later.
## Building & Running
As always, run this project with `cargo run`. The app takes one argument by default: the name of the blue player. This can be any of the following:
- `human`: Play against a human
- `random`: Play against a random agent (very easy)
2024-03-05 14:35:26 -08:00
- `chase`: Play against a simple extremum-chasing agent (easy)
2024-03-05 14:22:30 -08:00
- `diffuse`: Play against a slightly more intellegent extremum chaser (medium)
For example, `cargo run -- random` will play a game against a random player.
Additional options are available, see `cargo run -- --help`.