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