59 lines
1.8 KiB
Rust
59 lines
1.8 KiB
Rust
use clap::Parser;
|
|
use game::Game;
|
|
use logic::FutureMoveConfig;
|
|
use repr::Piece;
|
|
|
|
mod agent;
|
|
mod allocs;
|
|
mod complexagent;
|
|
mod elo;
|
|
mod game;
|
|
mod game_inner;
|
|
pub mod logic;
|
|
pub mod repr;
|
|
|
|
#[derive(Parser, Debug)]
|
|
#[command(author, version, about, long_about = None)]
|
|
struct Args {
|
|
/// Agent for Black (c=complex, m=manual, r=random) [default: c]
|
|
#[arg(short = 'b', long = "black", default_value = "c", value_parser = ["c", "m", "r"])]
|
|
black_agent: String,
|
|
|
|
/// Agent for White (c=complex, m=manual, r=random) [default: m]
|
|
#[arg(short = 'w', long = "white", default_value = "m", value_parser = ["c", "m", "r"])]
|
|
white_agent: String,
|
|
}
|
|
|
|
fn main() {
|
|
let args = Args::parse();
|
|
|
|
let future_config = FutureMoveConfig {
|
|
max_depth: 20,
|
|
min_arena_depth: 14,
|
|
top_k_children: 2,
|
|
up_to_minus: 10,
|
|
max_arena_size: 400_000_000,
|
|
do_prune: true,
|
|
print: true,
|
|
children_eval_method: Default::default(),
|
|
};
|
|
|
|
// Create agents
|
|
let black_agent: Box<dyn agent::Agent> = match args.black_agent.as_str() {
|
|
"c" => Box::new(complexagent::ComplexAgent::new(Piece::Black, future_config)),
|
|
"m" => Box::new(agent::ManualAgent::new(Piece::Black)),
|
|
"r" => Box::new(agent::RandomAgent::new(Piece::Black)),
|
|
_ => panic!("Invalid agent type for Black - use c/m/r"),
|
|
};
|
|
|
|
let white_agent: Box<dyn agent::Agent> = match args.white_agent.as_str() {
|
|
"c" => Box::new(complexagent::ComplexAgent::new(Piece::White, future_config)),
|
|
"m" => Box::new(agent::ManualAgent::new(Piece::White)),
|
|
"r" => Box::new(agent::RandomAgent::new(Piece::White)),
|
|
_ => panic!("Invalid agent type for White - use c/m/r"),
|
|
};
|
|
|
|
let mut game = Game::new(black_agent, white_agent);
|
|
game.game_loop();
|
|
}
|