From 5741a6894bcad0963a948b28de5ded29a3f929c9 Mon Sep 17 00:00:00 2001 From: Henri Bourcereau Date: Fri, 27 Sep 2024 12:35:14 +0200 Subject: [PATCH] feat: determine winner --- client_cli/src/app.rs | 15 ++++++++++++++- store/src/game.rs | 12 ++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/client_cli/src/app.rs b/client_cli/src/app.rs index 80b157a..0486e86 100644 --- a/client_cli/src/app.rs +++ b/client_cli/src/app.rs @@ -201,10 +201,23 @@ impl App { } pub fn display(&mut self) -> String { + let winner = self + .game + .state + .determine_winner() + .and_then(|id| self.game.state.players.get(&id)); + let str_won: String = winner + .map(|p| { + let mut name = " winner: ".to_owned(); + name.push_str(&p.name); + name + }) + .unwrap_or("".to_owned()); let mut output = "-------------------------------".to_owned(); output += format!( - "\n{:?} > {} > {:?}", + "\n{:?}{} > {} > {:?}", self.game.state.stage, + str_won, self.game .state .who_plays() diff --git a/store/src/game.rs b/store/src/game.rs index cf2bdf5..2d85873 100644 --- a/store/src/game.rs +++ b/store/src/game.rs @@ -433,7 +433,7 @@ impl GameState { }; } } - Go { player_id } => self.new_pick_up() + Go { player_id } => self.new_pick_up(), Move { player_id, moves } => { let player = self.players.get(player_id).unwrap(); self.board.move_checker(&player.color, moves.0).unwrap(); @@ -457,12 +457,11 @@ impl GameState { self.players.iter_mut().map(|(id, p)| p.dice_roll_count = 0); // joueur actif = joueur ayant sorti ses dames (donc deux jeux successifs) self.turn_stage = TurnStage::RollDice; - + // TODO: // - échanger les couleurs // - remettre les dames des deux joueurs aux talons // - jeton bredouille replaçé sur joueur actif (?) - } fn get_rollresult_points(&self, dice: &Dice) -> (u8, u8) { @@ -473,7 +472,12 @@ impl GameState { /// Determines if someone has won the game pub fn determine_winner(&self) -> Option { - None + // A player has won if he has got 12 holes + self.players + .iter() + .filter(|(id, p)| p.holes > 11) + .map(|(id, p)| *id) + .next() } fn inc_roll_count(&mut self, player_id: PlayerId) {