monster-ugi
## Overview
`monster-ugi` is a fairy chess engine wrapper written in Rust for engines written using the `monster-chess` move generation library. It easily allows you to expose an API for your engine, and connect it to one of the **UCI**, **UAI**, or **UGI** protocols. It primarily aims for your engine to be compatible with [cutegames](https://github.com/kz04px/cutegames). Cutegames uses the [UGI](https://github.com/kz04px/cutegames/blob/master/ugi.md) protocol, which is a superset of the existing [UCI](https://backscattering.de/chess/uci/) and UAI protocols respectfully. To use it, implement the `EngineBehavior` trait:
```rust
impl EngineBehavior for RandomEngine {
fn select_move(&mut self, board: &mut Board, time_control: TimeControl) -> MoveSelectionResults {
let best_move = *board.generate_legal_moves(0).choose(&mut self.0).expect("Could not find a move to pick between for random movegen.");
MoveSelectionResults {
best_move,
evaluation: 0
}
}
fn get_engine_info(&mut self) -> EngineInfo {
EngineInfo {
name: "Random",
author: "Corman"
}
}
fn is_ready(&mut self) -> bool {
true
}
fn stop_search(&mut self) {}
}
```
Then create an instance of engine:
```rust
let engine = Engine {
behavior: RandomEngine::new(thread_rng()),
game: Chess::create()
}
```
and run UGI.
```rust
run_ugi(engine);
```
## License
`monster-ugi` available under the
[MIT license](https://opensource.org/licenses/MIT). See
[LICENSE](https://github.com/chesstastic-org/monster-ugi/blob/main/LICENSE) for the full
license text.