diff --git a/backend/bang/deck.py b/backend/bang/deck.py index c9ebdb0..015a841 100644 --- a/backend/bang/deck.py +++ b/backend/bang/deck.py @@ -5,7 +5,7 @@ import bang.cards as cs class Deck: def __init__(self, game): super().__init__() - self.cards: List[cs.Card] = cs.get_starting_deck() + self.cards: List[cs.Card] = cs.get_starting_deck(game.expansions) self.game = game random.shuffle(self.cards) self.scrap_pile: List[cs.Card] = [] diff --git a/backend/bang/expansions/dodge_city/cards.py b/backend/bang/expansions/dodge_city/cards.py index 58a95d8..aecabbe 100644 --- a/backend/bang/expansions/dodge_city/cards.py +++ b/backend/bang/expansions/dodge_city/cards.py @@ -6,8 +6,31 @@ class Riparo(Mustang): self.name = 'Riparo' self.icon = 'โ›ฐ' +class Binocolo(Mirino): + def __init__(self, suit, number): + super().__init__(suit, number) + self.name = 'Binocolo' + self.icon = '๐Ÿ”' + +class Pugno(Card): + def __init__(self, suit, number): + super().__init__(suit, 'Pugno!', number, range=1) + self.icon = '๐Ÿ‘Š' + self.desc = "Spara a un giocatore a distanta 1" + self.need_target = True + + def play_card(self, player, against): + if against != None: + import bang.characters as chars + super().play_card(player, against=against) + player.game.attack(player, against) + return True + return False + def get_starting_deck() -> List[Card]: return [ + #TODO: aggiungere anche le carte normalmente presenti https://bang.dvgiochi.com/cardslist.php?id=3 Riparo(Suit.DIAMONDS, 'K'), - Mustang(Suit.DIAMONDS, 'K'), - ]*100 + Binocolo(Suit.DIAMONDS, 10), + Pugno(Suit.SPADES, 10), + ] diff --git a/backend/bang/game.py b/backend/bang/game.py index 4fb6d1f..091e778 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -20,6 +20,7 @@ class Game: self.waiting_for = 0 self.initial_players = 0 self.password = '' + self.expansions = [] def add_player(self, player: players.Player): if player in self.players or len(self.players) >= 7: @@ -27,7 +28,7 @@ class Game: player.join_game(self) self.players.append(player) print(f'Added player {player.name} to game') - self.sio.emit('room', room=self.name, data={'name': self.name, 'started': self.started, 'players': [p.name for p in self.players], 'password': self.password}) + self.sio.emit('room', room=self.name, data={'name': self.name, 'started': self.started, 'players': [{'name':p.name, 'ready': False} for p in self.players], 'password': self.password}) self.sio.emit('chat_message', room=self.name, data=f'{player.name} รจ entrato nella lobby.') def set_private(self): @@ -36,10 +37,11 @@ class Game: print(self.name, 'is now private pwd', self.password) else: self.password = '' - self.sio.emit('room', room=self.name, data={'name': self.name, 'started': self.started, 'players': [p.name for p in self.players], 'password': self.password}) + self.sio.emit('room', room=self.name, data={'name': self.name, 'started': self.started, 'players': [{'name':p.name, 'ready': False} for p in self.players], 'password': self.password}) def notify_character_selection(self): self.readyCount += 1 + self.sio.emit('room', room=self.name, data={'name': self.name, 'started': self.started, 'players': [{'name':p.name, 'ready': p.character!=None} for p in self.players], 'password': self.password}) if self.readyCount == len(self.players): self.distribute_roles() diff --git a/frontend/src/components/Lobby.vue b/frontend/src/components/Lobby.vue index fa2a236..73c6d17 100644 --- a/frontend/src/components/Lobby.vue +++ b/frontend/src/components/Lobby.vue @@ -86,7 +86,8 @@ export default { this.password = data.password this.players = data.players.map(x => { return { - name: x, + name: x.name, + ready: x.ready, ncards: 0, } }) @@ -154,7 +155,7 @@ export default { return { name: player.name, number: ((this.username == player.name) ? 'YOU' : (this.players[0].name == player.name) ? 'OWNER' :'') + (player.dist ? `${player.dist}โ›ฐ` : ''), - icon: (player.lives === undefined || player.lives > 0) ? (player.is_sheriff ? 'โญ' : player.icon || '๐Ÿค ' ) : 'โ˜ ๏ธ', + icon: (player.lives === undefined || player.lives > 0) ? (player.is_sheriff ? 'โญ' : player.icon || ((player.ready)?'๐Ÿ‘': '๐Ÿค ') ) : 'โ˜ ๏ธ', is_character: true, } }, diff --git a/frontend/src/components/Player.vue b/frontend/src/components/Player.vue index 2c2ab44..6d3ebeb 100644 --- a/frontend/src/components/Player.vue +++ b/frontend/src/components/Player.vue @@ -196,12 +196,10 @@ export default { let cant_play_bang = (this.has_played_bang && this.equipment.filter(x => x.name == 'Volcanic').length == 0) if (this.pending_action == 2) { if ((card.need_target || calamity_special) && !((card.name == 'Bang!' || (calamity_special && card.name=='Mancato!')) && cant_play_bang)) { - if (card.name == 'Panico!' || (card.name == 'Bang!' && cant_play_bang)) - this.range = 1 - else if (card.name == 'Bang!' || calamity_special) + if (card.name == 'Bang!' || calamity_special) this.range = this.sight else - this.range = 999 + this.range = card.range this.can_target_sheriff = (card.name !== 'Prigione') if (this.visiblePlayers.length == 0 && this.hand.length > this.lives) { this.really_play_card(card, null)