diff --git a/backend/bang/deck.py b/backend/bang/deck.py index 9b36489..26a207a 100644 --- a/backend/bang/deck.py +++ b/backend/bang/deck.py @@ -24,24 +24,24 @@ class Deck: self.event_cards: List[ce.CardEvent] = [] endgame_cards: List[ce.CardEvent] = [] if 'fistful_of_cards' in game.expansions: - self.event_cards.extend(ce.get_all_events()) + self.event_cards.extend(ce.get_all_events(game.rng)) endgame_cards.append(ce.get_endgame_card()) if 'high_noon' in game.expansions: - self.event_cards.extend(ceh.get_all_events()) + self.event_cards.extend(ceh.get_all_events(game.rng)) endgame_cards.append(ceh.get_endgame_card()) if len(self.event_cards) > 0: - random.shuffle(self.event_cards) + game.rng.shuffle(self.event_cards) self.event_cards = self.event_cards[:12] self.event_cards.insert(0, None) self.event_cards.insert(0, None) # 2 perchè iniziale, e primo flip dallo sceriffo - self.event_cards.append(random.choice(endgame_cards)) - random.shuffle(self.cards) + self.event_cards.append(game.rng.choice(endgame_cards)) + game.rng.shuffle(self.cards) self.shop_deck: List[grc.ShopCard] = [] self.shop_cards: List[grc.ShopCard] = [] if 'gold_rush' in game.expansions: self.shop_cards = [None, None, None] self.shop_deck = grc.get_cards() - random.shuffle(self.shop_deck) + game.rng.shuffle(self.shop_deck) self.fill_gold_rush_shop() self.scrap_pile: List[cs.Card] = [] print(f'Deck initialized with {len(self.cards)} cards') @@ -91,7 +91,7 @@ class Deck: def reshuffle(self): self.cards = self.scrap_pile[:-1].copy() - random.shuffle(self.cards) + self.game.rng.shuffle(self.cards) self.scrap_pile = self.scrap_pile[-1:] def draw_from_scrap_pile(self) -> cs.Card: diff --git a/backend/bang/expansions/fistful_of_cards/card_events.py b/backend/bang/expansions/fistful_of_cards/card_events.py index 6266753..ce7bbf9 100644 --- a/backend/bang/expansions/fistful_of_cards/card_events.py +++ b/backend/bang/expansions/fistful_of_cards/card_events.py @@ -101,7 +101,7 @@ def get_endgame_card(): end_game.expansion = 'fistful-of-cards' return end_game -def get_all_events(): +def get_all_events(rng=random): cards = [ Agguato(), Cecchino(), @@ -118,7 +118,7 @@ def get_all_events(): RouletteRussa(), Vendetta(), ] - random.shuffle(cards) + rng.shuffle(cards) for c in cards: c.expansion = 'fistful-of-cards' return cards \ No newline at end of file diff --git a/backend/bang/expansions/high_noon/card_events.py b/backend/bang/expansions/high_noon/card_events.py index 7f79fca..5826827 100644 --- a/backend/bang/expansions/high_noon/card_events.py +++ b/backend/bang/expansions/high_noon/card_events.py @@ -96,7 +96,7 @@ def get_endgame_card(): end_game.expansion = 'high-noon' return end_game -def get_all_events(): +def get_all_events(rng=random): cards = [ Benedizione(), Maledizione(), @@ -113,7 +113,7 @@ def get_all_events(): Manette(), NuovaIdentita(), ] - random.shuffle(cards) + rng.shuffle(cards) for c in cards: c.expansion = 'high-noon' return cards \ No newline at end of file diff --git a/backend/bang/game.py b/backend/bang/game.py index 0c3c9ec..4d82d75 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -167,7 +167,7 @@ class Game: self.players[i].hand.append(self.deck.draw()) self.players[i].notify_self() current_roles = [x.role.name for x in self.players] - random.shuffle(current_roles) + self.rng.shuffle(current_roles) cr = '' for x in current_roles: if (x not in cr): @@ -177,7 +177,7 @@ class Game: def choose_characters(self): n = self.characters_to_distribute - char_cards = random.sample(characters.all_characters(self.expansions), len(self.players)*n) + char_cards = self.rng.sample(characters.all_characters(self.expansions), len(self.players)*n) for i in range(len(self.players)): self.players[i].set_available_character(char_cards[i * n : i * n + n]) @@ -188,10 +188,10 @@ class Game: if SEED == None: import time SEED = int(time.time()) - random.seed(SEED) - print(f'{self.name}: SEED IS {SEED}') - else: - random.seed(SEED) + print(f'{self.name}: SEED IS {SEED}') + self.SEED = SEED + self.rng = random.Random(SEED) + self.players_map = {c.name: i for i, c in enumerate(self.players)} self.sio.emit('chat_message', room=self.name, data=f'_starting') self.sio.emit('start', room=self.name) @@ -218,7 +218,7 @@ class Game: available_roles = available_roles[:len(self.players)] else: available_roles = [roles.Renegade(), roles.Renegade()] - random.shuffle(available_roles) + self.rng.shuffle(available_roles) for i in range(len(self.players)): self.players[i].set_role(available_roles[i]) if isinstance(available_roles[i], roles.Sheriff) or (len(available_roles) == 3 and isinstance(available_roles[i], roles.Vice)):