From 03557557b1bf03c6d73415ef5a4d15c405cbd8f4 Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Tue, 15 Jun 2021 16:43:52 +0200 Subject: [PATCH 001/201] add brown cards in backend --- backend/bang/deck.py | 5 + .../bang/expansions/gold_rush/shop_cards.py | 100 ++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 backend/bang/expansions/gold_rush/shop_cards.py diff --git a/backend/bang/deck.py b/backend/bang/deck.py index 57aa884..eea818b 100644 --- a/backend/bang/deck.py +++ b/backend/bang/deck.py @@ -35,6 +35,11 @@ class Deck: 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.shop_deck = [] + self.shop_cards = [] + if 'gold_rush' in game.expansions: + import bang.expansions.gold_rush.shop_cards as gr + self.shop_deck = gr.get_cards() self.scrap_pile: List[cs.Card] = [] print(f'Deck initialized with {len(self.cards)} cards') diff --git a/backend/bang/expansions/gold_rush/shop_cards.py b/backend/bang/expansions/gold_rush/shop_cards.py new file mode 100644 index 0000000..62f736f --- /dev/null +++ b/backend/bang/expansions/gold_rush/shop_cards.py @@ -0,0 +1,100 @@ +from bang.cards import * + +class ShopCardKind(IntEnum): + BROWN = 0 # Se l’equipaggiamento ha il bordo marrone, applicane subito l’effetto e poi scartalo. + BLACK = 1 # Se l’equipaggiamento ha il bordo nero, tienilo scoperto di fronte a te. + +class ShopCard(Card): + def __init__(self, name:str, cost:int, kind:ShopCardKind): + super().__init__('💵', cost, name=name) + self.kind = kind + + def play_card(self, player, against, _with=None): + if self.kind == ShopCardKind.BROWN: + pass # use it now + return False + elif self.kind == ShopCardKind.BLACK: # equip it + self.reset_card() + if not self.is_duplicate_card(player): + self.reset_card() + player.equipment.append(self) + return True + else: + return False + +class Bicchierino(ShopCard): + def __init__(self): + super().__init__('Bicchierino', 1, ShopCardKind.BROWN) + self.icon = '🍸️' + + def play_card(self, player, against, _with=None): + if against != None: + player.sio.emit('chat_message', room=player.game.name, data=f'_play_card_for|{player.name}|{self.name}|{against}') + player.game.deck.scrap(_with) + player.game.get_player_named(against).lives = min(player.game.get_player_named(against).lives+1, player.game.get_player_named(against).max_lives) + player.game.get_player_named(against).notify_self() + return True + return False + +class Bottiglia(ShopCard): + def __init__(self): + super().__init__('Bottiglia', 2, ShopCardKind.BROWN) + self.icon = '🍾️' + + def play_card(self, player, against, _with=None): + if against != None: + pass # bang, birra, panico + return False + +class Complice(ShopCard): + def __init__(self): + super().__init__('Complice', 2, ShopCardKind.BROWN) + self.icon = '😉️' + + def play_card(self, player, against, _with=None): + if against != None: + pass # emporio, duello, Cat balou + return False + +class CorsaAllOro(ShopCard): + def __init__(self): + super().__init__("Corsa All'Oro", 5, ShopCardKind.BROWN) + self.icon = '🤑️' + + def play_card(self, player, against, _with=None): + if against != None: + pass # termini turno, vita max, poi inizi un nuovo turno + return False + +class Rum(ShopCard): + def __init__(self): + super().__init__("Rum", 3, ShopCardKind.BROWN) + self.icon = '🍷️' + + def play_card(self, player, against, _with=None): + if against != None: + pass # Estrai 4 carte e ottieni 1 hp per ogni seme diverso + return False + +class UnionPacific(ShopCard): + def __init__(self): + super().__init__("Union Pacific", 4, ShopCardKind.BROWN) + self.icon = '🚆️' + + def play_card(self, player, against, _with=None): + if against != None: + pass # Pesca 4 carte + return False + +def get_cards() -> List[Card]: + cards = [ + Bicchierino(), + Bottiglia(), + Complice(), + CorsaAllOro(), + Rum(), + UnionPacific(), + ] + for c in cards: + c.expansion_icon = '' + return cards From 8b9f095e4ba78eb7e5880a468afc481146e5471e Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Tue, 15 Jun 2021 16:57:35 +0200 Subject: [PATCH 002/201] add black cards --- .../bang/expansions/gold_rush/shop_cards.py | 92 ++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/backend/bang/expansions/gold_rush/shop_cards.py b/backend/bang/expansions/gold_rush/shop_cards.py index 62f736f..5e21515 100644 --- a/backend/bang/expansions/gold_rush/shop_cards.py +++ b/backend/bang/expansions/gold_rush/shop_cards.py @@ -86,6 +86,87 @@ class UnionPacific(ShopCard): pass # Pesca 4 carte return False +class Calumet(ShopCard): + def __init__(self): + super().__init__("Calumet", 3, ShopCardKind.BLACK) + self.icon = '🚭️' + + def play_card(self, player, against, _with=None): + super().play_card(player, against, _with) + # ti rende immuni ai quadri + +class Cinturone(ShopCard): + def __init__(self): + super().__init__("Cinturone", 2, ShopCardKind.BLACK) + self.icon = '🥡' + + def play_card(self, player, against, _with=None): + super().play_card(player, against, _with) + # max carte a fine turno 8 + +class FerroDiCavallo(ShopCard): + def __init__(self): + super().__init__("Ferro di Cavallo", 2, ShopCardKind.BLACK) + self.icon = '🎠' + + def play_card(self, player, against, _with=None): + super().play_card(player, against, _with) + # estrai come luky duke + +class Piccone(ShopCard): + def __init__(self): + super().__init__("Piccone", 4, ShopCardKind.BLACK) + self.icon = '⛏️' + + def play_card(self, player, against, _with=None): + super().play_card(player, against, _with) + # peschi una carta in piu a inizio turno + +class Ricercato(ShopCard): + def __init__(self): + super().__init__("Ricercato", 2, ShopCardKind.BLACK) + self.icon = '⛏️' + + def play_card(self, player, against, _with=None): + pass + # la giochi su un altro giocatore, ricompensa di 2 carte e 1 pepita a chi lo uccide + +class Setaccio(ShopCard): + def __init__(self): + super().__init__("Setaccio", 3, ShopCardKind.BLACK) + self.icon = '🥘️' + + def play_card(self, player, against, _with=None): + super().play_card(player, against, _with) + # paghi 1 pepita per pescare 1 carta durante il tuo turno (max 2 volte per turno) + +class Stivali(ShopCard): + def __init__(self): + super().__init__("Stivali", 3, ShopCardKind.BLACK) + self.icon = '🥾️' + + def play_card(self, player, against, _with=None): + super().play_card(player, against, _with) + # peschi una carta ogni volta che vieni ferito + +class Talismano(ShopCard): + def __init__(self): + super().__init__("Talismano", 3, ShopCardKind.BLACK) + self.icon = '🧿' + + def play_card(self, player, against, _with=None): + super().play_card(player, against, _with) + # ottieni una pepita ogni volta che vieni ferito + +class Zaino(ShopCard): + def __init__(self): + super().__init__("Zaino", 3, ShopCardKind.BLACK) + self.icon = '🎒️' + + def play_card(self, player, against, _with=None): + super().play_card(player, against, _with) + # paga 2 pepite per recuperare 1 vita + def get_cards() -> List[Card]: cards = [ Bicchierino(), @@ -94,7 +175,16 @@ def get_cards() -> List[Card]: CorsaAllOro(), Rum(), UnionPacific(), + Calumet(), + Cinturone(), + FerroDiCavallo(), + Piccone(), + Ricercato(), + Setaccio(), + Stivali(), + Talismano(), + Zaino(), ] for c in cards: - c.expansion_icon = '' + c.expansion_icon = '🤑️' return cards From 46456ed4330ddc73cc4dbdd515cd9b0de6a22a2c Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Tue, 15 Jun 2021 18:10:48 +0200 Subject: [PATCH 003/201] show cards in frontend --- backend/__init__.py | 1 + backend/bang/deck.py | 12 +++++++++- .../bang/expansions/gold_rush/shop_cards.py | 2 +- backend/bang/game.py | 10 ++++++++- frontend/src/components/Card.vue | 13 +++++++++++ frontend/src/components/Deck.vue | 22 +++++++++++++++++++ 6 files changed, 57 insertions(+), 3 deletions(-) diff --git a/backend/__init__.py b/backend/__init__.py index 2472603..f729e3a 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -100,6 +100,7 @@ def get_me(sid, room): de_games[0].notify_event_card(sid) de_games[0].notify_scrap_pile(sid) de_games[0].notify_all() + de_games[0].notify_gold_rush_shop() de_games[0].notify_event_card() else: create_room(sid, room['name']) diff --git a/backend/bang/deck.py b/backend/bang/deck.py index eea818b..86596c5 100644 --- a/backend/bang/deck.py +++ b/backend/bang/deck.py @@ -36,10 +36,12 @@ class Deck: self.event_cards.append(random.choice(endgame_cards)) random.shuffle(self.cards) self.shop_deck = [] - self.shop_cards = [] if 'gold_rush' in game.expansions: import bang.expansions.gold_rush.shop_cards as gr + self.shop_cards = [None, None, None] self.shop_deck = gr.get_cards() + random.shuffle(self.shop_deck) + self.fill_gold_rush_shop() self.scrap_pile: List[cs.Card] = [] print(f'Deck initialized with {len(self.cards)} cards') @@ -48,6 +50,14 @@ class Deck: self.event_cards.append(self.event_cards.pop(0)) self.game.notify_event_card() + def fill_gold_rush_shop(self): + if not any([c == None for c in self.shop_cards]): + return + for i in range(3): + if self.shop_cards[i] == None: + self.shop_cards[i] = self.shop_deck.pop(0) + self.game.notify_gold_rush_shop() + def peek(self, n_cards: int) -> list: return self.cards[:n_cards] diff --git a/backend/bang/expansions/gold_rush/shop_cards.py b/backend/bang/expansions/gold_rush/shop_cards.py index 5e21515..c5bb515 100644 --- a/backend/bang/expansions/gold_rush/shop_cards.py +++ b/backend/bang/expansions/gold_rush/shop_cards.py @@ -6,7 +6,7 @@ class ShopCardKind(IntEnum): class ShopCard(Card): def __init__(self, name:str, cost:int, kind:ShopCardKind): - super().__init__('💵', cost, name=name) + super().__init__(suit='💵', number=cost, name=name) self.kind = kind def play_card(self, player, against, _with=None): diff --git a/backend/bang/game.py b/backend/bang/game.py index a6f2725..19358b9 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -27,7 +27,7 @@ class Game: self.initial_players = 0 self.password = '' self.expansions = [] - self.available_expansions = ['dodge_city', 'fistful_of_cards', 'high_noon'] + self.available_expansions = ['dodge_city', 'fistful_of_cards', 'high_noon', 'gold_rush'] self.shutting_down = False self.is_competitive = False self.disconnect_bot = True @@ -159,6 +159,8 @@ class Game: self.initial_players = len(self.players) self.distribute_roles() self.choose_characters() + if 'gold_rush' in self.expansions: + self.notify_gold_rush_shop() def distribute_roles(self): available_roles: List[roles.Role] = [] @@ -430,6 +432,12 @@ class Game: else: self.sio.emit('event_card', room=room, data=None) + def notify_gold_rush_shop(self, sid=None): + if 'gold_rush' in self.expansions and self.deck and self.deck.shop_cards and len(self.deck.shop_cards) > 0: + room = self.name if sid == None else sid + print(f'gold_rush_shop room={room}, data={self.deck.shop_cards}') + self.sio.emit('gold_rush_shop', room=room, data=json.dumps(self.deck.shop_cards, default=lambda o: o.__dict__)) + def notify_scrap_pile(self, sid=None): print('scrap') room = self.name if sid == None else sid diff --git a/frontend/src/components/Card.vue b/frontend/src/components/Card.vue index c205f67..1573457 100644 --- a/frontend/src/components/Card.vue +++ b/frontend/src/components/Card.vue @@ -27,6 +27,8 @@ export default { if (this.card && !isNaN(this.card.suit)) { let x = ['♦️','♣️','♥️','♠️'] return x[this.card.suit]; + } else if (this.card.suit) { + return this.card.suit; } return ''; }, @@ -107,6 +109,17 @@ export default { ); border: 2pt solid rgb(50 122 172); } +.card.brown.gold-rush { + box-shadow: 0 0 0pt 4pt var(--bg-color), 0 0 5pt 4pt #aaa; + border: 2pt dotted #9C7340; +} +.card.black.gold-rush { + box-shadow: 0 0 0pt 4pt var(--bg-color), 0 0 5pt 4pt #aaa; + border: 2pt dotted #000; +} +.card.back.gold-rush { + background: repeating-linear-gradient(347deg, #ffb32f, #987e51 ); +} .card h4 { position: absolute; text-align: center; diff --git a/frontend/src/components/Deck.vue b/frontend/src/components/Deck.vue index 9da5e6f..4b6c7da 100644 --- a/frontend/src/components/Deck.vue +++ b/frontend/src/components/Deck.vue @@ -2,6 +2,14 @@
+ + + +
+
+
+ +
@@ -44,12 +52,18 @@ export default { name: 'PewPew!', icon: '💥', }, + goldRushCardBack: { + name: 'GoldRush!', + icon: '🤑️', + }, lastScrap: null, eventCard: null, previousScrap: null, pending_action: false, isPlaying: true, desc: '', + goldRushShopOpen: true, + goldRushCards: [], }), sockets: { self(self){ @@ -68,6 +82,10 @@ export default { expansion: 'fistful-of-cards', } : card }, + gold_rush_shop(cards) { + console.log('GOLD RUSH:'+ cards) + this.goldRushCards = JSON.parse(cards) + }, }, computed: { endTurnCard() { @@ -140,6 +158,10 @@ export default { opacity: 0.8; transform: translateY(-10px); } +.gold-rush:not(.back) { + animation-duration: 0.8s; + animation-name: slidein; +} @keyframes slidein { from { transform: translate(-100px, 10px) scale(1.3) rotate(-10deg); From 445399d7b3d88a90b833841326de2dd21193e639 Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Tue, 15 Jun 2021 18:52:30 +0200 Subject: [PATCH 004/201] buy cards and earn nuggets on other player damage --- backend/__init__.py | 5 +++++ backend/bang/deck.py | 1 + backend/bang/expansions/gold_rush/shop_cards.py | 2 +- backend/bang/game.py | 1 + backend/bang/players.py | 14 ++++++++++++++ frontend/src/components/Card.vue | 2 ++ frontend/src/components/Deck.vue | 11 ++++++++--- frontend/src/components/Lobby.vue | 5 ++++- 8 files changed, 36 insertions(+), 5 deletions(-) diff --git a/backend/__init__.py b/backend/__init__.py index f729e3a..cc2a041 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -419,6 +419,11 @@ def holyday_special(sid, data): ses: Player = sio.get_session(sid) ses.holyday_special(data) +@sio.event +def buy_gold_rush_card(sid, data:int): + ses: Player = sio.get_session(sid) + ses.buy_gold_rush_card(data) + @sio.event def get_cards(sid): import bang.cards as c diff --git a/backend/bang/deck.py b/backend/bang/deck.py index 86596c5..d452746 100644 --- a/backend/bang/deck.py +++ b/backend/bang/deck.py @@ -55,6 +55,7 @@ class Deck: return for i in range(3): if self.shop_cards[i] == None: + print(f'replacing gr-card {i}') self.shop_cards[i] = self.shop_deck.pop(0) self.game.notify_gold_rush_shop() diff --git a/backend/bang/expansions/gold_rush/shop_cards.py b/backend/bang/expansions/gold_rush/shop_cards.py index c5bb515..5b3ef68 100644 --- a/backend/bang/expansions/gold_rush/shop_cards.py +++ b/backend/bang/expansions/gold_rush/shop_cards.py @@ -125,7 +125,7 @@ class Piccone(ShopCard): class Ricercato(ShopCard): def __init__(self): super().__init__("Ricercato", 2, ShopCardKind.BLACK) - self.icon = '⛏️' + self.icon = '🤠️' def play_card(self, player, against, _with=None): pass diff --git a/backend/bang/game.py b/backend/bang/game.py index 19358b9..add5b20 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -614,6 +614,7 @@ class Game: 'equipment': [e.__dict__ for e in p.equipment], 'lives': p.lives, 'max_lives': p.max_lives, + 'gold_nuggets': p.gold_nuggets, 'is_sheriff': isinstance(p.role, roles.Sheriff), 'is_my_turn': p.is_my_turn, 'pending_action': p.pending_action, diff --git a/backend/bang/players.py b/backend/bang/players.py index 1cbe9d6..cf352d3 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -74,6 +74,7 @@ class Player: self.choose_text = 'choose_card_to_get' self.using_rimbalzo = 0 # 0 no, 1 scegli giocatore, 2 scegli carta self.bang_used = 0 + self.gold_nuggets = 0 def join_game(self, game): self.game = game @@ -866,6 +867,9 @@ class Player: self.sio.emit('chat_message', room=self.game.name, data=f'_special_el_gringo|{self.name}|{self.attacker.name}') self.attacker.notify_self() + if self.attacker and 'gold_rush' in self.game.expansions: + self.attacker.gold_nuggets += 1 + self.attacker.notify_self() self.heal_if_needed() self.mancato_needed = 0 self.expected_response = [] @@ -987,6 +991,16 @@ class Player: self.hand.append(self.game.deck.draw(True)) self.notify_self() + def buy_gold_rush_card(self, index): + print(f'{self.name} wants to buy gr-card index {index} in room {self.game.name}') + card = self.game.deck.shop_cards[index] + if self.pending_action == PendingAction.PLAY and self.gold_nuggets >= card.number: + self.gold_nuggets -= card.number + self.game.deck.shop_deck.append(card) + self.game.deck.shop_cards[index] = None + self.game.deck.fill_gold_rush_shop() + self.notify_self() + def end_turn(self, forced=False): print(f"{self.name} wants to end his turn") if not self.is_my_turn and not forced: diff --git a/frontend/src/components/Card.vue b/frontend/src/components/Card.vue index 1573457..c6812ab 100644 --- a/frontend/src/components/Card.vue +++ b/frontend/src/components/Card.vue @@ -33,6 +33,8 @@ export default { return ''; }, number() { + if (isNaN(this.card.suit)) + return this.card.number if (this.card.number === 1) return 'A' else if (this.card.number === 11) return 'J' else if (this.card.number === 12) return 'Q' diff --git a/frontend/src/components/Deck.vue b/frontend/src/components/Deck.vue index 4b6c7da..b9daa9c 100644 --- a/frontend/src/components/Deck.vue +++ b/frontend/src/components/Deck.vue @@ -2,9 +2,9 @@
- - - + + +
@@ -64,12 +64,14 @@ export default { desc: '', goldRushShopOpen: true, goldRushCards: [], + gold_nuggets: 0, }), sockets: { self(self){ self = JSON.parse(self) this.isPlaying = self.lives > 0 || self.is_ghost this.pending_action = self.pending_action + this.gold_nuggets = self.gold_nuggets }, scrap(card) { this.lastScrap = card @@ -120,6 +122,9 @@ export default { this.$socket.emit('draw', pile) } }, + buy_gold_rush_card(index) { + this.$socket.emit('buy_gold_rush_card', index) + }, event() { if (this.pending_action !== false) { this.$socket.emit('draw', 'event') diff --git a/frontend/src/components/Lobby.vue b/frontend/src/components/Lobby.vue index 9508ff2..af1d6d5 100644 --- a/frontend/src/components/Lobby.vue +++ b/frontend/src/components/Lobby.vue @@ -20,6 +20,9 @@
+ + 💵️ + ❤️ 💀 @@ -221,7 +224,7 @@ export default { playersTable() { if (Vue.config.devtools) console.log('update players') - return this.players.map((x,i) => { + return this.players.map((x, i) => { let offsetAngle = 360.0 / this.players.length let rotateAngle = (i) * offsetAngle let size = 130 From 682a9ed463a50eabef526d2aff1535c8c134135f Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Tue, 15 Jun 2021 22:26:34 +0200 Subject: [PATCH 005/201] add some of the cards logic --- backend/__init__.py | 7 ++++ .../bang/expansions/gold_rush/shop_cards.py | 42 ++++++++++--------- backend/bang/players.py | 3 +- frontend/src/components/Card.vue | 2 +- frontend/src/components/Deck.vue | 6 +-- frontend/src/components/Lobby.vue | 2 +- 6 files changed, 36 insertions(+), 26 deletions(-) diff --git a/backend/__init__.py b/backend/__init__.py index cc2a041..6a919e5 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -341,6 +341,13 @@ def chat_message(sid, msg): for cn in card_names: ses.hand.append([c for c in cards if c.name == cn][0]) ses.notify_self() + elif '/getnuggets' in msg: + sio.emit('chat_message', room=ses.game.name, data={'color': f'red','text':f'🚨 {ses.name} is in debug mode and got nuggets'}) + import bang.cards as cs + cmd = msg.split() + if len(cmd) == 2: + ses.gold_nuggets += int(cmd[1]) + ses.notify_self() elif '/gameinfo' in msg: sio.emit('chat_message', room=sid, data={'color': f'','text':f'info: {ses.game.__dict__}'}) elif '/meinfo' in msg: diff --git a/backend/bang/expansions/gold_rush/shop_cards.py b/backend/bang/expansions/gold_rush/shop_cards.py index 5b3ef68..a866dcf 100644 --- a/backend/bang/expansions/gold_rush/shop_cards.py +++ b/backend/bang/expansions/gold_rush/shop_cards.py @@ -62,36 +62,37 @@ class CorsaAllOro(ShopCard): self.icon = '🤑️' def play_card(self, player, against, _with=None): - if against != None: - pass # termini turno, vita max, poi inizi un nuovo turno - return False + player.lives = player.max_lives + return True class Rum(ShopCard): def __init__(self): super().__init__("Rum", 3, ShopCardKind.BROWN) self.icon = '🍷️' - def play_card(self, player, against, _with=None): - if against != None: - pass # Estrai 4 carte e ottieni 1 hp per ogni seme diverso - return False + def play_card(self, player, against=None, _with=None): + # Estrai 4 carte e ottieni 1 hp per ogni seme diverso + player.lives = min(player.lives+len({player.game.deck.pick_and_scrap().suit for i in range(4)}), player.max_lives) + return True class UnionPacific(ShopCard): def __init__(self): super().__init__("Union Pacific", 4, ShopCardKind.BROWN) self.icon = '🚆️' - def play_card(self, player, against, _with=None): - if against != None: - pass # Pesca 4 carte - return False + def play_card(self, player, against=None, _with=None): + player.sio.emit('chat_message', room=player.game.name, + data=f'_UnionPacific|{player.name}|{self.name}') + for i in range(4): + player.hand.append(player.game.deck.draw()) + return True class Calumet(ShopCard): def __init__(self): super().__init__("Calumet", 3, ShopCardKind.BLACK) self.icon = '🚭️' - def play_card(self, player, against, _with=None): + def play_card(self, player, against=None, _with=None): super().play_card(player, against, _with) # ti rende immuni ai quadri @@ -100,7 +101,7 @@ class Cinturone(ShopCard): super().__init__("Cinturone", 2, ShopCardKind.BLACK) self.icon = '🥡' - def play_card(self, player, against, _with=None): + def play_card(self, player, against=None, _with=None): super().play_card(player, against, _with) # max carte a fine turno 8 @@ -109,7 +110,7 @@ class FerroDiCavallo(ShopCard): super().__init__("Ferro di Cavallo", 2, ShopCardKind.BLACK) self.icon = '🎠' - def play_card(self, player, against, _with=None): + def play_card(self, player, against=None, _with=None): super().play_card(player, against, _with) # estrai come luky duke @@ -118,7 +119,7 @@ class Piccone(ShopCard): super().__init__("Piccone", 4, ShopCardKind.BLACK) self.icon = '⛏️' - def play_card(self, player, against, _with=None): + def play_card(self, player, against=None, _with=None): super().play_card(player, against, _with) # peschi una carta in piu a inizio turno @@ -127,7 +128,7 @@ class Ricercato(ShopCard): super().__init__("Ricercato", 2, ShopCardKind.BLACK) self.icon = '🤠️' - def play_card(self, player, against, _with=None): + def play_card(self, player, against=None, _with=None): pass # la giochi su un altro giocatore, ricompensa di 2 carte e 1 pepita a chi lo uccide @@ -136,7 +137,7 @@ class Setaccio(ShopCard): super().__init__("Setaccio", 3, ShopCardKind.BLACK) self.icon = '🥘️' - def play_card(self, player, against, _with=None): + def play_card(self, player, against=None, _with=None): super().play_card(player, against, _with) # paghi 1 pepita per pescare 1 carta durante il tuo turno (max 2 volte per turno) @@ -145,7 +146,7 @@ class Stivali(ShopCard): super().__init__("Stivali", 3, ShopCardKind.BLACK) self.icon = '🥾️' - def play_card(self, player, against, _with=None): + def play_card(self, player, against=None, _with=None): super().play_card(player, against, _with) # peschi una carta ogni volta che vieni ferito @@ -154,7 +155,7 @@ class Talismano(ShopCard): super().__init__("Talismano", 3, ShopCardKind.BLACK) self.icon = '🧿' - def play_card(self, player, against, _with=None): + def play_card(self, player, against=None, _with=None): super().play_card(player, against, _with) # ottieni una pepita ogni volta che vieni ferito @@ -163,7 +164,7 @@ class Zaino(ShopCard): super().__init__("Zaino", 3, ShopCardKind.BLACK) self.icon = '🎒️' - def play_card(self, player, against, _with=None): + def play_card(self, player, against=None, _with=None): super().play_card(player, against, _with) # paga 2 pepite per recuperare 1 vita @@ -187,4 +188,5 @@ def get_cards() -> List[Card]: ] for c in cards: c.expansion_icon = '🤑️' + c.expansion = 'gold_rush' return cards diff --git a/backend/bang/players.py b/backend/bang/players.py index cf352d3..e56b06c 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -993,9 +993,10 @@ class Player: def buy_gold_rush_card(self, index): print(f'{self.name} wants to buy gr-card index {index} in room {self.game.name}') - card = self.game.deck.shop_cards[index] + card: cs.Card = self.game.deck.shop_cards[index] if self.pending_action == PendingAction.PLAY and self.gold_nuggets >= card.number: self.gold_nuggets -= card.number + card.play_card(self) self.game.deck.shop_deck.append(card) self.game.deck.shop_cards[index] = None self.game.deck.fill_gold_rush_shop() diff --git a/frontend/src/components/Card.vue b/frontend/src/components/Card.vue index c6812ab..83dc032 100644 --- a/frontend/src/components/Card.vue +++ b/frontend/src/components/Card.vue @@ -1,5 +1,5 @@