Fixes #4; add draw_and_discard_multiple to make Rampage work

This commit is contained in:
2024-05-06 16:14:19 +02:00
parent 25a48fd2ab
commit dfabcb6eb1
5 changed files with 35 additions and 12 deletions
+1 -1
View File
@@ -207,7 +207,7 @@
"amount": 6
},
{
"effect": "draw_and_discard",
"effect": "draw_and_discard_multiple",
"amount": 2
}
]
+1
View File
@@ -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,
+1
View File
@@ -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"
+2 -2
View File
@@ -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
+30 -9
View File
@@ -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(