From 1af5694b7126a566c2429a4fa80adb0fe28afd58 Mon Sep 17 00:00:00 2001 From: Henri Bourcereau Date: Fri, 14 Jun 2024 19:07:33 +0200 Subject: [PATCH] get_jans check quit corner --- store/src/game_rules_moves.rs | 2 +- store/src/game_rules_points.rs | 24 ++++++++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/store/src/game_rules_moves.rs b/store/src/game_rules_moves.rs index 067058a..a0bbcfb 100644 --- a/store/src/game_rules_moves.rs +++ b/store/src/game_rules_moves.rs @@ -140,7 +140,7 @@ impl MoveRules { } /// ---- moves_allowed : Third of three checks for moves - fn moves_allowed(&self, moves: &(CheckerMove, CheckerMove)) -> Result<(), MoveError> { + pub fn moves_allowed(&self, moves: &(CheckerMove, CheckerMove)) -> Result<(), MoveError> { self.check_corner_rules(&moves)?; if self.is_move_by_puissance(moves) { diff --git a/store/src/game_rules_points.rs b/store/src/game_rules_points.rs index e44bed3..7b2e928 100644 --- a/store/src/game_rules_points.rs +++ b/store/src/game_rules_points.rs @@ -91,10 +91,19 @@ impl PointsRules { from + dice as usize }; if let Ok(cmove) = CheckerMove::new(from, to) { - // On vérifie qu'on ne va pas sur le coin de l'adversaire ni sur son - // propre coin de repos avec une seule dame + // let res = state.moves_allowed(&moves); + // if res.is_ok() { + // println!("dice : {:?}, res : {:?}", dice, res); + // On vérifie que le mouvement n'est pas interdit par les règles des coins de + // repos : + // - on ne va pas sur le coin de l'adversaire + // - ni sur son propre coin de repos avec une seule dame + // - on ne sort pas de son coin de repos s'il ni reste que deux dames let (corner_count, _color) = board.get_field_checkers(corner_field).unwrap(); - if to != adv_corner_field && (to != corner_field || corner_count > 1) { + if to != adv_corner_field + && (to != corner_field || corner_count > 1) + && (from != corner_field || corner_count > 2) + { // println!( // "dice : {}, adv_corn_field : {:?}, from : {}, to : {}, corner_count : {}", // dice, adv_corner_field, from, to, corner_count @@ -236,6 +245,13 @@ mod tests { // println!("jans (dés bloqués) : {:?}", jans.get(&Jan::TrueHit)); assert_eq!(0, jans.len()); + // dé bloqué dans son coin de repos + rules.board.set_positions([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]); + let mut jans = rules.get_jans(&rules.board, &vec![3, 3]); + assert_eq!(0, jans.len()); + // premier dé bloqué, mais tout d'une possible en commençant par le second rules.board.set_positions([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -246,6 +262,6 @@ mod tests { jans.merge(jans_revert_dices); assert_eq!(1, jans.len()); - print!("jans (2) : {:?}", jans.get(&Jan::TrueHit)); + // print!("jans (2) : {:?}", jans.get(&Jan::TrueHit)); } }