]> git.scottworley.com Git - pluta-lesnura/blobdiff - src/main.rs
Configurable draw chance for momentum play
[pluta-lesnura] / src / main.rs
index 172d58e742ae7c2c5b7fa06bab428ba71b50939c..c7c1c9268a055a1ffcd71cf0f2e93095aa49d352 100644 (file)
@@ -12,8 +12,14 @@ struct Cli {
 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, long)]
+        #[arg(short = 'p', long)]
         num_players: usize,
     },
 }
@@ -22,16 +28,23 @@ fn main() -> Result<(), &'static str> {
     let cli = Cli::parse();
 
     match &cli.command {
-        Some(Commands::Sim { num_players }) => {
-            let players: Vec<_> = std::iter::from_fn(|| Some(Player::new(random_player)))
-                .take(*num_players)
-                .collect();
-            let mut game = Game::default();
-            for _ in 0..*num_players {
-                game.add_player();
+        Some(Commands::Sim {
+            draw_chance,
+            num_games,
+            num_players,
+        }) => {
+            for _ in 0..*num_games {
+                let players: Vec<_> =
+                    std::iter::from_fn(|| Some(Player::new(random_player(*draw_chance))))
+                        .take(*num_players)
+                        .collect();
+                let mut game = Game::default();
+                for _ in 0..*num_players {
+                    game.add_player();
+                }
+                let result = play(game, players)?;
+                println!("Result: {result:?}");
             }
-            let result = play(game, players)?;
-            println!("Result: {result:?}");
             Ok(())
         }
         None => unreachable!(),