reset on win
This commit is contained in:
parent
eb1569d5b5
commit
f4ce7d1f7b
@ -6,6 +6,7 @@ import bang.players as players
|
||||
import bang.characters as characters
|
||||
from bang.deck import Deck
|
||||
import bang.roles as roles
|
||||
import eventlet
|
||||
|
||||
class Game:
|
||||
def __init__(self, name, sio:socketio):
|
||||
@ -13,6 +14,7 @@ class Game:
|
||||
self.sio = sio
|
||||
self.name = name
|
||||
self.players: List[players.Player] = []
|
||||
self.dead_players: List[players.Player] = []
|
||||
self.deck: Deck = None
|
||||
self.started = False
|
||||
self.turn = 0
|
||||
@ -62,10 +64,12 @@ class Game:
|
||||
self.notify_room()
|
||||
|
||||
def notify_character_selection(self):
|
||||
self.readyCount += 1
|
||||
self.notify_room()
|
||||
if self.readyCount == len(self.players):
|
||||
if len([p for p in self.players if p.character == None]) == 0:
|
||||
for i in range(len(self.players)):
|
||||
print(self.name)
|
||||
print(self.players[i].name)
|
||||
print(self.players[i].character)
|
||||
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):
|
||||
@ -203,6 +207,7 @@ class Game:
|
||||
def handle_disconnect(self, player: players.Player):
|
||||
print(f'player {player.name} left the game {self.name}')
|
||||
self.player_death(player=player)
|
||||
self.dead_players.remove(player)
|
||||
if len(self.players) == 0:
|
||||
print(f'no players left in game {self.name}')
|
||||
return True
|
||||
@ -225,6 +230,33 @@ class Game:
|
||||
if (self.waiting_for > 0):
|
||||
self.responders_did_respond_resume_turn()
|
||||
|
||||
index = self.players.index(player)
|
||||
died_in_his_turn = self.started and index == self.turn
|
||||
if self.started and index <= self.turn:
|
||||
self.turn -= 1
|
||||
self.dead_players.append(self.players.pop(index))
|
||||
self.notify_room()
|
||||
self.sio.emit('chat_message', room=self.name, data=f'{player.name} è morto.')
|
||||
if self.started:
|
||||
self.sio.emit('chat_message', room=self.name, data=f'{player.name} era {player.role.name}!')
|
||||
for p in self.players:
|
||||
p.notify_self()
|
||||
self.players_map = {c.name: i for i, c in enumerate(self.players)}
|
||||
if self.started:
|
||||
print('Check win status')
|
||||
attacker_role = None
|
||||
if player.attacker:
|
||||
attacker_role = player.attacker.role
|
||||
winners = [p for p in self.players if p.role != None and p.role.on_player_death(self.players, initial_players=self.initial_players, dead_role=player.role, attacker_role=attacker_role)]
|
||||
if len(winners) > 0:
|
||||
print('WE HAVE A WINNER')
|
||||
for p in self.players:
|
||||
p.win_status = p in winners
|
||||
self.sio.emit('chat_message', room=self.name, data=f'{p.name} ha vinto.')
|
||||
p.notify_self()
|
||||
eventlet.sleep(5.0)
|
||||
return self.reset()
|
||||
|
||||
vulture = [p for p in self.players if isinstance(p.character, characters.VultureSam)]
|
||||
if len(vulture) == 0:
|
||||
for i in range(len(player.hand)):
|
||||
@ -245,34 +277,22 @@ class Game:
|
||||
herb[0].hand.append(self.deck.draw())
|
||||
herb[0].hand.append(self.deck.draw())
|
||||
|
||||
index = self.players.index(player)
|
||||
died_in_his_turn = self.started and index == self.turn
|
||||
if self.started and index <= self.turn:
|
||||
self.turn -= 1
|
||||
self.players.pop(index)
|
||||
self.notify_room()
|
||||
self.sio.emit('chat_message', room=self.name, data=f'{player.name} è morto.')
|
||||
if self.started:
|
||||
self.sio.emit('chat_message', room=self.name, data=f'{player.name} era {player.role.name}!')
|
||||
for p in self.players:
|
||||
p.notify_self()
|
||||
self.players_map = {c.name: i for i, c in enumerate(self.players)}
|
||||
if self.started:
|
||||
print('Check win status')
|
||||
attacker_role = None
|
||||
if player.attacker:
|
||||
attacker_role = player.attacker.role
|
||||
winners = [p for p in self.players if p.role != None and p.role.on_player_death(self.players, initial_players=self.initial_players, dead_role=player.role, attacker_role=attacker_role)]
|
||||
if len(winners) > 0:
|
||||
print('WE HAVE A WINNER')
|
||||
for p in self.players:
|
||||
p.win_status = p in winners
|
||||
p.notify_self()
|
||||
return
|
||||
|
||||
if died_in_his_turn:
|
||||
self.next_turn()
|
||||
|
||||
def reset(self):
|
||||
print('resetting lobby')
|
||||
self.players.extend(self.dead_players)
|
||||
self.dead_players = []
|
||||
print(self.players)
|
||||
self.started = False
|
||||
self.waiting_for = 0
|
||||
for p in self.players:
|
||||
p.reset()
|
||||
p.notify_self()
|
||||
eventlet.sleep(0.5)
|
||||
self.notify_room()
|
||||
|
||||
def get_visible_players(self, player: players.Player):
|
||||
i = self.players.index(player)
|
||||
sight = player.get_sight()
|
||||
|
@ -48,6 +48,33 @@ class Player:
|
||||
self.mancato_needed = 0
|
||||
self.molly_discarded_cards = 0
|
||||
|
||||
def reset(self):
|
||||
self.hand: cs.Card = []
|
||||
self.equipment: cs.Card = []
|
||||
self.role: r.Role = None
|
||||
self.character: chars.Character = None
|
||||
self.lives = 0
|
||||
self.max_lives = 0
|
||||
self.is_my_turn = False
|
||||
self.is_waiting_for_action = True
|
||||
self.has_played_bang = False
|
||||
self.pending_action: PendingAction = None
|
||||
self.available_characters = []
|
||||
self.was_shot = False
|
||||
self.on_pick_cb = None
|
||||
self.on_failed_response_cb = None
|
||||
self.event_type: str = None
|
||||
self.expected_response = []
|
||||
self.attacker: Player = None
|
||||
self.target_p: str = None
|
||||
self.is_drawing = False
|
||||
try:
|
||||
del self.win_status
|
||||
except:
|
||||
pass
|
||||
self.mancato_needed = 0
|
||||
self.molly_discarded_cards = 0
|
||||
|
||||
def join_game(self, game):
|
||||
self.game = game
|
||||
print(f'I {self.name} joined {self.game}')
|
||||
|
Loading…
Reference in New Issue
Block a user