Source code for chipiron.games.match.match_results

"""This module contains the classes for match results."""

from dataclasses import dataclass
from typing import Protocol

from chipiron.environments.chess_env.move import moveUci
from chipiron.games.game.final_game_result import FinalGameResult


[docs]@dataclass class SimpleResults: """ Represents the simple results of a match. """ player_one_wins: int player_two_wins: int draws: int
[docs]class IMatchResults(Protocol): """ Interface for match results. """
[docs] def add_result_one_game( self, white_player_name_id: str, game_result: FinalGameResult ) -> None: """ Adds the result of one game to the match results. Args: white_player_name_id (str): The ID of the white player. game_result (FinalGameResult): The result of the game. """
[docs] def get_simple_result(self) -> SimpleResults: """ Returns the simple results of the match. Returns: SimpleResults: The simple results of the match. """
[docs] def __str__(self) -> str: """ Returns a string representation of the match results. Returns: str: A string representation of the match results. """
[docs] def finish(self) -> None: """ Finishes the match and marks it as finished. """
[docs]@dataclass class MatchResults: """ Represents the results of a match between two players. """ player_one_name_id: str player_two_name_id: str number_of_games: int = 0 player_one_is_white_white_wins: int = 0 player_one_is_white_black_wins: int = 0 player_one_is_white_draws: int = 0 player_two_is_white_white_wins: int = 0 player_two_is_white_black_wins: int = 0 player_two_is_white_draws: int = 0 match_finished: bool = False
[docs] def get_player_one_wins(self) -> int: """ Returns the number of wins for player one. Returns: int: The number of wins for player one. """ return self.player_one_is_white_white_wins + self.player_two_is_white_black_wins
[docs] def get_player_two_wins(self) -> int: """ Returns the number of wins for player two. Returns: int: The number of wins for player two. """ return self.player_one_is_white_black_wins + self.player_two_is_white_white_wins
[docs] def get_draws(self) -> int: """ Returns the number of draws. Returns: int: The number of draws. """ return self.player_one_is_white_draws + self.player_two_is_white_draws
[docs] def get_simple_result(self) -> SimpleResults: """ Returns the simple results of the match. Returns: SimpleResults: The simple results of the match. """ simple_result: SimpleResults = SimpleResults( player_one_wins=self.get_player_one_wins(), player_two_wins=self.get_player_two_wins(), draws=self.get_draws(), ) return simple_result
[docs] def add_result_one_game( self, white_player_name_id: str, game_result: FinalGameResult ) -> None: """ Adds the result of one game to the match results. Args: white_player_name_id (str): The ID of the white player. game_result (FinalGameResult): The result of the game. """ self.number_of_games += 1 if white_player_name_id == self.player_one_name_id: if game_result == FinalGameResult.WIN_FOR_WHITE: self.player_one_is_white_white_wins += 1 elif game_result == FinalGameResult.WIN_FOR_BLACK: self.player_one_is_white_black_wins += 1 elif game_result == FinalGameResult.DRAW: self.player_one_is_white_draws += 1 else: pass # raise Exception('#') elif white_player_name_id == self.player_two_name_id: if game_result == FinalGameResult.WIN_FOR_WHITE: self.player_two_is_white_white_wins += 1 elif game_result == FinalGameResult.WIN_FOR_BLACK: self.player_two_is_white_black_wins += 1 elif game_result == FinalGameResult.DRAW: self.player_two_is_white_draws += 1 else: raise Exception("!") else: raise Exception("?")
[docs] def finish(self) -> None: """ Finishes the match and marks it as finished. """ self.match_finished = True
[docs] def __str__(self) -> str: """ Returns a string representation of the match results. Returns: str: A string representation of the match results. """ str_ = ( "Main result: " + self.player_one_name_id + " wins " + str(self.get_player_one_wins()) + " " ) str_ += self.player_two_name_id + " wins " + str(self.get_player_two_wins()) str_ += " draws " + str(self.get_draws()) + "\n" str_ += self.player_one_name_id + " with white: " str_ += "Wins " + str(self.player_one_is_white_white_wins) str_ += ", Losses " + str(self.player_one_is_white_black_wins) str_ += ", Draws " + str(self.player_one_is_white_draws) str_ += "\n with black: " str_ += "Wins " + str(self.player_two_is_white_black_wins) str_ += ", Losses " + str(self.player_two_is_white_white_wins) str_ += ", Draws " + str(self.player_two_is_white_draws) + "\n" str_ += self.player_two_name_id + " with white: " str_ += "Wins " + str(self.player_two_is_white_white_wins) str_ += ", Losses " + str(self.player_two_is_white_black_wins) str_ += ", Draws " + str(self.player_two_is_white_draws) str_ += "\n with black: " str_ += "Wins " + str(self.player_one_is_white_black_wins) str_ += ", Losses " + str(self.player_one_is_white_white_wins) str_ += ", Draws " + str(self.player_one_is_white_draws) return str_
[docs]@dataclass class MatchReport: """ Represents a match report containing the match results and move history. """ match_results: MatchResults match_move_history: dict[int, list[moveUci]]