wip: relevé

This commit is contained in:
Henri Bourcereau 2024-09-26 17:41:03 +02:00
parent fc58768006
commit 8ae619ce26

View file

@ -27,6 +27,7 @@ pub enum TurnStage {
RollDice, RollDice,
RollWaiting, RollWaiting,
MarkPoints, MarkPoints,
HoldOrGoChoice,
Move, Move,
MarkAdvPoints, MarkAdvPoints,
} }
@ -133,8 +134,9 @@ impl GameState {
TurnStage::RollWaiting => "000", TurnStage::RollWaiting => "000",
TurnStage::RollDice => "001", TurnStage::RollDice => "001",
TurnStage::MarkPoints => "010", TurnStage::MarkPoints => "010",
TurnStage::Move => "011", TurnStage::HoldOrGoChoice => "011",
TurnStage::MarkAdvPoints => "100", TurnStage::Move => "100",
TurnStage::MarkAdvPoints => "101",
}; };
pos_bits.push_str(step_bits); pos_bits.push_str(step_bits);
@ -273,6 +275,20 @@ impl GameState {
// return false; // 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 } => { Move { player_id, moves } => {
// Check player exists // Check player exists
if !self.players.contains_key(player_id) { if !self.players.contains_key(player_id) {
@ -284,6 +300,12 @@ impl GameState {
error!("Player not active : {}", self.active_player_id); error!("Player not active : {}", self.active_player_id);
return false; 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 color = &self.players[player_id].color;
let rules = MoveRules::new(color, &self.board, self.dice); 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 } => { Move { player_id, moves } => {
let player = self.players.get(player_id).unwrap(); let player = self.players.get(player_id).unwrap();
self.board.move_checker(&player.color, moves.0).unwrap(); self.board.move_checker(&player.color, moves.0).unwrap();
@ -497,6 +528,9 @@ pub enum GameEvent {
player_id: PlayerId, player_id: PlayerId,
points: u8, points: u8,
}, },
Go {
player_id: PlayerId,
},
Move { Move {
player_id: PlayerId, player_id: PlayerId,
moves: (CheckerMove, CheckerMove), moves: (CheckerMove, CheckerMove),