Skip to content

Armavica/board-game-rs

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Crates.io CI status

A Board abstraction for deterministic two player games. This allows for code to be generic over the actual game, so it only needs to written once.

Features

Currently, the implemented games are:

Notable things currently implemented in this crate that work for any Board:

  • Game-playing algorithms, specifically:
    • RandomBot, which simply picks a random move.
    • RolloutBot, which simulates a fixed number of random games for each possible move and picks the one with the best win probability.
    • MinimaxBot, which picks the best move as evaluated by a customizable heuristic at a fixed depth. (implemented as alpha-beta negamax).
    • MCTSBot, which picks the best move as found by Monte Carlo Tree Search.
  • Random board generation functions, see board_gen.
  • A bot vs bot game runner to compare playing strength, see bot_game.
  • Simple game statistics (perft, random game length) which can be used to test Board implementations.

Examples

List the available moves on a board and play a random one.

let mut board = AtaxxBoard::default();
println!("{}", board);

board.available_moves().for_each(|mv| {
println!("{:?}", mv)
});

let mv = board.random_available_move(&mut rng);
println!("Picked move {:?}", mv);
board.play(mv);
println!("{}", board);

Get the best move according to MCTS

let board = AtaxxBoard::default();
println!("{}", board);

let mut bot = MCTSBot::new(1000, 2.0, thread_rng());
println!("{:?}", bot.select_move(&board))

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%