feat: points : jan de 2 tables

This commit is contained in:
Henri Bourcereau 2024-09-18 16:37:38 +02:00
parent a3278cbe1a
commit 6d785dcb94

View file

@ -1,7 +1,7 @@
use std::cmp;
use std::collections::HashMap;
use crate::board::{Board, EMPTY_MOVE};
use crate::board::{Board, Field, EMPTY_MOVE};
use crate::dice::Dice;
use crate::game_rules_moves::MoveRules;
use crate::player::Color;
@ -16,6 +16,7 @@ enum Jan {
TrueHitOpponentCorner,
FirstPlayerToExit,
SixTables,
TwoTables,
}
impl Jan {
@ -132,7 +133,7 @@ impl PointsRules {
if from0 == from1 {
// doublet
if from0_count > if from0 == corner_field { 3 } else { 0 } {
if from0_count > if from0 == corner_field { 3 } else { 1 } {
jans.insert(Jan::TrueHitOpponentCorner, hit_moves);
}
} else {
@ -217,6 +218,42 @@ impl PointsRules {
}
}
// Jans nécessitant que deux dames uniquement soient sorties du talon
let (talon, candidates): (Vec<(usize, i8)>, Vec<(usize, i8)>) =
checkers.iter().partition(|(field, count)| field == &1);
let candidates_fields = candidates.iter().fold(vec![], |mut acc, (f, c)| {
acc.extend_from_slice(&vec![*f; *c as usize]);
acc
});
if !talon.is_empty() && talon[0].1 == 13 && candidates_fields.len() == 2 {
let field1 = candidates_fields[0];
let field2 = candidates_fields[1];
let dice1 = self.dice.values.0 as usize;
let dice2 = self.dice.values.1 as usize;
// Jan de 2 tables
if (field1 + dice1 == 12 && field2 + dice2 == 13)
|| (field1 + dice2 == 12 && field2 + dice1 == 13)
{
let moves = vec![(
CheckerMove::new(field1, 12).unwrap(),
CheckerMove::new(field2, 13).unwrap(),
)];
jans.insert(Jan::TwoTables, moves);
} else if (field1 + dice1 == 13 && field2 + dice2 == 12)
|| (field1 + dice2 == 13 && field2 + dice1 == 12)
{
let moves = vec![(
CheckerMove::new(field1, 13).unwrap(),
CheckerMove::new(field2, 12).unwrap(),
)];
jans.insert(Jan::TwoTables, moves);
}
// Jan de Mezeas
// Contre jan de 2 tables
// Contre jan de Mezeas
}
jans
}
@ -514,7 +551,19 @@ mod tests {
]);
rules.set_dice(Dice { values: (2, 3) });
assert_eq!(0, rules.get_points());
// Jan de deux tables
rules.update_positions([
13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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());
rules.update_positions([
12, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0,
]);
rules.set_dice(Dice { values: (2, 2) });
assert_eq!(0, rules.get_points());
// Jan de mézéas
// Contre jan de deux tables
// Contre jan de mézéas