From 7936fdf6498b2b380f8b7f4eb9914c1b6e9f84e8 Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Thu, 26 Nov 2020 00:19:27 +0100 Subject: [PATCH] fix lobby error --- backend/__init__.py | 4 ++-- backend/cards.py | 29 ++++++++++++++++++++++++++++- backend/players.py | 28 ++-------------------------- 3 files changed, 32 insertions(+), 29 deletions(-) diff --git a/backend/__init__.py b/backend/__init__.py index f2a30fd..3a2f3f7 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -54,7 +54,7 @@ def disconnect(sid): @sio.event def create_room(sid, room_name): while len([g for g in games if g.name == room_name]): - room_name += '_1' + room_name += f'_{random.randint(0,100)}' sio.leave_room(sid, 'lobby') sio.enter_room(sid, room_name) g = Game(room_name, sio) @@ -79,7 +79,7 @@ def join_room(sid, room): sio.leave_room(sid, 'lobby') sio.enter_room(sid, room_name) while len([p for p in games[i].players if p.name == sio.get_session(sid).name]): - sio.get_session(sid).name += '_1' + sio.get_session(sid).name += f'_{random.randint(0,100)}' games[i].add_player(sio.get_session(sid)) advertise_lobbies() diff --git a/backend/cards.py b/backend/cards.py index 7b7b478..760e62f 100644 --- a/backend/cards.py +++ b/backend/cards.py @@ -41,7 +41,27 @@ class Card(ABC): return f'{self.name} {char}{self.number}' return super().__str__() - def play_card(self, player, against): + def play_card(self, player, against):#self --> carta + if self.is_equipment: + if self.is_weapon: + has_weapon = False + for i in range(len(player.equipment)): + if player.equipment[i].is_weapon: + player.game.deck.scrap(player.equipment[i]) + player.equipment[i] = self + has_weapon = True + break + if not has_weapon: + player.equipment.append(self) + elif self.name in [c.name for c in player.equipment if not isinstance(c, Dinamite)]: + for i in range(len(player.equipment)): + print('tipo',type(self)) + if type(player.equipment[i]) == type(self): + player.game.deck.scrap(self.equipment[i]) + player.equipment[i] = self + break + else: + player.equipment.append(self) contro = f' contro {against}' if against else '' player.sio.emit('chat_message', room=player.game.name, data=f'{player.name} ha giocato {self.name}{contro}.') @@ -83,6 +103,13 @@ class Prigione(Card): self.desc = "Equipaggia questa carta a un altro giocatore, tranne lo Sceriffo. Il giocatore scelto all'inizio del suo turno, prima di pescare dovrà estrarre: se esce Cuori scarta questa carta e gioca normalmente il turno, altrimenti scarta questa carta e salta il turno" self.need_target = True + def play_card(self, player, against): + if against != None and not isinstance(player.game.get_player_named(against).role, r.Sheriff): + player.sio.emit('chat_message', room=player.game.name, + data=f'{self.name} ha giocato {self.name} contro {against}.') + player.game.get_player_named(against).equipment.append(self) + player.game.get_player_named(against).notify_self() + return False class Remington(Card): def __init__(self, suit, number): diff --git a/backend/players.py b/backend/players.py index b21c9cc..0c5fe0f 100644 --- a/backend/players.py +++ b/backend/players.py @@ -251,32 +251,8 @@ class Player: return card: cs.Card = self.hand.pop(hand_index) print(self.name, 'is playing ', card, ' against:', against) - if isinstance(card, cs.Prigione) and not isinstance(self.game.get_player_named(against).role, r.Sheriff): - self.sio.emit('chat_message', room=self.game.name, - data=f'{self.name} ha giocato {card.name} contro {against}.') - self.game.get_player_named(against).equipment.append(card) - self.game.get_player_named(against).notify_self() - elif card.is_equipment: - if card.is_weapon: - has_weapon = False - for i in range(len(self.equipment)): - if self.equipment[i].is_weapon: - self.game.deck.scrap(self.equipment[i]) - self.equipment[i] = card - has_weapon = True - break - if not has_weapon: - self.equipment.append(card) - elif card.name in [c.name for c in self.equipment if not isinstance(c, cs.Dinamite)]: - for i in range(len(self.equipment)): - if type(self.equipment[i]) == type(card): - self.game.deck.scrap(self.equipment[i]) - self.equipment[i] = card - break - else: - self.equipment.append(card) - else: - did_play_card = card.play_card(self, against) + did_play_card = card.play_card(self, against) + if not card.is_equipment: if did_play_card: self.game.deck.scrap(card) else: