ready status and expansion

This commit is contained in:
Alberto Xamin 2020-11-26 16:26:48 +01:00
parent 3d88fdeb12
commit 24f7a68024
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
5 changed files with 35 additions and 11 deletions

View File

@ -5,7 +5,7 @@ import bang.cards as cs
class Deck: class Deck:
def __init__(self, game): def __init__(self, game):
super().__init__() 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 self.game = game
random.shuffle(self.cards) random.shuffle(self.cards)
self.scrap_pile: List[cs.Card] = [] self.scrap_pile: List[cs.Card] = []

View File

@ -6,8 +6,31 @@ class Riparo(Mustang):
self.name = 'Riparo' self.name = 'Riparo'
self.icon = '' 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]: def get_starting_deck() -> List[Card]:
return [ return [
#TODO: aggiungere anche le carte normalmente presenti https://bang.dvgiochi.com/cardslist.php?id=3
Riparo(Suit.DIAMONDS, 'K'), Riparo(Suit.DIAMONDS, 'K'),
Mustang(Suit.DIAMONDS, 'K'), Binocolo(Suit.DIAMONDS, 10),
]*100 Pugno(Suit.SPADES, 10),
]

View File

@ -20,6 +20,7 @@ class Game:
self.waiting_for = 0 self.waiting_for = 0
self.initial_players = 0 self.initial_players = 0
self.password = '' self.password = ''
self.expansions = []
def add_player(self, player: players.Player): def add_player(self, player: players.Player):
if player in self.players or len(self.players) >= 7: if player in self.players or len(self.players) >= 7:
@ -27,7 +28,7 @@ class Game:
player.join_game(self) player.join_game(self)
self.players.append(player) self.players.append(player)
print(f'Added player {player.name} to game') 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.') self.sio.emit('chat_message', room=self.name, data=f'{player.name} è entrato nella lobby.')
def set_private(self): def set_private(self):
@ -36,10 +37,11 @@ class Game:
print(self.name, 'is now private pwd', self.password) print(self.name, 'is now private pwd', self.password)
else: else:
self.password = '' 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): def notify_character_selection(self):
self.readyCount += 1 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): if self.readyCount == len(self.players):
self.distribute_roles() self.distribute_roles()

View File

@ -86,7 +86,8 @@ export default {
this.password = data.password this.password = data.password
this.players = data.players.map(x => { this.players = data.players.map(x => {
return { return {
name: x, name: x.name,
ready: x.ready,
ncards: 0, ncards: 0,
} }
}) })
@ -154,7 +155,7 @@ export default {
return { return {
name: player.name, name: player.name,
number: ((this.username == player.name) ? 'YOU' : (this.players[0].name == player.name) ? 'OWNER' :'') + (player.dist ? `${player.dist}` : ''), 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, is_character: true,
} }
}, },

View File

@ -196,12 +196,10 @@ export default {
let cant_play_bang = (this.has_played_bang && this.equipment.filter(x => x.name == 'Volcanic').length == 0) let cant_play_bang = (this.has_played_bang && this.equipment.filter(x => x.name == 'Volcanic').length == 0)
if (this.pending_action == 2) { if (this.pending_action == 2) {
if ((card.need_target || calamity_special) && !((card.name == 'Bang!' || (calamity_special && card.name=='Mancato!')) && cant_play_bang)) { 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)) if (card.name == 'Bang!' || calamity_special)
this.range = 1
else if (card.name == 'Bang!' || calamity_special)
this.range = this.sight this.range = this.sight
else else
this.range = 999 this.range = card.range
this.can_target_sheriff = (card.name !== 'Prigione') this.can_target_sheriff = (card.name !== 'Prigione')
if (this.visiblePlayers.length == 0 && this.hand.length > this.lives) { if (this.visiblePlayers.length == 0 && this.hand.length > this.lives) {
this.really_play_card(card, null) this.really_play_card(card, null)