Fix winning stack bug
This commit is contained in:
parent
c2d97173f2
commit
7d95a71c5d
2 changed files with 30 additions and 17 deletions
41
src/game.rs
41
src/game.rs
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue