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
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,31 +230,11 @@ class Game:
if (self.waiting_for > 0):
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)
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.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:
@ -267,12 +252,47 @@ class Game:
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()
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:
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()

View File

@ -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}')