fix: ajout étape de marquage de points par l'adversaire avant jet de dés

This commit is contained in:
Henri Bourcereau 2024-09-20 20:39:18 +02:00
parent 4c17148315
commit 08fd067a95
3 changed files with 27 additions and 12 deletions

View file

@ -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) {

View file

@ -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");
}
}

View file

@ -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)
}
}