Open source Rust library containing common Tic Tac Toe functionality.
Add this to your Cargo.toml
:
toml
[dependencies]
open_ttt_lib = "0.1.2"
See the library's documentation for complete details on the library's API.
Below is a short example of using this library.
```rust use opentttlib::{ai, board, game};
fn main() -> Result<(), Box
// Pick a position to place a mark. Positions are zero based.
// An error result is returned if the position is outside the bounds
// of the board, the position is already owned, or the game is over.
let position = board::Position { row: 0, column: 2 };
game.do_move(position)?;
// do_move() updates the game state. The state indicates the player
// who gets to place to next mark or, if the game is over, the
// outcome of the game.
match game.state() {
game::State::PlayerXMove => println!("X's turn."),
game::State::PlayerOMove => println!("O's turn."),
game::State::PlayerXWin(_) => println!("Game Over: X wins!"),
game::State::PlayerOWin(_) => println!("Game Over: O wins!"),
game::State::CatsGame => println!("Game Over: cat's game."),
};
// Have an unbeatable AI opponent pick a move.
let mistake_probability = 0.0;
let opponent = ai::Opponent::new(mistake_probability);
if let Some(ai_position) = opponent.get_move(&game) {
game.do_move(ai_position)?;
};
Ok(())
} ```
The examples
directory contains additional examples.
To run the examples, clone this repository then use cargo run --example
. E.g:
text
git clone https://github.com/j-richey/open_ttt_lib.git
cd open_ttt_lib
cargo run --example single_player
This library includes benchmarks that you can use to evaluate if the library
fits in with your performance goals. Use cargo bench
to run the benchmark
suite:
text
git clone https://github.com/j-richey/open_ttt_lib.git
cd open_ttt_lib
cargo bench
Please report issues and feel free to request new features using this project's GitHub issue tracker.
Contributions are welcome! See CONTRIBUTING.md for details on how to contribute to this project.
The library is licensed under the MIT license.