]> git.scottworley.com Git - pluta-lesnura/blobdiff - src/main.rs
Test with momentum_player
[pluta-lesnura] / src / main.rs
index 16bb4f790910ff5e2be89ac6a50d211a8abae850..31d95878815930d663acefc8ddbd74ff73144677 100644 (file)
@@ -1,5 +1,5 @@
-use clap::{Parser, Subcommand};
-use pluta_lesnura::{play, random_player, Game, Player};
+use clap::{Parser, Subcommand, ValueEnum};
+use pluta_lesnura::{momentum_player, play, random_player, Game};
 
 #[derive(Parser)]
 #[command(author, version, about, long_about = None, arg_required_else_help = true)]
@@ -8,16 +8,28 @@ struct Cli {
     command: Option<Commands>,
 }
 
+#[derive(Clone, Debug, ValueEnum)]
+enum Strategy {
+    Random,
+    Momentum,
+}
+
 #[derive(Subcommand)]
 enum Commands {
     /// Runs simulations
     Sim {
+        /// For momentum play, draw how often?  0-1
+        #[arg(short = 'p', long, default_value_t = 0.5)]
+        draw_chance: f64,
         /// How many games?
         #[arg(short = 'g', long, default_value_t = 1)]
         num_games: usize,
         /// How many players?
         #[arg(short = 'p', long)]
         num_players: usize,
+        /// What strategy should players use?
+        #[arg(short = 's', long, value_enum)]
+        strategy: Strategy,
     },
 }
 
@@ -26,11 +38,17 @@ fn main() -> Result<(), &'static str> {
 
     match &cli.command {
         Some(Commands::Sim {
+            draw_chance,
             num_games,
             num_players,
+            strategy,
         }) => {
+            let player = || match strategy {
+                Strategy::Random => random_player(*draw_chance),
+                Strategy::Momentum => momentum_player(random_player(*draw_chance)),
+            };
             for _ in 0..*num_games {
-                let players: Vec<_> = std::iter::from_fn(|| Some(Player::new(random_player)))
+                let players: Vec<_> = std::iter::from_fn(|| Some(player()))
                     .take(*num_players)
                     .collect();
                 let mut game = Game::default();