diff --git a/backend/bang/expansions/wild_west_show/card_events.py b/backend/bang/expansions/wild_west_show/card_events.py new file mode 100644 index 0000000..4fe6a1d --- /dev/null +++ b/backend/bang/expansions/wild_west_show/card_events.py @@ -0,0 +1,77 @@ +import random + +from bang.expansions.fistful_of_cards.card_events import CardEvent + + +class Bavaglio(CardEvent): + def __init__(self): + super().__init__("Bavaglio", "🤐") + # I giocatori non possono parlare (ma possono gesticolare, mugugnare...). Chi parla perde 1 punto vita. + # NOT IMPLEMENTED + +class Camposanto(CardEvent): + def __init__(self): + super().__init__("Camposanto", "⚰") + # All'inizio del proprio turno, ogni giocatore eliminato torna in gioco con 1 punto vita. Pesca il ruolo a caso fra quelli dei giocatori eliminati. + +class DarlingValentine(CardEvent): + def __init__(self): + super().__init__("Darling Valentine", "💋") + # All'inizio del proprio turno, ogni giocatore scarta le carte in mano e ne pesca dal mazzo altrettante. + +class DorothyRage(CardEvent): + def __init__(self): + super().__init__("Dorothy Rage", "👩‍⚖️") + # Nel proprio turno, ogni giocatore può obbligarne un altro a giocare una carta. + +class HelenaZontero(CardEvent): + def __init__(self): + super().__init__("Helena Zontero", "💞") + # Quando Helena entra in gioco, "estrai!": se esce Cuori o Quadri, rimescola i ruoli attivi tranne lo Sceriffo, e ridistribuiscili a caso. + +class LadyRosaDelTexas(CardEvent): + def __init__(self): + super().__init__("Lady Rosa del Texas", "🩰") + # Nel proprio turno, ogni giocatore può scambiarsi di posto con quello alla sua destra, il quale salta il prossimo turno. + +class MissSusanna(CardEvent): + def __init__(self): + super().__init__("Miss Susanna", "👩‍🎤") + # Nel proprio turno ogni giocatore deve giocare almeno 3 carte. Se non lo fa, perde 1 punto vita. + +class RegolamentoDiConti(CardEvent): + def __init__(self): + super().__init__("Regolamento di conti", "🤠") + # Tutte le carte possono essere giocate come se fossero BANG!. Le carte BANG! come se fossero Mancato! + +class Sacagaway(CardEvent): + def __init__(self): + super().__init__("Sacagaway", "🏇") + # Tutti i giocatori giocano a carte scoperte (tranne il ruolo!). + +class WildWestShow(CardEvent): + def __init__(self): + super().__init__("Wild West Show", "🎪") + # L'obiettivo di ogni giocatore diventa: "Rimani l'ultimo in gioco!" + +def get_endgame_card(): + end_game = WildWestShow() + end_game.expansion = 'wild-west-show' + return end_game + +def get_all_events(rng=random): + cards = [ + Bavaglio(), + Camposanto(), + DarlingValentine(), + DorothyRage(), + HelenaZontero(), + LadyRosaDelTexas(), + MissSusanna(), + RegolamentoDiConti(), + Sacagaway(), + ] + rng.shuffle(cards) + for c in cards: + c.expansion = 'wild-west-show' + return cards \ No newline at end of file diff --git a/backend/bang/expansions/wild_west_show/characters.py b/backend/bang/expansions/wild_west_show/characters.py new file mode 100644 index 0000000..2ec8e77 --- /dev/null +++ b/backend/bang/expansions/wild_west_show/characters.py @@ -0,0 +1,66 @@ +from typing import List +from bang.characters import Character + +class BigSpencer(Character): + def __init__(self): + super().__init__("Big Spencer", max_lives=9) + # Inizia con 5 carte. Non può giocare Mancato! + self.icon = '🫘' + +class FlintWestwood(Character): + def __init__(self): + super().__init__("Flint Westwood", max_lives=4) + # Nel suo turno può scambiare una carta dalla mano con 2 carte a caso dalla mano di un altro giocatore. + self.icon = '🔫' + +class GaryLooter(Character): + def __init__(self): + super().__init__("Gary Looter", max_lives=5) + # Pesca tutte le carte in eccesso scartate dagli altri giocatori a fine turno. + self.icon = '🥲' + +class GreygoryDeckard(Character): + def __init__(self): + super().__init__("Greygory Deckard", max_lives=4) + # All'inizio del suo turno può pescare 2 personaggi a caso. Ha tutte le abilità dei personaggi pescati. + self.icon = '👨‍🦳' + +class JohnPain(Character): + def __init__(self): + super().__init__("John Pain", max_lives=4) + # Se ha meno di 6 carte in mano, quando un giocatore "estrae!" John aggiunge alla mano la carta appena estratta. + self.icon = '🤕' + +class LeeVanKliff(Character): + def __init__(self): + super().__init__("Lee Van Kliff", max_lives=4) + # Nel suo turno, può scartare un BANG! per ripetere l'effetto di una carta a bordo marrone che ha appena giocato. + self.icon = '👨‍🦲' + +class TerenKill(Character): + def __init__(self): + super().__init__("Teren Kill", max_lives=3) + # Ogni volta che sarebbe eliminato "estrai!": se non è Picche, Teren resta a 1 punto vita e pesca 1 carta. + self.icon = '👨‍🦰' + +class YoulGrinner(Character): + def __init__(self): + super().__init__("Youl Grinner", max_lives=4) + # Prima di pescare, i giocatori con più carte in mano di lui devono dargli una carta a scelta. + self.icon = '🤡' + +def all_characters() -> List[Character]: + cards = [ + BigSpencer(), + FlintWestwood(), + GaryLooter(), + GreygoryDeckard(), + JohnPain(), + LeeVanKliff(), + TerenKill(), + YoulGrinner(), + ] + for c in cards: + c.expansion_icon = '🎪' + c.expansion = 'wild_west_show' + return cards