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);
}
let winner = (player.len()
+ stack
let (stack_winner, winning_card) = stack
.iter()
.enumerate()
.max_by_key(|(_, &c)| {
@ -148,20 +147,30 @@ pub fn herzen(player: &[Box<dyn Player>], starting_player: usize, rng: &mut impl
0
}
})
.unwrap()
.0
- round_starting_player)
% player.len();
.unwrap();
let winner = (stack_winner + round_starting_player) % player.len();
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;
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:?}");
points

View file

@ -122,9 +122,13 @@ mod player;
// }
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::cli::Cli {}),
];
let mut rng = SmallRng::from_entropy();