othello/src/main.rs
2025-04-08 15:36:52 -04:00

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();
}