Documentation & Tweaks

This commit is contained in:
2024-03-05 14:22:30 -08:00
parent 7394e9db0b
commit b344ae359b
3 changed files with 58 additions and 8 deletions

View File

@@ -6,24 +6,39 @@ use crate::{
};
#[derive(Parser, Debug)]
#[command(version, about)]
#[command(about)]
pub struct Cli {
pub red: AgentSelector,
/// The agent that controls the Blue (opponent) player
pub blue: AgentSelector,
/// The agent that controls the Red (home) player
#[arg(long, default_value = "human")]
pub red: AgentSelector,
/// If this is greater than one, repeat the game this many times and print a summary.
/// Best used with --silent.
#[arg(long, short, default_value = "0")]
pub repeat: usize,
/// If this is given, do not print boards.
/// Good for bulk runs with --repeat, bad for human players.
#[arg(long, short, default_value = "false")]
pub silent: bool,
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum AgentSelector {
Random,
Diffuse,
Minimax,
/// A human agent. Asks for input.
Human,
/// A random agent (very easy)
Random,
/// A simple extremum-chaser (easy)
Minimax,
/// A smarter extremum-chaser (medium)
Diffuse,
}
impl AgentSelector {

View File

@@ -59,11 +59,18 @@ fn play(
let mut is_first_turn = true;
let mut is_maxi_turn = true;
let board_label = format!(
"{}{:6}{}",
color::Fg(color::LightBlack),
maxi.player().to_string(),
color::Fg(color::Reset)
);
while !board.is_done() {
// Print board
println!(
"\r{}{}{}{}",
" ".repeat(6),
board_label,
if is_first_turn { '╓' } else { '║' },
board.prettyprint()?,
if is_first_turn { '╖' } else { '║' },
@@ -99,8 +106,8 @@ fn play(
is_maxi_turn = !is_maxi_turn;
}
println!("\r{}{}", " ".repeat(6), board.prettyprint()?);
println!("\r{}{}", " ".repeat(6), " ".repeat(board.size()));
println!("\r{}{}", board_label, board.prettyprint()?);
println!("\r{}{}", board_label, " ".repeat(board.size()));
Ok(board)
}