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
|
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()
|
||||||
|
@ -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}')
|
||||||
|
Loading…
Reference in New Issue
Block a user