diff --git a/bot/src/lib.rs b/bot/src/lib.rs index 5508f32..c53c5b1 100644 --- a/bot/src/lib.rs +++ b/bot/src/lib.rs @@ -52,6 +52,10 @@ impl Bot { // println!("bot player_id {:?}", self.player_id); if self.game.active_player_id == self.player_id { return match self.game.turn_stage { + TurnStage::MarkAdvPoints => Some(GameEvent::Mark { + player_id: self.player_id, + points: self.calculate_adv_points(), + }), TurnStage::RollDice => Some(GameEvent::Roll { player_id: self.player_id, }), @@ -70,8 +74,13 @@ impl Bot { } fn calculate_points(&self) -> u8 { - // self.game.get_points().iter().map(|r| r.0).sum() - 0 + let points_rules = PointsRules::new(&Color::White, &self.game.board, self.game.dice); + points_rules.get_points().0 + } + + fn calculate_adv_points(&self) -> u8 { + let points_rules = PointsRules::new(&Color::White, &self.game.board, self.game.dice); + points_rules.get_points().1 } fn choose_move(&self) -> (CheckerMove, CheckerMove) { diff --git a/store/src/game.rs b/store/src/game.rs index 2ce55bf..1bb7c7d 100644 --- a/store/src/game.rs +++ b/store/src/game.rs @@ -28,6 +28,7 @@ pub enum TurnStage { RollWaiting, MarkPoints, Move, + MarkAdvPoints, } /// Represents a TricTrac game @@ -105,12 +106,13 @@ impl GameState { .unwrap_or('0'), // White by default ); - // step -> 2 bits + // step -> 3 bits let step_bits = match self.turn_stage { - TurnStage::RollWaiting => "00", - TurnStage::RollDice => "01", - TurnStage::MarkPoints => "10", - TurnStage::Move => "11", + TurnStage::RollWaiting => "000", + TurnStage::RollDice => "001", + TurnStage::MarkPoints => "010", + TurnStage::Move => "011", + TurnStage::MarkAdvPoints => "100", }; pos_bits.push_str(step_bits); @@ -365,7 +367,11 @@ impl GameState { Mark { player_id, points } => { self.mark_points(*player_id, *points); if self.stage != Stage::Ended { - self.turn_stage = TurnStage::Move; + self.turn_stage = if self.turn_stage == TurnStage::MarkAdvPoints { + TurnStage::RollDice + } else { + TurnStage::Move + }; } } Move { player_id, moves } => { @@ -373,7 +379,7 @@ impl GameState { self.board.move_checker(&player.color, moves.0).unwrap(); self.board.move_checker(&player.color, moves.1).unwrap(); self.active_player_id = *self.players.keys().find(|id| *id != player_id).unwrap(); - self.turn_stage = TurnStage::RollDice; + self.turn_stage = TurnStage::MarkAdvPoints; } } @@ -446,6 +452,6 @@ mod tests { state.add_player(2, Player::new("player2".into(), Color::Black)); let string_id = state.to_string_id(); // println!("string_id : {}", string_id); - assert!(string_id == "Dz8+AAAAAT8/MAAAAAQAADAD"); + assert!(string_id == "Hz88AAAAAz8/IAAAAAQAADAD"); } } diff --git a/store/src/game_rules_points.rs b/store/src/game_rules_points.rs index 187e3c9..5d7c43a 100644 --- a/store/src/game_rules_points.rs +++ b/store/src/game_rules_points.rs @@ -441,7 +441,7 @@ impl PointsRules { jans } - pub fn get_points(&self) -> (i8, i8) { + pub fn get_points(&self) -> (u8, u8) { let jans = self.get_jans(&self.board); let (points, adv_points) = jans .into_iter() @@ -460,7 +460,7 @@ impl PointsRules { } }); - (points, adv_points) + (points as u8, adv_points as u8) } }