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,31 +137,40 @@ 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)| { if c.color == stack[0].color {
if c.color == stack[0].color { c.value
c.value } else {
} else { 0
0 }
} })
}) .unwrap();
.unwrap()
.0 let winner = (stack_winner + round_starting_player) % player.len();
- round_starting_player)
% 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();