aboutsummaryrefslogtreecommitdiff
path: root/ladder.py
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2023-02-19 12:57:27 +0100
committerMartin Kagamino Lehoux <martin@lehoux.net>2023-02-19 12:57:27 +0100
commit7200fcf3f4e4c22193b5b96452f9aa5131b1bc1c (patch)
tree812cf7b0f7a25b865d694199e9e4d29714a72fd3 /ladder.py
parent4f87f915ef7c6b8f20f70d35ff675059326680bd (diff)
refactor: Move to src
Diffstat (limited to 'ladder.py')
-rw-r--r--ladder.py56
1 files changed, 0 insertions, 56 deletions
diff --git a/ladder.py b/ladder.py
deleted file mode 100644
index 7351798..0000000
--- a/ladder.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-from datetime import datetime
-
-from game import Game
-from player import Player
-from strategy import GameEloChangeStrategy
-
-
-@dataclass(frozen=True)
-class PlayerStatus:
- player: Player
- elo: int
- total_games: int
-
- @staticmethod
- def create(player: Player) -> PlayerStatus:
- return PlayerStatus(player=player, elo=1000, total_games=0)
-
- def update_elo(self, elo_update: int) -> PlayerStatus:
- return PlayerStatus(
- player=self.player,
- elo=self.elo + elo_update,
- total_games=self.total_games + 1,
- )
-
-
-class Ladder:
- strategy: GameEloChangeStrategy
- players: dict[Player, PlayerStatus] = {
- player: PlayerStatus.create(player) for player in Player
- }
-
- def current_elo(self) -> dict[Player, int]:
- return {
- player: player_status.elo for player, player_status in self.players.items()
- }
-
- def proccess_game(self, game: Game) -> dict[Player, float]:
- players_elo_updates = self.strategy.proccess_game(game, self.current_elo())
-
- for player, elo_update in players_elo_updates.items():
- self.players[player] = self.players[player].update_elo(int(elo_update))
-
- return players_elo_updates
-
- def print_current(self):
- print(f"Ladder ({datetime.now().strftime('%d/%m/%Y %H:%M')}):")
- print("=" * 30)
- for rank, player in enumerate(
- sorted(self.players.values(), key=lambda player: player.elo, reverse=True),
- ):
- print(
- f"{rank+1}.\t{player.player.value:<20}: {player.elo:>4d} points, {player.total_games:>3d} games",
- )