diff --git a/bot/src/lib.rs b/bot/src/lib.rs index 6db3418..8e68234 100644 --- a/bot/src/lib.rs +++ b/bot/src/lib.rs @@ -71,7 +71,7 @@ impl Bot { debug!(">>>> {:?} BOT handle", self.color); let game = self.strategy.get_mut_game(); let internal_event = if self.color == Color::Black { - &event.get_mirror() + &event.get_mirror(false) } else { event }; @@ -126,7 +126,7 @@ impl Bot { return if self.color == Color::Black { debug!(" bot (internal) evt : {internal_event:?} ; points : {player_points:?}"); debug!("<<<< end {:?} BOT handle", self.color); - internal_event.map(|evt| evt.get_mirror()) + internal_event.map(|evt| evt.get_mirror(false)) } else { debug!("<<<< end {:?} BOT handle", self.color); internal_event diff --git a/store/src/game.rs b/store/src/game.rs index cf207d8..edf068b 100644 --- a/store/src/game.rs +++ b/store/src/game.rs @@ -144,7 +144,7 @@ impl GameState { } pub fn mirror(&self) -> GameState { - let mirrored_active_player = if self.active_player_id == 1 { 0 } else { 1 }; + // let mirrored_active_player = if self.active_player_id == 1 { 2 } else { 1 }; let mut mirrored_players = HashMap::new(); if let Some(p2) = self.players.get(&2) { mirrored_players.insert(1, p2.mirror()); @@ -156,7 +156,7 @@ impl GameState { .history .clone() .iter() - .map(|evt| evt.get_mirror()) + .map(|evt| evt.get_mirror(false)) .collect(); let (move1, move2) = self.dice_moves; @@ -164,7 +164,7 @@ impl GameState { stage: self.stage, turn_stage: self.turn_stage, board: self.board.mirror(), - active_player_id: mirrored_active_player, + active_player_id: self.active_player_id, players: mirrored_players, history: mirrored_history, dice: self.dice, @@ -469,10 +469,12 @@ impl GameState { Roll { player_id } => { // Check player exists if !self.players.contains_key(player_id) { + error!("unknown player_id"); return false; } // Check player is currently the one making their move if self.active_player_id != *player_id { + error!("not active player_id"); return false; } // Check the turn stage @@ -902,10 +904,12 @@ impl GameEvent { } } - pub fn get_mirror(&self) -> Self { + pub fn get_mirror(&self, preserve_player: bool) -> Self { // let mut mirror = self.clone(); let mirror_player_id = if let Some(player_id) = self.player_id() { - if player_id == 1 { + if preserve_player { + player_id + } else if player_id == 1 { 2 } else { 1 diff --git a/store/src/pyengine.rs b/store/src/pyengine.rs index 293c85d..4dbd966 100644 --- a/store/src/pyengine.rs +++ b/store/src/pyengine.rs @@ -53,9 +53,14 @@ impl TricTrac { fn get_legal_actions(&self, player_idx: u64) -> Vec { if player_idx == self.current_player_idx() { if player_idx == 0 { + println!("get valid actions for first player"); + println!("{}", self.game_state); get_valid_action_indices(&self.game_state) } else { - get_valid_action_indices(&self.game_state.mirror()) + let mirror = self.game_state.mirror(); + println!("get validd actions for mirror"); + println!("{}", mirror); + get_valid_action_indices(&mirror) } } else { vec![] @@ -87,13 +92,14 @@ impl TricTrac { if let Some(event) = TrictracAction::from_action_index(action_idx).and_then(|a| a.to_event(&self.game_state)) { - println!("get event {:?}", event); + println!(">get event {:?}", event); let event = if self.game_state.active_player_id == 2 { - event.get_mirror() + event.get_mirror(true) } else { event }; + println!("validating event {:?}", event); if self.game_state.validate(&event) { println!("valid event"); self.game_state.consume(&event);