From 8ec46d81e35bbc7c6ac4db26d201450b33c4e60a Mon Sep 17 00:00:00 2001 From: Henri Bourcereau Date: Sun, 30 Jun 2024 12:26:03 +0200 Subject: [PATCH] wip --- store/src/board.rs | 4 ++-- store/src/game_rules_moves.rs | 33 ++++++++++++++++++++++++++++++--- store/src/game_rules_points.rs | 27 +++++++++++++++++++++------ 3 files changed, 53 insertions(+), 11 deletions(-) diff --git a/store/src/board.rs b/store/src/board.rs index 7156332..5528205 100644 --- a/store/src/board.rs +++ b/store/src/board.rs @@ -446,9 +446,9 @@ impl Board { let fields = self.get_quarter_fields(field); !fields.iter().any(|field| { if color == Color::White { - self.positions[field - 1] < 1 + self.positions[field - 1] < 2 } else { - self.positions[field - 1] > -1 + self.positions[field - 1] > -2 } }) } diff --git a/store/src/game_rules_moves.rs b/store/src/game_rules_moves.rs index 80be319..bf5f9a3 100644 --- a/store/src/game_rules_moves.rs +++ b/store/src/game_rules_moves.rs @@ -370,7 +370,7 @@ impl MoveRules { let mut board = self.board.clone(); board.move_checker(color, moves.0).unwrap(); board.move_checker(color, moves.1).unwrap(); - if board.any_quarter_filled(*color) { + if board.any_quarter_filled(*color) && !moves_seqs.contains(&moves) { moves_seqs.push(moves); } } @@ -866,11 +866,38 @@ mod tests { 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, + 3, 3, 1, 2, 2, 2, 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); + // println!("{:?}", filling_moves_sequences); + assert_eq!(2, filling_moves_sequences.len()); + + state.board.set_positions([ + 3, 2, 3, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]); + state.dice.values = (2, 2); + let filling_moves_sequences = state.get_quarter_filling_moves_sequences(); + // println!("{:?}", filling_moves_sequences); assert_eq!(2, filling_moves_sequences.len()); } + + #[test] + fn scoring_filling_moves_sequences() { + let mut state = MoveRules::default(); + + state.board.set_positions([ + 3, 1, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]); + state.dice.values = (2, 1); + assert_eq!(1, state.get_scoring_quarter_filling_moves_sequences().len()); + + state.board.set_positions([ + 2, 3, 3, 3, 1, 2, 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_scoring_quarter_filling_moves_sequences(); + println!("{:?}", filling_moves_sequences); + assert_eq!(3, filling_moves_sequences.len()); + } } diff --git a/store/src/game_rules_points.rs b/store/src/game_rules_points.rs index fe1b310..973e513 100644 --- a/store/src/game_rules_points.rs +++ b/store/src/game_rules_points.rs @@ -117,7 +117,9 @@ impl PointsRules { // « 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(); + let filling_moves_sequences = self + .move_rules + .get_scoring_quarter_filling_moves_sequences(); if !filling_moves_sequences.is_empty() { jans.insert(Jan::FilledQuarter, filling_moves_sequences); } @@ -208,6 +210,7 @@ impl PointsRules { // Battre à vrai une dame située dans la table des petits jans // TODO : Battre le coin adverse let jans = self.get_jans(&self.board); + println!("jans for points : {:?}", jans); points += jans.into_iter().fold(0, |acc: i8, (jan, moves)| { acc + jan.get_points(self.dice.is_double()) * (moves.len() as i8) }); @@ -339,17 +342,29 @@ mod tests { 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, + 3, 1, 2, 2, 3, 2, 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!(4, rules.get_points()); + + rules.board.set_positions([ + 2, 3, 1, 2, 2, 2, 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, + 3, 3, 1, 2, 2, 2, 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()); + rules.dice = Dice { values: (1, 1) }; + assert_eq!(12, rules.get_points()); + + // conservation jan rempli + rules.board.set_positions([ + 3, 3, 2, 2, 2, 2, 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()); } }