feat: determine winner

This commit is contained in:
Henri Bourcereau 2024-09-27 12:35:14 +02:00
parent 18bd87e68f
commit 5741a6894b
2 changed files with 22 additions and 5 deletions

View file

@ -201,10 +201,23 @@ impl App {
} }
pub fn display(&mut self) -> String { 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(); let mut output = "-------------------------------".to_owned();
output += format!( output += format!(
"\n{:?} > {} > {:?}", "\n{:?}{} > {} > {:?}",
self.game.state.stage, self.game.state.stage,
str_won,
self.game self.game
.state .state
.who_plays() .who_plays()

View file

@ -433,7 +433,7 @@ impl GameState {
}; };
} }
} }
Go { player_id } => self.new_pick_up() Go { player_id } => self.new_pick_up(),
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();
@ -457,12 +457,11 @@ impl GameState {
self.players.iter_mut().map(|(id, p)| p.dice_roll_count = 0); self.players.iter_mut().map(|(id, p)| p.dice_roll_count = 0);
// joueur actif = joueur ayant sorti ses dames (donc deux jeux successifs) // joueur actif = joueur ayant sorti ses dames (donc deux jeux successifs)
self.turn_stage = TurnStage::RollDice; self.turn_stage = TurnStage::RollDice;
// TODO: // TODO:
// - échanger les couleurs // - échanger les couleurs
// - remettre les dames des deux joueurs aux talons // - remettre les dames des deux joueurs aux talons
// - jeton bredouille replaçé sur joueur actif (?) // - jeton bredouille replaçé sur joueur actif (?)
} }
fn get_rollresult_points(&self, dice: &Dice) -> (u8, u8) { fn get_rollresult_points(&self, dice: &Dice) -> (u8, u8) {
@ -473,7 +472,12 @@ impl GameState {
/// Determines if someone has won the game /// Determines if someone has won the game
pub fn determine_winner(&self) -> Option<PlayerId> { pub fn determine_winner(&self) -> Option<PlayerId> {
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) { fn inc_roll_count(&mut self, player_id: PlayerId) {