From 5b62addaaaaf58fc718e06ab7b8c8bafb357be93 Mon Sep 17 00:00:00 2001 From: Nick Pegg Date: Sat, 5 Jul 2025 16:45:51 -0700 Subject: [PATCH] more double-down fixes --- src/game.rs | 15 +++++++++------ src/main.rs | 17 ++++++++++++++--- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/game.rs b/src/game.rs index 9316227..bd6ecb9 100644 --- a/src/game.rs +++ b/src/game.rs @@ -173,14 +173,17 @@ impl Game { // if player busts, immediately lose bet if player_hand.value() > 21 { - return EndState::new( - PlayResult::Bust, - dealer_hand.cards(), - player_hand.cards(), - shuffled, - ); + break; } } + if player_hand.value() > 21 { + return EndState::new( + PlayResult::Bust, + dealer_hand.cards(), + player_hand.cards(), + shuffled, + ); + } // Dealer turn while dealer_hand.value() < 17 { diff --git a/src/main.rs b/src/main.rs index 5a61da0..bf0679c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -99,13 +99,19 @@ fn interactive_decision(hand: &Hand, dealer_showing: &Card) -> PlayerChoice { } let choice: PlayerChoice; + let can_dd = hand.cards().len() == 2; loop { - print!("(h)it, (s)tand, (d)ouble-down? "); + let mut msg = String::from("(h)it, (s)tand"); + if can_dd { + msg += ", (d)ouble-down"; + } + msg += "? "; + io::stdout().write_all(msg.as_bytes()).unwrap(); io::stdout().flush().unwrap(); choice = match read_input().to_lowercase().as_ref() { "h" => PlayerChoice::Hit, "s" => PlayerChoice::Stand, - "d" => PlayerChoice::DoubleDown, + "d" if can_dd => PlayerChoice::DoubleDown, _ => continue, }; break; @@ -215,7 +221,12 @@ fn save_bank(bank: u32) { fn load_bank() -> Option { let bank_path = data_dir().join("bank.txt"); if fs::exists(&bank_path).unwrap() { - Some(fs::read_to_string(&bank_path).unwrap().parse().unwrap()) + let bank = fs::read_to_string(&bank_path).unwrap().parse().unwrap(); + if bank > 0 { + Some(bank) + } else { + None + } } else { None }