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 std::collections::HashMap;
|
||||||
|
|
||||||
use crate::board::{Board, EMPTY_MOVE};
|
use crate::board::{Board, EMPTY_MOVE};
|
||||||
|
|
@ -13,6 +14,7 @@ enum Jan {
|
||||||
TrueHitSmallJan,
|
TrueHitSmallJan,
|
||||||
TrueHitBigJan,
|
TrueHitBigJan,
|
||||||
TrueHitOpponentCorner,
|
TrueHitOpponentCorner,
|
||||||
|
FirstPlayerToExit,
|
||||||
// jans de récompense :
|
// jans de récompense :
|
||||||
// - battre une dame seule (par autant de façons de le faire, y compris
|
// - battre une dame seule (par autant de façons de le faire, y compris
|
||||||
// utilisant une dame du coin de repos)
|
// utilisant une dame du coin de repos)
|
||||||
|
|
@ -169,6 +171,39 @@ impl PointsRules {
|
||||||
jans.insert(Jan::FilledQuarter, filling_moves_sequences);
|
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
|
jans
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -433,5 +468,19 @@ mod tests {
|
||||||
]);
|
]);
|
||||||
rules.set_dice(Dice { values: (1, 1) });
|
rules.set_dice(Dice { values: (1, 1) });
|
||||||
assert_eq!(6, rules.get_points());
|
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