From 8ae619ce260f4e6802ebe6ef8398a5c79dda6330 Mon Sep 17 00:00:00 2001 From: Henri Bourcereau Date: Thu, 26 Sep 2024 17:41:03 +0200 Subject: [PATCH] =?UTF-8?q?wip:=20relev=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- store/src/game.rs | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/store/src/game.rs b/store/src/game.rs index ae4963f..44f2c18 100644 --- a/store/src/game.rs +++ b/store/src/game.rs @@ -27,6 +27,7 @@ pub enum TurnStage { RollDice, RollWaiting, MarkPoints, + HoldOrGoChoice, Move, MarkAdvPoints, } @@ -133,8 +134,9 @@ impl GameState { TurnStage::RollWaiting => "000", TurnStage::RollDice => "001", TurnStage::MarkPoints => "010", - TurnStage::Move => "011", - TurnStage::MarkAdvPoints => "100", + TurnStage::HoldOrGoChoice => "011", + TurnStage::Move => "100", + TurnStage::MarkAdvPoints => "101", }; pos_bits.push_str(step_bits); @@ -273,6 +275,20 @@ impl GameState { // return false; // } } + Go { player_id } => { + if !self.players.contains_key(player_id) { + error!("Player {} unknown", player_id); + return false; + } + // Check player is currently the one making their move + if self.active_player_id != *player_id { + return false; + } + // Check the player can leave (ie the game is in the KeepOrLeaveChoice stage) + if self.turn_stage != TurnStage::HoldOrGoChoice { + return false; + } + } Move { player_id, moves } => { // Check player exists if !self.players.contains_key(player_id) { @@ -284,6 +300,12 @@ impl GameState { error!("Player not active : {}", self.active_player_id); return false; } + // Check the turn stage + if self.turn_stage != TurnStage::HoldOrGoChoice + || self.turn_stage != TurnStage::Move + { + return false; + } let color = &self.players[player_id].color; let rules = MoveRules::new(color, &self.board, self.dice); @@ -411,6 +433,15 @@ impl GameState { }; } } + Go { player_id } => { + // TODO: + // - réinitialiser dice_roll_count + // - échanger les couleurs + // - remettre les dames des deux joueurs aux talons + // - joueur actif = joueur ayant sorti ses dames (donc deux jeux successifs) + // - jeton bredouille replaçé sur joueur actif (?) + self.turn_stage = TurnStage::RollDice; + } Move { player_id, moves } => { let player = self.players.get(player_id).unwrap(); self.board.move_checker(&player.color, moves.0).unwrap(); @@ -497,6 +528,9 @@ pub enum GameEvent { player_id: PlayerId, points: u8, }, + Go { + player_id: PlayerId, + }, Move { player_id: PlayerId, moves: (CheckerMove, CheckerMove),