wip filled quarters points

This commit is contained in:
Henri Bourcereau 2024-06-24 21:22:27 +02:00
parent 41f8b0ac6e
commit 14baf5c9e3
2 changed files with 52 additions and 15 deletions

View file

@ -811,4 +811,16 @@ mod tests {
);
assert!(state.moves_possible(&moves));
}
#[test]
fn filling_moves_sequences() {
let mut state = MoveRules::default();
state.board.set_positions([
3, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
]);
state.dice.values = (2, 1);
let filling_moves_sequences = state.get_quarter_filling_moves_sequences();
println!("{:?}", filling_moves_sequences);
assert_eq!(2, filling_moves_sequences.len());
}
}

View file

@ -104,13 +104,24 @@ impl PointsRules {
}
}
fn get_jans(&self, board_ini: &Board, dices: &Vec<u8>) -> PossibleJans {
let mut dices_reversed = dices.clone();
dices_reversed.reverse();
fn get_jans(&self, board_ini: &Board) -> PossibleJans {
let dices = &vec![self.dice.values.0, self.dice.values.1];
let dices_reversed = &vec![self.dice.values.1, self.dice.values.0];
// « JAN DE RÉCOMPENSE »
// Battre à vrai une dame située dans la table des grands jans
// Battre à vrai une dame située dans la table des petits jans
let mut jans = self.get_jans_by_dice_order(board_ini, dices);
let jans_revert_dices = self.get_jans_by_dice_order(board_ini, &dices_reversed);
let jans_revert_dices = self.get_jans_by_dice_order(board_ini, dices_reversed);
jans.merge(jans_revert_dices);
// « JAN DE REMPLISSAGE »
// Faire un petit jan, un grand jan ou un jan de retour
let filling_moves_sequences = self.move_rules.get_quarter_filling_moves_sequences();
if !filling_moves_sequences.is_empty() {
jans.insert(Jan::FilledQuarter, filling_moves_sequences);
}
jans
}
@ -192,14 +203,20 @@ impl PointsRules {
pub fn get_points(&self) -> i8 {
let mut points: i8 = 0;
let jans = self.get_jans(&self.board, &vec![self.dice.values.0, self.dice.values.1]);
// « JAN DE RÉCOMPENSE »
// Battre à vrai une dame située dans la table des grands jans
// Battre à vrai une dame située dans la table des petits jans
// TODO : Battre le coin adverse
let jans = self.get_jans(&self.board);
points += jans.into_iter().fold(0, |acc: i8, (jan, moves)| {
acc + jan.get_points(self.dice.is_double()) * (moves.len() as i8)
});
// Jans de remplissage
let filling_moves_sequences = self.move_rules.get_quarter_filling_moves_sequences();
points += 4 * filling_moves_sequences.len() as i8;
// « JAN DE REMPLISSAGE »
// Faire un petit jan, un grand jan ou un jan de retour
// let filling_moves_sequences = self.move_rules.get_quarter_filling_moves_sequences();
// points += 4 * filling_moves_sequences.len() as i8;
// cf. https://fr.wikipedia.org/wiki/Trictrac
// Points par simple par moyen | Points par doublet par moyen Nombre de moyens possibles Bénéficiaire
// « JAN RARE »
@ -208,19 +225,12 @@ impl PointsRules {
// Jan de mézéas 4 6 1 Joueur
// Contre jan de deux tables 4 6 1 Adversaire
// Contre jan de mézéas 4 6 1 Adversaire
// « JAN DE RÉCOMPENSE »
// Battre à vrai une dame située dans la table des grands jans 2 | 4 1, 2 ou 3 (sauf doublet) Joueur
// Battre à vrai une dame située dans la table des petits jans 4 | 6 1, 2 ou 3 Joueur
// Battre le coin adverse 4 6 1 Joueur
// « JAN QUI NE PEUT »
// Battre à faux une dame
// située dans la table des grands jans 2 4 1 Adversaire
// Battre à faux une dame
// située dans la table des petits jans 4 6 1 Adversaire
// Pour chaque dé non jouable (dame impuissante) 2 2 n/a Adversaire
// « JAN DE REMPLISSAGE »
// Faire un petit jan, un grand jan ou un jan de retour 4 1, 2, ou 3 Joueur
// 6 1 ou 2 Joueur
// Conserver un petit jan, un grand jan ou un jan de retour 4 6 1 Joueur
// « AUTRE »
// Sortir le premier toutes ses dames 4 6 n/a Joueur
@ -320,11 +330,26 @@ mod tests {
#[test]
fn get_points() {
// ----- Jan de récompense
let mut rules = PointsRules::default();
rules.board.set_positions([
2, 0, -1, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
]);
rules.dice = Dice { values: (2, 3) };
assert_eq!(12, rules.get_points());
// ---- Jan de remplissage
let mut rules = PointsRules::default();
rules.board.set_positions([
2, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
]);
rules.dice = Dice { values: (1, 1) };
assert_eq!(6, rules.get_points());
rules.board.set_positions([
3, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
]);
rules.dice = Dice { values: (2, 1) };
assert_eq!(8, rules.get_points());
}
}