]> git.scottworley.com Git - pluta-lesnura/blobdiff - src/main.rs
Start adding smarter play: Try for momentum
[pluta-lesnura] / src / main.rs
index c7c1c9268a055a1ffcd71cf0f2e93095aa49d352..b2924eec6dc917eb32c016843f6a0d590912ad6b 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, Player};
 
 #[derive(Parser)]
 #[command(author, version, about, long_about = None, arg_required_else_help = true)]
@@ -8,6 +8,12 @@ struct Cli {
     command: Option<Commands>,
 }
 
+#[derive(Clone, Debug, ValueEnum)]
+enum Strategy {
+    Random,
+    Momentum,
+}
+
 #[derive(Subcommand)]
 enum Commands {
     /// Runs simulations
@@ -21,6 +27,9 @@ enum Commands {
         /// How many players?
         #[arg(short = 'p', long)]
         num_players: usize,
+        /// What strategy should players use?
+        #[arg(short = 's', long, value_enum)]
+        strategy: Strategy,
     },
 }
 
@@ -32,12 +41,16 @@ fn main() -> Result<(), &'static str> {
             draw_chance,
             num_games,
             num_players,
+            strategy,
         }) => {
+            let player = || match strategy {
+                Strategy::Random => Player::new(random_player(*draw_chance)),
+                Strategy::Momentum => Player::new(momentum_player(*draw_chance)),
+            };
             for _ in 0..*num_games {
-                let players: Vec<_> =
-                    std::iter::from_fn(|| Some(Player::new(random_player(*draw_chance))))
-                        .take(*num_players)
-                        .collect();
+                let players: Vec<_> = std::iter::from_fn(|| Some(player()))
+                    .take(*num_players)
+                    .collect();
                 let mut game = Game::default();
                 for _ in 0..*num_players {
                     game.add_player();