diff --git a/backend/__init__.py b/backend/__init__.py index 3dc02c4..d604504 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -82,6 +82,7 @@ def get_me(sid, room): sio.get_session(sid).game = de_games[0] sio.enter_room(sid, de_games[0].name) de_games[0].notify_room(sid) + de_games[0].notify_event_card() else: create_room(sid, room['name']) if sio.get_session(sid).game == None: diff --git a/backend/bang/deck.py b/backend/bang/deck.py index 88bb6ab..f484e8b 100644 --- a/backend/bang/deck.py +++ b/backend/bang/deck.py @@ -1,6 +1,7 @@ from typing import List, Set, Dict, Tuple, Optional import random import bang.cards as cs +import bang.expansions.fistful_of_cards.card_events as ce class Deck: def __init__(self, game): @@ -18,10 +19,19 @@ class Deck: if c.name not in self.all_cards_str: self.all_cards_str.append(c.name) self.game = game + self.event_cards: List[ce.CardEvent] = [] + if 'fistful_of_cards' in game.expansions: + self.event_cards.extend(ce.get_all_events()) + random.shuffle(self.event_cards) random.shuffle(self.cards) self.scrap_pile: List[cs.Card] = [] print(f'Deck initialized with {len(self.cards)} cards') + def flip_event(self): + if len(self.event_cards) > 0: + self.event_cards.append(self.event_cards.pop(0)) + self.game.notify_event_card() + def peek(self, n_cards: int) -> list: return self.cards[:n_cards] diff --git a/backend/bang/expansions/fistful_of_cards/card_events.py b/backend/bang/expansions/fistful_of_cards/card_events.py index cd9d1f7..27dc2e9 100644 --- a/backend/bang/expansions/fistful_of_cards/card_events.py +++ b/backend/bang/expansions/fistful_of_cards/card_events.py @@ -1,96 +1,115 @@ from abc import ABC, abstractmethod -def CardEvent(ABC): +class CardEvent(ABC): def __init__(self, name, icon): self.name = name self.icon = icon -def Agguato(CardEvent): +class Agguato(CardEvent): def __init__(self): - super.__init__('Agguato', '🛁') + super().__init__('Agguato', '🛁') self.desc = '' self.desc_eng = '' -def Cecchino(CardEvent): +class Cecchino(CardEvent): def __init__(self): - super.__init__('Cecchino', '👁') + super().__init__('Cecchino', '👁') self.desc = '' self.desc_eng = '' -def DeadMan(CardEvent): +class DeadMan(CardEvent): def __init__(self): - super.__init__('Dead Man', '⚰️') + super().__init__('Dead Man', '⚰️') self.desc = '' self.desc_eng = '' -def FratelliDiSangue(CardEvent): +class FratelliDiSangue(CardEvent): def __init__(self): - super.__init__('Fratelli Di Sangue', '🩸') + super().__init__('Fratelli Di Sangue', '🩸') self.desc = '' self.desc_eng = '' -def IlGiudice(CardEvent): +class IlGiudice(CardEvent): def __init__(self): - super.__init__('Il Giudice', '👨⚖️') + super().__init__('Il Giudice', '👨⚖️') self.desc = '' self.desc_eng = '' -def Lazo(CardEvent): +class Lazo(CardEvent): def __init__(self): - super.__init__('Lazo', '📿') + super().__init__('Lazo', '📿') self.desc = '' self.desc_eng = '' -def LeggeDelWest(CardEvent): +class LeggeDelWest(CardEvent): def __init__(self): - super.__init__('Legge Del West', '⚖️') + super().__init__('Legge Del West', '⚖️') self.desc = '' self.desc_eng = '' -def LiquoreForte(CardEvent): +class LiquoreForte(CardEvent): def __init__(self): - super.__init__('Liquore Forte', '🥃') + super().__init__('Liquore Forte', '🥃') self.desc = '' self.desc_eng = '' -def MinieraAbbandonata(CardEvent): +class MinieraAbbandonata(CardEvent): def __init__(self): - super.__init__('Miniera Abbandonata', '⛏') + super().__init__('Miniera Abbandonata', '⛏') self.desc = '' self.desc_eng = '' -def PerUnPugnoDiCarte(CardEvent): +class PerUnPugnoDiCarte(CardEvent): def __init__(self): - super.__init__('Per Un Pugno Di Carte', '🎴') + super().__init__('Per Un Pugno Di Carte', '🎴') self.desc = '' self.desc_eng = '' -def Peyote(CardEvent): +class Peyote(CardEvent): def __init__(self): - super.__init__('Peyote', '🌵') + super().__init__('Peyote', '🌵') self.desc = '' self.desc_eng = '' -def Ranch(CardEvent): +class Ranch(CardEvent): def __init__(self): - super.__init__('Ranch', '🐮') + super().__init__('Ranch', '🐮') self.desc = '' self.desc_eng = '' -def Rimbalzo(CardEvent): +class Rimbalzo(CardEvent): def __init__(self): - super.__init__('Rimbalzo', '⏮') + super().__init__('Rimbalzo', '⏮') self.desc = '' self.desc_eng = '' -def RouletteRussa(CardEvent): +class RouletteRussa(CardEvent): def __init__(self): - super.__init__('Roulette Russa', '🇷🇺') + super().__init__('Roulette Russa', '🇷🇺') self.desc = '' self.desc_eng = '' -def Vendetta(CardEvent): +class Vendetta(CardEvent): def __init__(self): - super.__init__('Vendetta', '😤') + super().__init__('Vendetta', '😤') self.desc = '' - self.desc_eng = '' \ No newline at end of file + self.desc_eng = '' + +def get_all_events(): + return [ + Agguato(), + Cecchino(), + DeadMan(), + FratelliDiSangue(), + IlGiudice(), + Lazo(), + LeggeDelWest(), + LiquoreForte(), + MinieraAbbandonata(), + PerUnPugnoDiCarte(), + Peyote(), + Ranch(), + Rimbalzo(), + RouletteRussa(), + Vendetta(), + ] \ No newline at end of file diff --git a/backend/bang/game.py b/backend/bang/game.py index 6242609..ddcc8be 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -95,7 +95,7 @@ class Game: current_roles = [type(x.role).__name__ for x in self.players] current_roles = {x:current_roles.count(x) for x in current_roles} self.sio.emit('chat_message', room=self.name, data=f'_allroles|{current_roles}') - self.players[self.turn].play_turn() + self.play_turn() def choose_characters(self): char_cards = random.sample(characters.all_characters(self.expansions), len(self.players)*2) @@ -216,6 +216,8 @@ class Game: return self.players[(self.turn + 1) % len(self.players)] def play_turn(self): + if isinstance(self.players[self.turn].role, roles.Sheriff): + self.deck.flip_event() self.players[self.turn].play_turn() def next_turn(self): @@ -224,6 +226,10 @@ class Game: self.turn = (self.turn + 1) % len(self.players) self.play_turn() + def notify_event_card(self): + if len(self.deck.event_cards) > 0: + self.sio.emit('event_card', room=self.name, data=self.deck.event_cards[0].__dict__) + def notify_scrap_pile(self): print('scrap') if self.deck.peek_scrap_pile(): diff --git a/frontend/src/components/Card.vue b/frontend/src/components/Card.vue index d6b7f06..0384c9a 100644 --- a/frontend/src/components/Card.vue +++ b/frontend/src/components/Card.vue @@ -73,12 +73,12 @@ export default { 0 0 0 3pt #6aa16e, 0 0 0 6pt white, 0 0 5pt 6pt #aaa } .card.high-noon{ - box-shadow: 0 0 0pt 6pt #181a1b, 0 0 5pt 6pt #aaa; + box-shadow: 0 0 0pt 4pt white, 0 0 5pt 4pt #aaa; border: 2pt dotted rgb(198 78 45); } .card.fistful-of-cards{ - box-shadow: 0 0 0pt 6pt #181a1b, 0 0 5pt 6pt #aaa; - border: 2pt dotted rgb(50 122 172); + box-shadow: 0 0 0pt 4pt white, 0 0 5pt 4pt #aaa; + border: 2pt dashed rgb(50 122 172); } .card h4 { position: absolute; @@ -143,5 +143,11 @@ export default { box-shadow: 0 0 0 3pt #6aa16e, 0 0 0 6pt #181a1b, 0 0 5pt 6pt #aaa } + .card.high-noon{ + box-shadow: 0 0 0pt 4pt #181a1b, 0 0 5pt 4pt #aaa; + } + .card.fistful-of-cards{ + box-shadow: 0 0 0pt 4pt #181a1b, 0 0 5pt 4pt #aaa; + } } \ No newline at end of file diff --git a/frontend/src/components/Deck.vue b/frontend/src/components/Deck.vue index 649cb1a..16766a3 100644 --- a/frontend/src/components/Deck.vue +++ b/frontend/src/components/Deck.vue @@ -2,6 +2,11 @@
{{($i18n.locale=='it'?eventCard.desc:eventCard.desc_eng)}}
{{desc}}