wip filled quarters points
This commit is contained in:
parent
41f8b0ac6e
commit
14baf5c9e3
|
|
@ -811,4 +811,16 @@ mod tests {
|
||||||
);
|
);
|
||||||
assert!(state.moves_possible(&moves));
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -104,13 +104,24 @@ impl PointsRules {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_jans(&self, board_ini: &Board, dices: &Vec<u8>) -> PossibleJans {
|
fn get_jans(&self, board_ini: &Board) -> PossibleJans {
|
||||||
let mut dices_reversed = dices.clone();
|
let dices = &vec![self.dice.values.0, self.dice.values.1];
|
||||||
dices_reversed.reverse();
|
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 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);
|
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
|
jans
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -192,14 +203,20 @@ impl PointsRules {
|
||||||
pub fn get_points(&self) -> i8 {
|
pub fn get_points(&self) -> i8 {
|
||||||
let mut points: i8 = 0;
|
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)| {
|
points += jans.into_iter().fold(0, |acc: i8, (jan, moves)| {
|
||||||
acc + jan.get_points(self.dice.is_double()) * (moves.len() as i8)
|
acc + jan.get_points(self.dice.is_double()) * (moves.len() as i8)
|
||||||
});
|
});
|
||||||
|
|
||||||
// Jans de remplissage
|
// « JAN DE REMPLISSAGE »
|
||||||
let filling_moves_sequences = self.move_rules.get_quarter_filling_moves_sequences();
|
// Faire un petit jan, un grand jan ou un jan de retour
|
||||||
points += 4 * filling_moves_sequences.len() as i8;
|
// 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
|
// cf. https://fr.wikipedia.org/wiki/Trictrac
|
||||||
// Points par simple par moyen | Points par doublet par moyen Nombre de moyens possibles Bénéficiaire
|
// Points par simple par moyen | Points par doublet par moyen Nombre de moyens possibles Bénéficiaire
|
||||||
// « JAN RARE »
|
// « JAN RARE »
|
||||||
|
|
@ -208,19 +225,12 @@ impl PointsRules {
|
||||||
// Jan de mézéas 4 6 1 Joueur
|
// Jan de mézéas 4 6 1 Joueur
|
||||||
// Contre jan de deux tables 4 6 1 Adversaire
|
// Contre jan de deux tables 4 6 1 Adversaire
|
||||||
// Contre jan de mézéas 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 »
|
// « JAN QUI NE PEUT »
|
||||||
// Battre à faux une dame
|
// Battre à faux une dame
|
||||||
// située dans la table des grands jans 2 4 1 Adversaire
|
// située dans la table des grands jans 2 4 1 Adversaire
|
||||||
// Battre à faux une dame
|
// Battre à faux une dame
|
||||||
// située dans la table des petits jans 4 6 1 Adversaire
|
// située dans la table des petits jans 4 6 1 Adversaire
|
||||||
// Pour chaque dé non jouable (dame impuissante) 2 2 n/a 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
|
// Conserver un petit jan, un grand jan ou un jan de retour 4 6 1 Joueur
|
||||||
// « AUTRE »
|
// « AUTRE »
|
||||||
// Sortir le premier toutes ses dames 4 6 n/a Joueur
|
// Sortir le premier toutes ses dames 4 6 n/a Joueur
|
||||||
|
|
@ -320,11 +330,26 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn get_points() {
|
fn get_points() {
|
||||||
|
// ----- Jan de récompense
|
||||||
let mut rules = PointsRules::default();
|
let mut rules = PointsRules::default();
|
||||||
rules.board.set_positions([
|
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,
|
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) };
|
rules.dice = Dice { values: (2, 3) };
|
||||||
assert_eq!(12, rules.get_points());
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue