diff --git a/store/src/game.rs b/store/src/game.rs index 2bf1c64..d1a88ca 100644 --- a/store/src/game.rs +++ b/store/src/game.rs @@ -8,7 +8,7 @@ use log::{debug, error}; // use itertools::Itertools; use serde::{Deserialize, Serialize}; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use std::hash::{Hash, Hasher}; use std::{fmt, str}; @@ -143,6 +143,27 @@ impl GameState { game } + pub fn mirror(&self) -> GameState { + let mirrored_active_player = if self.active_player_id == 1 { 0 } else { 1 }; + let mut mirrored_players = HashMap::new(); + mirrored_players.insert(1, self.players.get(&2).unwrap().mirror()); + mirrored_players.insert(2, self.players.get(&1).unwrap().mirror()); + GameState { + stage: self.stage, + turn_stage: self.turn_stage, + board: self.board.mirror(), + active_player_id: mirrored_active_player, + players: mirrored_players, + history: Vec::new(), + dice: self.dice, + dice_points: self.dice_points, + dice_moves: (CheckerMove::default(), CheckerMove::default()), + dice_jans: PossibleJans::default(), + roll_first: self.roll_first, + schools_enabled: self.schools_enabled, + } + } + fn set_schools_enabled(&mut self, schools_enabled: bool) { self.schools_enabled = schools_enabled; } diff --git a/store/src/player.rs b/store/src/player.rs index eeb5829..fa1e099 100644 --- a/store/src/player.rs +++ b/store/src/player.rs @@ -48,6 +48,16 @@ impl Player { } } + pub fn mirror(&self) -> Self { + let mut player = self.clone(); + player.color = if self.color == Color::White { + Color::Black + } else { + Color::White + }; + player + } + pub fn to_bits_string(&self) -> String { format!( "{:0>4b}{:0>4b}{:b}{:b}", diff --git a/store/src/pyengine.rs b/store/src/pyengine.rs index eed5d93..bd00267 100644 --- a/store/src/pyengine.rs +++ b/store/src/pyengine.rs @@ -117,6 +117,10 @@ impl TricTrac { self.game_state.to_vec() } + fn get_observation_string(&self, player: PlayerId) -> String { + self.__str__() + } + /// Afficher l'état du jeu (pour le débogage) fn __str__(&self) -> String { format!("{}", self.game_state)