From 34469dd17e641981bdc013f2e15f33b971399e8d Mon Sep 17 00:00:00 2001 From: Nathanael Lu Date: Mon, 11 Mar 2024 20:22:48 -0400 Subject: [PATCH] added fps to initializer player --- clash_royale/envs/game_engine/game_engine.py | 9 ++++++--- clash_royale/envs/game_engine/player.py | 11 ++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/clash_royale/envs/game_engine/game_engine.py b/clash_royale/envs/game_engine/game_engine.py index 4b05f6e..76ec466 100644 --- a/clash_royale/envs/game_engine/game_engine.py +++ b/clash_royale/envs/game_engine/game_engine.py @@ -40,6 +40,7 @@ def __init__(self, width: int=18, height: int=32, resolution: Tuple[int, int]=(128, 128), + fps: int=30 ) -> None: """ The game_engine should be initialized with settings such as resolution @@ -50,12 +51,13 @@ def __init__(self, self.width: int = width # Width of arena self.height: int = height # Height of arena self.resolution: Tuple[int, int] = resolution + self.fps: int = fps self.arena: Arena = Arena(width=self.width, height=self.height) - self.player1: Player = Player(deck1) - self.player2: Player = Player(deck2) + self.player1: Player = Player(deck1, fps) + self.player2: Player = Player(deck2, fps) - self.scheduler: Scheduler = Scheduler(fps=30) # counting frames + self.scheduler: Scheduler = Scheduler(fps) # counting frames self.game_scheduler: GameScheduler = DefaultScheduler(self.scheduler) # determining elixir etc. def reset(self) -> None: @@ -103,6 +105,7 @@ def apply(self, player_id: int, action: Tuple[int, int, int] | None) -> None: assert action[1] >= 0 and action[1] < self.height assert action[2] >= 0 and action[2] < 4 + curr_player: Player if player_id == 0: curr_player = self.player1 else: diff --git a/clash_royale/envs/game_engine/player.py b/clash_royale/envs/game_engine/player.py index 07c9423..4bb8e85 100644 --- a/clash_royale/envs/game_engine/player.py +++ b/clash_royale/envs/game_engine/player.py @@ -14,13 +14,15 @@ class Player(): """ def __init__(self, - deck: List[Card]) -> None: + deck: List[Card], + fps: int) -> None: """ Player component is initialized with deck of string, specifying the cards' names in the deck. """ self.elixir: int = 0 + self.fps: int = fps random.shuffle(deck) self.deck: Queue = Queue(maxsize = 8) @@ -51,15 +53,14 @@ def get_pseudo_legal_cards(self) -> list[Card]: def step(self, elixir_rate: float, - fps: int, - frame: int) -> None: + frames: int=1) -> None: """ Called with the value of elixir_rate and frame to update the elixir of player after 'frame' number of frames to better customize the elixir_rate that can vary depends on game modes. """ - self.elixir += (elixir_rate / fps) * frame + self.elixir += (elixir_rate / self.fps) * frames def pop(self, card_index: int) -> None: @@ -89,4 +90,4 @@ def play_card(self, card_index: int) -> None: elixir_cost: float = self.hand[card_index].elixir_cost assert(elixir_cost <= self.elixir) self.pop(card_index) - self.elixir -= elixir_cost \ No newline at end of file + self.elixir -= elixir_cost