From 2ddf18b8c048a001a0e6321e7dd63aab303b40b4 Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Tue, 18 Apr 2023 19:58:48 +0100 Subject: [PATCH] user rng instead of random --- .../fistful_of_cards/card_events.py | 6 ++- .../expansions/wild_west_show/card_events.py | 40 +++++++++++-------- backend/bang/game.py | 2 +- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/backend/bang/expansions/fistful_of_cards/card_events.py b/backend/bang/expansions/fistful_of_cards/card_events.py index cd184cf..1ca5ce9 100644 --- a/backend/bang/expansions/fistful_of_cards/card_events.py +++ b/backend/bang/expansions/fistful_of_cards/card_events.py @@ -1,3 +1,4 @@ +from typing import TYPE_CHECKING from abc import ABC, abstractmethod import random import bang.players as players @@ -6,6 +7,9 @@ import bang.cards as cs from globals import G +if TYPE_CHECKING: + from bang.game import Game + class CardEvent(ABC): """Base class for all event cards""" @@ -14,7 +18,7 @@ class CardEvent(ABC): self.name = name self.icon = icon - def on_flipped(self, game): + def on_flipped(self, game: "Game"): """Default on flipped event Args: diff --git a/backend/bang/expansions/wild_west_show/card_events.py b/backend/bang/expansions/wild_west_show/card_events.py index 1565d12..3f42ff3 100644 --- a/backend/bang/expansions/wild_west_show/card_events.py +++ b/backend/bang/expansions/wild_west_show/card_events.py @@ -7,6 +7,16 @@ from globals import G from bang.expansions.fistful_of_cards.card_events import CardEvent +class WildWestShowCardEvent(CardEvent): + """ + Base class for all card events in the Wild West Show expansion + """ + + def __init__(self, name, icon): + super().__init__(name, icon) + self.expansion = "wild-west-show" + + # class Bavaglio(CardEvent): # def __init__(self): # super().__init__("Bavaglio", "🤐") @@ -14,7 +24,7 @@ from bang.expansions.fistful_of_cards.card_events import CardEvent # # NOT IMPLEMENTED -class Camposanto(CardEvent): +class Camposanto(WildWestShowCardEvent): """ 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. """ @@ -23,7 +33,7 @@ class Camposanto(CardEvent): super().__init__("Camposanto", "⚰") -class DarlingValentine(CardEvent): +class DarlingValentine(WildWestShowCardEvent): """ All'inizio del proprio turno, ogni giocatore scarta le carte in mano e ne pesca dal mazzo altrettante. """ @@ -32,7 +42,7 @@ class DarlingValentine(CardEvent): super().__init__("Darling Valentine", "💋") -class DorothyRage(CardEvent): +class DorothyRage(WildWestShowCardEvent): """ Nel proprio turno, ogni giocatore può obbligarne un altro a giocare una carta. """ @@ -41,7 +51,7 @@ class DorothyRage(CardEvent): super().__init__("Dorothy Rage", "👩‍⚖️") -class HelenaZontero(CardEvent): +class HelenaZontero(WildWestShowCardEvent): """ Quando Helena entra in gioco, "estrai!": se esce Cuori o Quadri, rimescola i ruoli attivi tranne lo Sceriffo, e ridistribuiscili a caso. """ @@ -64,14 +74,14 @@ class HelenaZontero(CardEvent): ) pls = [p for p in game.players if not isinstance(p.role, roles.Sheriff)] newroles = [p.role for p in pls] - random.shuffle(newroles) + game.rng.shuffle(newroles) for p in pls: - p.set_role(newroles.pop(random.randint(0, len(newroles) - 1))) + p.set_role(newroles.pop(game.rng.randint(0, len(newroles) - 1))) return super().on_flipped(game) -class LadyRosaDelTexas(CardEvent): +class LadyRosaDelTexas(WildWestShowCardEvent): """ Nel proprio turno, ogni giocatore può scambiarsi di posto con quello alla sua destra, il quale salta il prossimo turno. """ @@ -89,7 +99,7 @@ class LadyRosaDelTexas(CardEvent): game.notify_all() -class MissSusanna(CardEvent): +class MissSusanna(WildWestShowCardEvent): """ Nel proprio turno ogni giocatore deve giocare almeno 3 carte. Se non lo fa, perde 1 punto vita. """ @@ -98,7 +108,7 @@ class MissSusanna(CardEvent): super().__init__("Miss Susanna", "👩‍🎤") -class RegolamentoDiConti(CardEvent): +class RegolamentoDiConti(WildWestShowCardEvent): """ Tutte le carte possono essere giocate come se fossero BANG!. Le carte BANG! come se fossero Mancato! """ @@ -124,7 +134,7 @@ class RegolamentoDiConti(CardEvent): player.notify_self() -class Sacagaway(CardEvent): +class Sacagaway(WildWestShowCardEvent): """ Tutti i giocatori giocano a carte scoperte (tranne il ruolo!). """ @@ -133,7 +143,7 @@ class Sacagaway(CardEvent): super().__init__("Sacagaway", "🌄") -class WildWestShow(CardEvent): +class WildWestShow(WildWestShowCardEvent): """ L'obiettivo di ogni giocatore diventa: "Rimani l'ultimo in gioco!" """ @@ -148,12 +158,12 @@ class WildWestShow(CardEvent): def get_endgame_card(): - end_game = WildWestShow() - end_game.expansion = "wild-west-show" - return end_game + """Return the endgame card for this expansion""" + return WildWestShow() def get_all_events(rng=random): + """Return all the events for this expansion shuffled, excluding the endgame card""" cards = [ Camposanto(), DarlingValentine(), @@ -165,6 +175,4 @@ def get_all_events(rng=random): Sacagaway(), ] rng.shuffle(cards) - for c in cards: - c.expansion = "wild-west-show" return cards diff --git a/backend/bang/game.py b/backend/bang/game.py index 9e505e6..c0bad29 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -804,7 +804,7 @@ class Game: elif self.check_event(cew.Camposanto): pl.lives = 1 pl.set_role = self.dead_roles.pop( - random.randint(0, len(self.dead_roles) - 1) + self.rng.randint(0, len(self.dead_roles) - 1) ) pl.is_dead = False pl.is_ghost = False