diff --git a/backend/bang/expansions/the_valley_of_shadows/cards.py b/backend/bang/expansions/the_valley_of_shadows/cards.py index b1549b9..a297b64 100644 --- a/backend/bang/expansions/the_valley_of_shadows/cards.py +++ b/backend/bang/expansions/the_valley_of_shadows/cards.py @@ -189,9 +189,7 @@ class Poker(Card): self.alt_text = "๐Ÿ‘ค๐Ÿƒ ๐Ÿƒ๐Ÿƒ" def play_card(self, player, against, _with=None): - #TODO - # super().play_card(player, against=against) - # player.game.attack(player, against) + player.game.discard_others(player, card_name=self.name) return True class RitornoDiFiamma(Mancato): @@ -222,7 +220,7 @@ def get_starting_deck() -> List[Card]: Bandidos(Suit.DIAMONDS,'Q'), # gli altri giocatori scelgono se scartare 2 carte o perdere 1 punto vita # Fuga(Suit.HEARTS, 3), # evita l'effetto di carte marroni (tipo panico cat balou) di cui sei bersaglio # Mira(Suit.CLUBS, 6), - # Poker(Suit.HEARTS, 'J'), # tutti gli altri scartano 1 carta a scelta, se non ci sono assi allora pesca 2 dal mazzo + Poker(Suit.HEARTS, 'J'), # tutti gli altri scartano 1 carta a scelta, se non ci sono assi allora pesca 2 RitornoDiFiamma(Suit.CLUBS, 'Q'), # un mancato che fa bang Tornado(Suit.CLUBS, "A"), ] diff --git a/backend/bang/game.py b/backend/bang/game.py index 9cdcc13..4990681 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -66,6 +66,7 @@ class Game: self.player_bangs = 0 self.is_russian_roulette_on = False self.dalton_on = False + self.poker_on = False self.bot_speed = 1.5 self.incremental_turn = 0 self.did_resuscitate_deadman = False @@ -336,6 +337,8 @@ class Game: attacker.pending_action = pl.PendingAction.PLAY attacker.notify_self() self.attack_in_progress = False + elif card_name == 'Poker': + self.poker_on = True def attack_others(self, attacker: pl.Player, card_name:str=None): self.attack_in_progress = True @@ -485,6 +488,7 @@ class Game: else: self.ready_count += 1 if self.ready_count == self.waiting_for: + tmp = self.ready_count self.waiting_for = 0 self.ready_count = 0 self.attack_in_progress = False @@ -494,8 +498,13 @@ class Game: self.dalton_on = False print(f'{self.name}: notifying {self.players[self.turn].name} about his turn') self.players[self.turn].play_turn() + elif self.poker_on and not any(c.number == 1 for c in self.deck.scrap_pile[-tmp:]): + self.players[self.turn].pending_action = pl.PendingAction.CHOOSE + self.players[self.turn].choose_text = f'choose_from_poker;{min(2, tmp)}' + self.players[self.turn].available_cards = self.deck.scrap_pile[-tmp:] else: self.players[self.turn].pending_action = pl.PendingAction.PLAY + self.poker_on = False self.players[self.turn].notify_self() def announces_winners(self, winners=None): diff --git a/backend/bang/players.py b/backend/bang/players.py index 990c881..24a42c8 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -839,16 +839,31 @@ class Player: self.notify_self() elif 'choose_tornado' in self.choose_text: if card_index <= len(self.available_cards): - self.game.deck.scrap_pile.append(self.hand.pop(card_index)) + self.game.deck.scrap(self.hand.pop(card_index)) self.hand.append(self.game.deck.draw()) self.hand.append(self.game.deck.draw()) self.pending_action = PendingAction.WAIT self.game.responders_did_respond_resume_turn() self.notify_self() + elif 'choose_poker' in self.choose_text: + if card_index <= len(self.available_cards): + self.game.deck.scrap(self.hand.pop(card_index)) + self.pending_action = PendingAction.WAIT + self.game.responders_did_respond_resume_turn() + self.notify_self() + elif 'choose_from_poker' in self.choose_text: + st_idx = len(self.game.deck.scrap_pile)-len(self.available_cards) + self.available_cards.pop(card_index) + self.hand.append(self.game.deck.scrap_pile.pop(st_idx + card_index)) + self.game.notify_scrap_pile() + if self.choose_text.split(';')[1] == '1': + self.pending_action = PendingAction.PLAY + else: self.choose_text = 'choose_from_poker;1' + self.notify_self() elif 'choose_bandidos' in self.choose_text: if card_index <= len(self.available_cards): self.available_cards.pop(card_index) - self.game.deck.scrap_pile.append(self.hand.pop(card_index)) + self.game.deck.scrap(self.hand.pop(card_index)) self.mancato_needed -= 1 else: self.lives -= 1 @@ -1069,6 +1084,8 @@ class Player: self.available_cards = self.hand.copy() if card_name == 'Tornado': self.choose_text = 'choose_tornado' + if card_name == 'Poker': + self.choose_text = 'choose_poker' if card_name == 'Bandidos': self.choose_text = 'choose_bandidos' self.mancato_needed = min(2, len(self.hand)) diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index 5037eea..de1ce78 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -60,6 +60,9 @@ "choose_fantasma": "Choose who to bring back to life", "choose_tornado": "Choose a card to discard for the tornado", "choose_bandidos": "Choose between discarding 2 cards or losing a life (1 card if you only have 1)", + "choose_poker": "Everyone discards 1 card (if there's no Ace, the player who played poker chooses 2 cards)", + "choose_from_poker;2": "Choose which cards to get (max 2)", + "choose_from_poker;1": "Choose which card to get", "choose_cecchino": "Choose who to shoot", "choose_rimbalzo_player": "Choose the target of the bang", "choose_rimbalzo_card": "Choose the card to discard the bang to", diff --git a/frontend/src/i18n/it.json b/frontend/src/i18n/it.json index b72f373..ac69244 100644 --- a/frontend/src/i18n/it.json +++ b/frontend/src/i18n/it.json @@ -60,6 +60,9 @@ "choose_fantasma": "Scegli chi riportare in vita", "choose_tornado": "Scegli una carta da scartare per il tornado", "choose_bandidos": "Scegli tra scartare 2 carte o perdere una vita (1 carta se ne hai solo 1)", + "choose_poker": "Tutti scartano 1 carta (se non c'รจ un Asso, il giocatore che ha giocato poker sceglie 2 carte tra quelle appena scartate)", + "choose_from_poker;2": "Scegli quali carte pescare (max 2)", + "choose_from_poker;1": "Scegli quale carte pescare", "choose_cecchino": "Scegli contro chi sparare", "choose_rimbalzo_player": "Scegli contro chi scartare il bang", "choose_rimbalzo_card": "Scegli contro che carta scartare il bang",