reset on win

This commit is contained in:
Alberto Xamin 2020-12-02 23:25:13 +01:00
parent eb1569d5b5
commit f4ce7d1f7b
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
2 changed files with 71 additions and 24 deletions

View File

@ -6,6 +6,7 @@ import bang.players as players
import bang.characters as characters import bang.characters as characters
from bang.deck import Deck from bang.deck import Deck
import bang.roles as roles import bang.roles as roles
import eventlet
class Game: class Game:
def __init__(self, name, sio:socketio): def __init__(self, name, sio:socketio):
@ -13,6 +14,7 @@ class Game:
self.sio = sio self.sio = sio
self.name = name self.name = name
self.players: List[players.Player] = [] self.players: List[players.Player] = []
self.dead_players: List[players.Player] = []
self.deck: Deck = None self.deck: Deck = None
self.started = False self.started = False
self.turn = 0 self.turn = 0
@ -62,10 +64,12 @@ class Game:
self.notify_room() self.notify_room()
def notify_character_selection(self): def notify_character_selection(self):
self.readyCount += 1
self.notify_room() 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)): 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.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() self.players[i].prepare()
for k in range(self.players[i].max_lives): for k in range(self.players[i].max_lives):
@ -203,6 +207,7 @@ class Game:
def handle_disconnect(self, player: players.Player): def handle_disconnect(self, player: players.Player):
print(f'player {player.name} left the game {self.name}') print(f'player {player.name} left the game {self.name}')
self.player_death(player=player) self.player_death(player=player)
self.dead_players.remove(player)
if len(self.players) == 0: if len(self.players) == 0:
print(f'no players left in game {self.name}') print(f'no players left in game {self.name}')
return True return True
@ -225,31 +230,11 @@ class Game:
if (self.waiting_for > 0): if (self.waiting_for > 0):
self.responders_did_respond_resume_turn() self.responders_did_respond_resume_turn()
vulture = [p for p in self.players if isinstance(p.character, characters.VultureSam)]
if len(vulture) == 0:
for i in range(len(player.hand)):
self.deck.scrap(player.hand.pop())
for i in range(len(player.equipment)):
self.deck.scrap(player.equipment.pop())
else:
for i in range(len(player.hand)):
vulture[0].hand.append(player.hand.pop())
for i in range(len(player.equipment)):
vulture[0].hand.append(player.equipment.pop())
vulture[0].notify_self()
greg = [p for p in self.players if isinstance(p.character, chd.GregDigger)]
if len(greg) > 0:
greg[0].lives = min(greg[0].lives+2, greg[0].max_lives)
herb = [p for p in self.players if isinstance(p.character, chd.HerbHunter)]
if len(herb) > 0:
herb[0].hand.append(self.deck.draw())
herb[0].hand.append(self.deck.draw())
index = self.players.index(player) index = self.players.index(player)
died_in_his_turn = self.started and index == self.turn died_in_his_turn = self.started and index == self.turn
if self.started and index <= self.turn: if self.started and index <= self.turn:
self.turn -= 1 self.turn -= 1
self.players.pop(index) self.dead_players.append(self.players.pop(index))
self.notify_room() self.notify_room()
self.sio.emit('chat_message', room=self.name, data=f'{player.name} è morto.') self.sio.emit('chat_message', room=self.name, data=f'{player.name} è morto.')
if self.started: if self.started:
@ -267,12 +252,47 @@ class Game:
print('WE HAVE A WINNER') print('WE HAVE A WINNER')
for p in self.players: for p in self.players:
p.win_status = p in winners p.win_status = p in winners
self.sio.emit('chat_message', room=self.name, data=f'{p.name} ha vinto.')
p.notify_self() p.notify_self()
return 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)):
self.deck.scrap(player.hand.pop())
for i in range(len(player.equipment)):
self.deck.scrap(player.equipment.pop())
else:
for i in range(len(player.hand)):
vulture[0].hand.append(player.hand.pop())
for i in range(len(player.equipment)):
vulture[0].hand.append(player.equipment.pop())
vulture[0].notify_self()
greg = [p for p in self.players if isinstance(p.character, chd.GregDigger)]
if len(greg) > 0:
greg[0].lives = min(greg[0].lives+2, greg[0].max_lives)
herb = [p for p in self.players if isinstance(p.character, chd.HerbHunter)]
if len(herb) > 0:
herb[0].hand.append(self.deck.draw())
herb[0].hand.append(self.deck.draw())
if died_in_his_turn: if died_in_his_turn:
self.next_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): def get_visible_players(self, player: players.Player):
i = self.players.index(player) i = self.players.index(player)
sight = player.get_sight() sight = player.get_sight()

View File

@ -48,6 +48,33 @@ class Player:
self.mancato_needed = 0 self.mancato_needed = 0
self.molly_discarded_cards = 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): def join_game(self, game):
self.game = game self.game = game
print(f'I {self.name} joined {self.game}') print(f'I {self.name} joined {self.game}')