distribute roles before available characters

This commit is contained in:
Alberto Xamin 2020-11-28 11:20:19 +01:00
parent 5f91829907
commit 5907379db8
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
3 changed files with 17 additions and 18 deletions

View File

@ -64,7 +64,13 @@ class Game:
self.readyCount += 1
self.notify_room()
if self.readyCount == len(self.players):
self.distribute_roles()
for i in range(len(self.players)):
self.sio.emit('chat_message', room=self.name, data=f'{self.players[i].name} ha come personaggio {self.players[i].character.name}, la sua abilità speciale è: {self.players[i].character.desc}')
self.players[i].prepare()
for k in range(self.players[i].max_lives):
self.players[i].hand.append(self.deck.draw())
self.players[i].notify_self()
self.players[self.turn].play_turn()
def choose_characters(self):
char_cards = random.sample(characters.all_characters(), len(self.players)*2)
@ -81,6 +87,7 @@ class Game:
self.started = True
self.deck = Deck(self)
self.initial_players = len(self.players)
self.distribute_roles()
self.choose_characters()
def distribute_roles(self):
@ -96,17 +103,12 @@ class Game:
available_roles = available_roles[:len(self.players)]
random.shuffle(available_roles)
for i in range(len(self.players)):
self.sio.emit('chat_message', room=self.name, data=f'{self.players[i].name} ha come personaggio {self.players[i].character.name}, la sua abilità speciale è: {self.players[i].character.desc}')
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)):
if isinstance(available_roles[i], roles.Sheriff):
self.sio.emit('chat_message', room=self.name, data=f'{self.players[i].name} È lo sceriffo')
self.turn = i
self.players[i].prepare()
for k in range(self.players[i].max_lives):
self.players[i].hand.append(self.deck.draw())
self.players[i].notify_self()
self.play_turn()
def attack_others(self, attacker: players.Player):
attacker.pending_action = players.PendingAction.WAIT

View File

@ -39,7 +39,6 @@
<chat/>
<Chooser v-if="selectedInfo" :text="$t('details')" :cards="selectedInfo" :cancelText="$t('ok')" :cancel="()=>{selectedInfo = null}" :select="()=>{selectedInfo = null}"/>
<transition name="bounce">
<Chooser v-if="showChooser" :text="$t('choose_character')" :cards="availableCharacters" :select="setCharacter"/>
<Chooser v-if="hasToChoose" :text="`${$t('choose_card')}${target_p?$t('choose_card_from') + target_p:''}`" :cards="chooseCards" :select="chooseCard"/>
</transition>
</div>
@ -74,7 +73,6 @@ export default {
players: [],
messages: [],
distances: {},
availableCharacters: [],
self: {},
hasToChoose: false,
target_p: '',
@ -99,9 +97,6 @@ export default {
}
})
},
characters(data) {
this.availableCharacters = JSON.parse(data)
},
start() {
this.started = true;
},
@ -130,9 +125,6 @@ export default {
}
return null;
},
showChooser() {
return this.availableCharacters.length > 0;
},
playersTable() {
console.log('update players')
return this.players.map((x,i) => {
@ -174,10 +166,6 @@ export default {
this.started = true;
this.$socket.emit('start_game')
},
setCharacter(char) {
this.availableCharacters = []
this.$socket.emit('set_character', char.name)
},
choose(player_name) {
console.log('choose from' + player_name)
this.target_p = player_name

View File

@ -33,6 +33,7 @@
<Chooser v-if="show_role" :text="$t('you_are')" :cards="[my_role]" :hintText="my_role.goal" :select="() => {show_role=false}" :cancel="() => {show_role=false}" :cancelText="$t('ok')" />
<Chooser v-if="notifycard" :key="notifycard.card" :text="`${notifycard.player} ${$t('did_pick_as')}:`" :cards="[notifycard.card]" :hintText="$t('if_card_red')" class="turn-notify-4s"/>
<Chooser v-if="!show_role && is_my_turn && pending_action < 2" :text="$t('play_your_turn')" :key="is_my_turn" class="turn-notify" />
<Chooser v-if="!show_role && availableCharacters.length > 0" :text="$t('choose_character')" :cards="availableCharacters" :select="setCharacter"/>
<Chooser v-if="hasToPickResponse" :text="`${$t('pick_a_card')} ${attacker?($t('to_defend_from')+' '+attacker):''}`" :key="hasToPickResponse" class="turn-notify" />
<Chooser v-if="!card_against && card_with" :text="`${$t('choose_scarp_card_to')} ${card_with.name.toUpperCase()}`" :cards="hand.filter(x => x !== card_with)" :select="selectWith" :cancel="()=>{card_with = null}"/>
<Chooser v-if="showScrapScreen" :text="`${$t('discard')} ${hand.length}/${lives}`" :cards="hand" :select="scrap" :cancel="cancelEndingTurn"/>
@ -60,6 +61,7 @@ export default {
data: () => ({
my_role: null,
character: null,
availableCharacters: [],
equipment: [],
hand: [],
lives: 0,
@ -93,6 +95,9 @@ export default {
this.my_role.is_back = true
this.show_role = true
},
characters(data) {
this.availableCharacters = JSON.parse(data)
},
self(self) {
self = JSON.parse(self)
this.name = self.name
@ -190,6 +195,10 @@ export default {
}
},
methods: {
setCharacter(char) {
this.availableCharacters = []
this.$socket.emit('set_character', char.name)
},
sidScrap(c) {
this.sidScrapForHealth.push(this.hand.indexOf(c))
if (this.sidScrapForHealth.length == 2) {