From dfabcb6eb119494cfb4dc4f1c8688ab277daad6b Mon Sep 17 00:00:00 2001 From: legonzaur Date: Mon, 6 May 2024 16:14:19 +0200 Subject: [PATCH] Fixes #4; add draw_and_discard_multiple to make Rampage work --- src/cards/pack1_faction_wild.json | 2 +- src/model/card_behaviour.py | 1 + src/model/card_validator.py | 1 + src/model/player.py | 4 ++-- src/model/turn.py | 39 ++++++++++++++++++++++++------- 5 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/cards/pack1_faction_wild.json b/src/cards/pack1_faction_wild.json index e8f0238..f7258c1 100644 --- a/src/cards/pack1_faction_wild.json +++ b/src/cards/pack1_faction_wild.json @@ -207,7 +207,7 @@ "amount": 6 }, { - "effect": "draw_and_discard", + "effect": "draw_and_discard_multiple", "amount": 2 } ] diff --git a/src/model/card_behaviour.py b/src/model/card_behaviour.py index bcab964..d576516 100644 --- a/src/model/card_behaviour.py +++ b/src/model/card_behaviour.py @@ -109,6 +109,7 @@ card_effect_all_behaviours = { CardEffects.SACRIFICE: effect_sacrifice, CardEffects.DRAW: effect_draw, CardEffects.DRAW_AND_DISCARD: effect_draw_and_discard, + CardEffects.DRAW_AND_DISCARD_MULTIPLE: effect_draw_and_discard, CardEffects.DISCARD: effect_discard, CardEffects.RESTACK_DISCARDED_CHAMPION: effect_restack_discarded_champion, CardEffects.RESTACK_DISCARDED_CARD: effect_restack_discarded, diff --git a/src/model/card_validator.py b/src/model/card_validator.py index c831648..bf53af1 100644 --- a/src/model/card_validator.py +++ b/src/model/card_validator.py @@ -41,6 +41,7 @@ class CardEffects(str, Enum): SACRIFICE = "sacrifice" DRAW = "draw" DRAW_AND_DISCARD = "draw_and_discard" + DRAW_AND_DISCARD_MULTIPLE = "draw_and_discard_multiple" DISCARD = "discard" RESTACK_DISCARDED_CHAMPION = "restack_discarded_champion" RESTACK_DISCARDED_CARD = "restack_discarded_card" diff --git a/src/model/player.py b/src/model/player.py index 9173ddc..59a1b1d 100644 --- a/src/model/player.py +++ b/src/model/player.py @@ -282,9 +282,9 @@ class Player(Serializable): if p is None: print("player not found") return False - if p.turn.discard_markers >= len(p.hand): + if p.turn.fuck_u_markers >= len(p.hand): print("player has already too many discard markers!") return False - p.turn.discard_markers += 1 + p.turn.fuck_u_markers += 1 await self.game.notify_controller("update", p.turn.serialize()) return True diff --git a/src/model/turn.py b/src/model/turn.py index 647f9a5..dcdba4f 100644 --- a/src/model/turn.py +++ b/src/model/turn.py @@ -29,6 +29,7 @@ class Turn(Serializable): effects_availables: List[Effect] champions_health: Dict[str, int] discard_markers: int + fuck_u_markers: int damage_reserve: int gold_reserve: int @@ -41,17 +42,22 @@ class Turn(Serializable): self.effects_availables: List[Effect] = [] self.cards_locked: List[Card] = [] self.discard_markers = 0 + self.fuck_u_markers = 0 async def end_turn(self) -> None: """Resets card champion health and card effects""" if len(self.player.hand) > 0: return print("You must play all your cards before ending a turn!") - + if self.fuck_u_markers > 0: + return print("You cannot end your turn with fuck_u markers") + if self.discard_markers > 0: + return print("You cannot end your turn with discard markers") self.damage_reserve = 0 self.gold_reserve = 0 self.effects_availables = [] self.cards_locked = [] self.discard_markers = 0 + self.fuck_u_markers = 0 for p in self.player.game.players: p.turn.champions_health = {} for c in p.board: @@ -62,8 +68,10 @@ class Turn(Serializable): await self.player.end_turn() async def lock_card(self, card_id: str): - if self.discard_markers > 0: - return print("You cannot lock a card while having discard markers") + if self.discard_markers > 0 or self.fuck_u_markers > 0: + return print( + "You cannot lock a card while having discard or fuck_u markers" + ) card = self.player.game.search_card_in_pile(card_id, self.player.board) if card is None: return print("Couldn't find card in player board") @@ -90,14 +98,19 @@ class Turn(Serializable): await self.player.game.notify_controller("update", self.serialize()) async def discard_card(self, card_id: str): - if self.discard_markers <= 0: - return print("You don't have any discard markers!") card = self.player.game.search_card_in_pile(card_id, self.cards_locked) if card is not None: return print("Cannot discard: card is locked") - self.discard_markers -= 1 + + if self.fuck_u_markers > 0: + self.fuck_u_markers -= 1 + elif self.discard_markers > 0: + self.discard_markers -= 1 + else: + return print("you don't have any discard or fuck_u markers") + + await self.player.discard_card(card_id) await self.player.game.notify_controller("update", self.serialize()) - return await self.player.discard_card(card_id) def sacrifice_card(self, card_id: str): card = self.player.game.search_card_in_pile(card_id, self.cards_locked) @@ -106,14 +119,22 @@ class Turn(Serializable): return self.player.sacrifice_card(card_id) async def use_effect_with_check(self, effect_id: str, target: Optional[str] = None): - if self.discard_markers > 0: - return print("You cannot use an effect while having discard markers") + if self.fuck_u_markers > 0: + return print("You cannot use an effect while having fuck_u markers") effect = next( (e for e in self.effects_availables if str(e.uuid) == effect_id), None, ) if effect is None: return print("Effect not available") + + if ( + effect.effect != CardEffects.DRAW_AND_DISCARD_MULTIPLE + and self.discard_markers > 0 + ): + return print( + "You cannot use another effect than draw_and_discard_multiple with discard markers!" + ) card = effect.card if card is None: return print(