Source code for rstt.player.player

from typing import List, Union, Optional
from typeguard import typechecked

from rstt.player.basicplayer import BasicPlayer
from rstt.game import Match
from rstt.stypes import SMatch, Achievement


[docs] class Player(BasicPlayer): @typechecked def __init__(self, name: Optional[str] = None, level: Optional[float] = None) -> None: """Player with match history. Player extends :class:`rstt.player.basicPlayer.BasicPlayer` with the possibility to track games it played in and by collecting results achieved in :class:`rstt.stypes.Achievement`. Parameters ---------- name : str, optional A unique name to identify the player. By default None, in this case a name is randomly generated. level : float, optional The level/skill/strenght of the player. By default None, in this case a level is randomly generated. using a random distribution :class:`rstt.config.PLAYER_DIST with default parameters :class:`rstt.config.PLAYER_DIST_ARGS` """ super().__init__(name=name, level=level) self.__achievements: list[Achievement] = [] self.__games: list[SMatch] = [] # --- getter --- #
[docs] def achievements(self) -> List[Achievement]: """Getter method for achievement :class:`rstt.stypes.Achievement` represent tournament result of the player. Returns ------- List[Achievement] All past success of the player in chronological order, from the oldest to the most recent. """ return self.__achievements
[docs] def earnings(self) -> float: """Getter method for the earnings Sugar method that returns the sum of earnings specified by the player achievements. Returns ------- float All the money earned in competitif event. """ return sum([achievement.prize for achievement in self.__achievements])
[docs] def games(self) -> List[Match]: """Getter method for match the player participated in Returns ------- List[Match] All the matches the player played in chronolgical order, from oldest to the most recent. """ return self.__games
# --- setter --- #
[docs] @typechecked def collect(self, achievement: Union[Achievement, List[Achievement]]): """Adds achivement(s) to the player history. Parameters ---------- achievement : Union[Achievement, List[Achievement]] Achievement(s) passed must have a different event_name attribute that the one already stored. Raises ------ ValueError Raised when attempting to collect an event with an event_name already present in the player history. """ if isinstance(achievement, Achievement): achievements = [achievement] else: achievements = achievement previous_event = [ past_event.event_name for past_event in self.__achievements] for achievement in achievements: if achievement.event_name not in previous_event: self.__achievements.append(achievement) else: msg = f"Can not collect {achievement}. {self} already participated in an event called {achievement.event_name}" raise ValueError(msg)
[docs] @typechecked def add_game(self, match: Match) -> None: """Adds match to the player history Parameters ---------- match : Match A match to track. Raises ------ ValueError The match needs to be a game in which the player partipiated in and not already tracked. Either condition violated will raise an Error. """ if match in self.__games: msg = f"{match} already present in game history of player {self}" raise ValueError(msg) if self not in match.players(): # !!! Untested Feature msg = f"Can not collect a match {match} that player {self} has not been part of." raise ValueError self.__add_game(match)
[docs] @typechecked def reset(self, games: bool = True, achievement: bool = True) -> None: """Clean the player history Removes all matchs and achievements from the players history. Parameters ---------- games : bool, optional Wether matchs should be removed, by default True. achievement : bool, optional Wether achievements should be removed, by default True. """ if achievement: self.__achievements = [] if games: self.__games = []
# --- internal mechanism --- # def __add_game(self, match: Match) -> None: self.__games.append(match)