gatling, indiani

This commit is contained in:
Alberto Xamin 2020-11-22 15:20:59 +01:00
parent f65f46528e
commit ce8f9da155
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
2 changed files with 47 additions and 7 deletions

View File

@ -19,6 +19,7 @@ class Game:
self.started = False self.started = False
self.turn = 0 self.turn = 0
self.readyCount = 0 self.readyCount = 0
self.waiting_for = 0
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}')
@ -96,13 +97,37 @@ class Game:
'max_lives': self.players[j].max_lives, 'max_lives': self.players[j].max_lives,
} for j in range(len(self.players)) if i != j] } for j in range(len(self.players)) if i != j]
def attack_others(self, attacker:Player):
attacker.pending_action = players.PendingAction.WAIT
attacker.notify_self()
self.waiting_for = 0
self.readyCount = 0
for p in self.players:
if p != attacker:
if p.get_banged():
self.waiting_for += 1
def indian_others(self, attacker:Player):
attacker.pending_action = players.PendingAction.WAIT
attacker.notify_self()
self.waiting_for = 0
self.readyCount = 0
for p in self.players:
if p != attacker:
if p.get_indians():
self.waiting_for += 1
def attack(self, attacker:Player, target_username:str): def attack(self, attacker:Player, target_username:str):
if self.players[self.players_map[target_username]].get_banged(): if self.players[self.players_map[target_username]].get_banged():
self.readyCount = 0
self.waiting_for = 1
attacker.pending_action = players.PendingAction.WAIT attacker.pending_action = players.PendingAction.WAIT
attacker.notify_self() attacker.notify_self()
def duel(self, attacker:Player, target_username:str): def duel(self, attacker:Player, target_username:str):
if self.players[self.players_map[target_username]].get_dueled(attacker=attacker): if self.players[self.players_map[target_username]].get_dueled(attacker=attacker):
self.readyCount = 0
self.waiting_for = 1
attacker.pending_action = players.PendingAction.WAIT attacker.pending_action = players.PendingAction.WAIT
attacker.notify_self() attacker.notify_self()
@ -110,8 +135,12 @@ class Game:
return self.players[self.players_map[name]] return self.players[self.players_map[name]]
def responders_did_respond_resume_turn(self): def responders_did_respond_resume_turn(self):
self.players[self.turn].pending_action = players.PendingAction.PLAY self.readyCount += 1
self.players[self.turn].notify_self() if self.readyCount == self.waiting_for:
self.waiting_for = 0
self.readyCount = 0
self.players[self.turn].pending_action = players.PendingAction.PLAY
self.players[self.turn].notify_self()
def next_player(self): def next_player(self):
return self.players[(self.turn + 1) % len(self.players)] return self.players[(self.turn + 1) % len(self.players)]

View File

@ -220,13 +220,10 @@ class Player:
pass pass
if isinstance(card, cards.Gatling): if isinstance(card, cards.Gatling):
self.sio.emit('chat_message', room=self.game.name, data=f'{self.name} ha giocato {card.name}.') self.sio.emit('chat_message', room=self.game.name, data=f'{self.name} ha giocato {card.name}.')
for p in self.game.players: self.game.attack_others(self)
if p != self:
self.game.attack(self, p)
pass
if isinstance(card, cards.Indiani): if isinstance(card, cards.Indiani):
self.sio.emit('chat_message', room=self.game.name, data=f'{self.name} ha giocato {card.name}.') self.sio.emit('chat_message', room=self.game.name, data=f'{self.name} ha giocato {card.name}.')
pass self.game.indian_others(self)
if isinstance(card, cards.Mancato): if isinstance(card, cards.Mancato):
pass pass
if isinstance(card, cards.Panico): if isinstance(card, cards.Panico):
@ -304,6 +301,20 @@ class Player:
self.notify_self() self.notify_self()
return True return True
def get_indians(self, attacker = None):
if len([c for c in self.hand if isinstance(c, cards.Bang)]) == 0:
print('Cant defend')
self.take_damage_response()
return False
else:
print('has bang')
self.pending_action = PendingAction.RESPOND
self.expected_response = cards.Bang(0,0).name
self.event_type = 'indians'
self.on_failed_response_cb = self.take_damage_response
self.notify_self()
return True
def get_dueled(self, attacker): def get_dueled(self, attacker):
if len([c for c in self.hand if isinstance(c, cards.Bang)]) == 0: if len([c for c in self.hand if isinstance(c, cards.Bang)]) == 0:
print('Cant defend') print('Cant defend')