feat: points : sortir le premier toutes ses dames
This commit is contained in:
parent
5fd11f7ef2
commit
8be3de3ede
|
|
@ -1,3 +1,4 @@
|
|||
use std::cmp;
|
||||
use std::collections::HashMap;
|
||||
|
||||
use crate::board::{Board, EMPTY_MOVE};
|
||||
|
|
@ -13,6 +14,7 @@ enum Jan {
|
|||
TrueHitSmallJan,
|
||||
TrueHitBigJan,
|
||||
TrueHitOpponentCorner,
|
||||
FirstPlayerToExit,
|
||||
// jans de récompense :
|
||||
// - battre une dame seule (par autant de façons de le faire, y compris
|
||||
// utilisant une dame du coin de repos)
|
||||
|
|
@ -169,6 +171,39 @@ impl PointsRules {
|
|||
jans.insert(Jan::FilledQuarter, filling_moves_sequences);
|
||||
}
|
||||
|
||||
// « AUTRE »
|
||||
// sortir le premier toutes ses dames
|
||||
let mut checkers = board_ini.get_color_fields(Color::White);
|
||||
checkers.sort_by(|a, b| b.0.cmp(&a.0));
|
||||
let checkers_count = checkers.iter().fold(0, |acc, (_f, count)| acc + count);
|
||||
if checkers_count < 3 {
|
||||
let mut farthest = 24;
|
||||
let mut next_farthest = 24;
|
||||
if let Some((field, count)) = checkers.first() {
|
||||
farthest = *field;
|
||||
if *count > 1 {
|
||||
next_farthest = *field;
|
||||
} else if let Some((field, _count)) = checkers.get(1) {
|
||||
next_farthest = *field;
|
||||
}
|
||||
}
|
||||
|
||||
if farthest + cmp::max(self.dice.values.0, self.dice.values.1) as usize > 23
|
||||
&& next_farthest + cmp::min(self.dice.values.0, self.dice.values.1) as usize > 23
|
||||
{
|
||||
let exit_moves = vec![(
|
||||
CheckerMove::new(farthest, 0).unwrap(),
|
||||
if checkers_count > 1 {
|
||||
CheckerMove::new(next_farthest, 0).unwrap()
|
||||
} else {
|
||||
CheckerMove::new(0, 0).unwrap()
|
||||
},
|
||||
)];
|
||||
|
||||
jans.insert(Jan::FirstPlayerToExit, exit_moves);
|
||||
}
|
||||
}
|
||||
|
||||
jans
|
||||
}
|
||||
|
||||
|
|
@ -433,5 +468,19 @@ mod tests {
|
|||
]);
|
||||
rules.set_dice(Dice { values: (1, 1) });
|
||||
assert_eq!(6, rules.get_points());
|
||||
|
||||
// Sortir toutes ses dames avant l'adversaire (simple)
|
||||
rules.update_positions([
|
||||
0, 0, -2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
||||
]);
|
||||
rules.set_dice(Dice { values: (3, 1) });
|
||||
assert_eq!(4, rules.get_points());
|
||||
|
||||
// Sortir toutes ses dames avant l'adversaire (doublet)
|
||||
rules.update_positions([
|
||||
0, 0, -2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
||||
]);
|
||||
rules.set_dice(Dice { values: (2, 2) });
|
||||
assert_eq!(6, rules.get_points());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue