From 7d95a71c5dc38d1450d802e52d5fba6a65045687 Mon Sep 17 00:00:00 2001 From: hal8174 Date: Thu, 10 Jul 2025 18:04:19 +0200 Subject: [PATCH] Fix winning stack bug --- src/game.rs | 41 +++++++++++++++++++++++++---------------- src/main.rs | 6 +++++- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/game.rs b/src/game.rs index 931cc08..9ade5c0 100644 --- a/src/game.rs +++ b/src/game.rs @@ -137,31 +137,40 @@ pub fn herzen(player: &[Box], starting_player: usize, rng: &mut impl stack.push(played_card); } - let winner = (player.len() - + stack - .iter() - .enumerate() - .max_by_key(|(_, &c)| { - if c.color == stack[0].color { - c.value - } else { - 0 - } - }) - .unwrap() - .0 - - round_starting_player) - % player.len(); + let (stack_winner, winning_card) = stack + .iter() + .enumerate() + .max_by_key(|(_, &c)| { + if c.color == stack[0].color { + c.value + } else { + 0 + } + }) + .unwrap(); + + let winner = (stack_winner + round_starting_player) % player.len(); let cost = stack.iter().map(|c| c.cost()).sum::(); - println!("## Player {winner} takes the stack {stack:?} with {cost} points."); + println!( + "## Player {winner} takes the stack {stack:?} with {winning_card:?}, {cost} points" + ); points[winner] += cost; round_starting_player = winner; } + let remainder = &full_deck[hand_size * player.len()..]; + let remainder_cost = remainder.iter().map(|c| c.cost()).sum::(); + + println!( + "## Player {round_starting_player} takes the remaining cards {remainder:?}, {remainder_cost} points" + ); + + points[round_starting_player] += remainder_cost; + println!("## Game ended. Points: {points:?}"); points diff --git a/src/main.rs b/src/main.rs index 4edf67b..9eae78a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -122,9 +122,13 @@ mod player; // } fn main() { - let player: [Box; 2] = [ + let player: Vec> = vec![ Box::new(player::highest::Highest {}), Box::new(player::highest::Highest {}), + Box::new(player::highest::Highest {}), + Box::new(player::highest::Highest {}), + Box::new(player::highest::Highest {}), + Box::new(player::cli::Cli {}), ]; let mut rng = SmallRng::from_entropy();