Fix winning stack bug

This commit is contained in:
hal8174 2025-07-10 18:04:19 +02:00
parent c2d97173f2
commit 7d95a71c5d
Signed by: hal8174
SSH key fingerprint: SHA256:JwuqS+eVfISfKr+DkDQ6NWAbGd1jFAHkPpCM1yCnlTs
2 changed files with 30 additions and 17 deletions

View file

@ -137,8 +137,7 @@ pub fn herzen(player: &[Box<dyn Player>], starting_player: usize, rng: &mut impl
stack.push(played_card); stack.push(played_card);
} }
let winner = (player.len() let (stack_winner, winning_card) = stack
+ stack
.iter() .iter()
.enumerate() .enumerate()
.max_by_key(|(_, &c)| { .max_by_key(|(_, &c)| {
@ -148,20 +147,30 @@ pub fn herzen(player: &[Box<dyn Player>], starting_player: usize, rng: &mut impl
0 0
} }
}) })
.unwrap() .unwrap();
.0
- round_starting_player) let winner = (stack_winner + round_starting_player) % player.len();
% player.len();
let cost = stack.iter().map(|c| c.cost()).sum::<u8>(); let cost = stack.iter().map(|c| c.cost()).sum::<u8>();
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; points[winner] += cost;
round_starting_player = winner; round_starting_player = winner;
} }
let remainder = &full_deck[hand_size * player.len()..];
let remainder_cost = remainder.iter().map(|c| c.cost()).sum::<u8>();
println!(
"## Player {round_starting_player} takes the remaining cards {remainder:?}, {remainder_cost} points"
);
points[round_starting_player] += remainder_cost;
println!("## Game ended. Points: {points:?}"); println!("## Game ended. Points: {points:?}");
points points

View file

@ -122,9 +122,13 @@ mod player;
// } // }
fn main() { fn main() {
let player: [Box<dyn Player>; 2] = [ let player: Vec<Box<dyn Player>> = 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::highest::Highest {}),
Box::new(player::highest::Highest {}),
Box::new(player::cli::Cli {}),
]; ];
let mut rng = SmallRng::from_entropy(); let mut rng = SmallRng::from_entropy();