From 41f8b0ac6e4c45014dde1e7e33a0c763fd283231 Mon Sep 17 00:00:00 2001 From: Henri Bourcereau Date: Mon, 24 Jun 2024 18:10:24 +0200 Subject: [PATCH] refact --- store/src/game_rules_moves.rs | 2 +- store/src/game_rules_points.rs | 49 ++++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/store/src/game_rules_moves.rs b/store/src/game_rules_moves.rs index 7a483d1..9787218 100644 --- a/store/src/game_rules_moves.rs +++ b/store/src/game_rules_moves.rs @@ -85,7 +85,7 @@ impl MoveRules { } let (dice1, dice2) = self.dice.values; - let (move1, move2): &(CheckerMove, CheckerMove) = &moves; + let (move1, move2): &(CheckerMove, CheckerMove) = moves; let move1_dices = self.get_move_compatible_dices(move1); if move1_dices.is_empty() { diff --git a/store/src/game_rules_points.rs b/store/src/game_rules_points.rs index 0704f62..7b9a3b4 100644 --- a/store/src/game_rules_points.rs +++ b/store/src/game_rules_points.rs @@ -105,6 +105,16 @@ impl PointsRules { } fn get_jans(&self, board_ini: &Board, dices: &Vec) -> PossibleJans { + let mut dices_reversed = dices.clone(); + dices_reversed.reverse(); + + 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); + jans.merge(jans_revert_dices); + jans + } + + fn get_jans_by_dice_order(&self, board_ini: &Board, dices: &Vec) -> PossibleJans { let mut jans = PossibleJans::default(); let mut dices = dices.clone(); if let Some(dice) = dices.pop() { @@ -157,13 +167,15 @@ impl PointsRules { // Try tout d'une : // - use original board before first die move // - use a virtual dice by adding current dice to remaining dice - let next_dice_jan = self - .get_jans(&board_ini, &dices.iter().map(|d| d + dice).collect()); + let next_dice_jan = self.get_jans_by_dice_order( + &board_ini, + &dices.iter().map(|d| d + dice).collect(), + ); jans.merge(next_dice_jan); } } // Second die - let next_dice_jan = self.get_jans(&board_ini, &dices); + let next_dice_jan = self.get_jans_by_dice_order(&board_ini, &dices); jans.merge(next_dice_jan); } } @@ -180,10 +192,7 @@ impl PointsRules { pub fn get_points(&self) -> i8 { let mut points: i8 = 0; - let mut jans = self.get_jans(&self.board, &vec![self.dice.values.0, self.dice.values.1]); - let jans_revert_dices = - self.get_jans(&self.board, &vec![self.dice.values.1, self.dice.values.0]); - jans.merge(jans_revert_dices); + let jans = self.get_jans(&self.board, &vec![self.dice.values.0, self.dice.values.1]); points += jans.into_iter().fold(0, |acc: i8, (jan, moves)| { acc + jan.get_points(self.dice.is_double()) * (moves.len() as i8) }); @@ -224,28 +233,28 @@ impl PointsRules { mod tests { use super::*; #[test] - fn get_jans() { + fn get_jans_by_dice_order() { 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, ]); - let jans = rules.get_jans(&rules.board, &vec![2, 3]); + let jans = rules.get_jans_by_dice_order(&rules.board, &vec![2, 3]); assert_eq!(1, jans.len()); assert_eq!(3, jans.get(&Jan::TrueHitSmallJan).unwrap().len()); - let jans = rules.get_jans(&rules.board, &vec![2, 2]); + let jans = rules.get_jans_by_dice_order(&rules.board, &vec![2, 2]); assert_eq!(1, jans.len()); assert_eq!(1, jans.get(&Jan::TrueHitSmallJan).unwrap().len()); - // On peut passer par un une dame battue pour battre une autre dame + // On peut passer par une dame battue pour battre une autre dame // mais pas par une case remplie par l'adversaire 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, ]); - let mut jans = rules.get_jans(&rules.board, &vec![2, 3]); - let jans_revert_dices = rules.get_jans(&rules.board, &vec![3, 2]); + let mut jans = rules.get_jans_by_dice_order(&rules.board, &vec![2, 3]); + let jans_revert_dices = rules.get_jans_by_dice_order(&rules.board, &vec![3, 2]); assert_eq!(1, jans.len()); assert_eq!(1, jans_revert_dices.len()); jans.merge(jans_revert_dices); @@ -255,7 +264,7 @@ mod tests { 2, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]); - let jans = rules.get_jans(&rules.board, &vec![2, 3]); + let jans = rules.get_jans_by_dice_order(&rules.board, &vec![2, 3]); assert_eq!(1, jans.len()); assert_eq!(2, jans.get(&Jan::TrueHitSmallJan).unwrap().len()); @@ -263,7 +272,7 @@ mod tests { 2, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]); - let jans = rules.get_jans(&rules.board, &vec![2, 3]); + let jans = rules.get_jans_by_dice_order(&rules.board, &vec![2, 3]); assert_eq!(1, jans.len()); assert_eq!(1, jans.get(&Jan::TrueHitSmallJan).unwrap().len()); @@ -271,7 +280,7 @@ mod tests { 2, 0, 1, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]); - let jans = rules.get_jans(&rules.board, &vec![2, 3]); + let jans = rules.get_jans_by_dice_order(&rules.board, &vec![2, 3]); assert_eq!(1, jans.len()); assert_eq!(3, jans.get(&Jan::TrueHitSmallJan).unwrap().len()); @@ -282,7 +291,7 @@ mod tests { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]); // le premier dé traité est le dernier du vecteur : 1 - let jans = rules.get_jans(&rules.board, &vec![2, 1]); + let jans = rules.get_jans_by_dice_order(&rules.board, &vec![2, 1]); // println!("jans (dés bloqués) : {:?}", jans.get(&Jan::TrueHit)); assert_eq!(0, jans.len()); @@ -290,15 +299,15 @@ mod tests { 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]); + let mut jans = rules.get_jans_by_dice_order(&rules.board, &vec![3, 3]); assert_eq!(1, 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, ]); - let mut jans = rules.get_jans(&rules.board, &vec![3, 1]); - let jans_revert_dices = rules.get_jans(&rules.board, &vec![1, 3]); + let mut jans = rules.get_jans_by_dice_order(&rules.board, &vec![3, 1]); + let jans_revert_dices = rules.get_jans_by_dice_order(&rules.board, &vec![1, 3]); assert_eq!(1, jans_revert_dices.len()); jans.merge(jans_revert_dices);