diff --git a/backend/__init__.py b/backend/__init__.py
index 90d3876..5b005d5 100644
--- a/backend/__init__.py
+++ b/backend/__init__.py
@@ -1,4 +1,5 @@
import json
+from typing import List
import eventlet
import socketio
@@ -10,7 +11,7 @@ app = socketio.WSGIApp(sio, static_files={
'/': {'content_type': 'text/html', 'filename': 'index.html'}
})
-games = []
+games: List[Game] = []
def advertise_lobbies():
sio.emit('lobbies', room='lobby', data=[{'name': g.name, 'players': len(g.players)} for g in games if not g.started])
@@ -39,6 +40,8 @@ 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'
sio.leave_room(sid, 'lobby')
sio.enter_room(sid, room_name)
g = Game(room_name, sio)
@@ -53,6 +56,8 @@ def join_room(sid, room_name):
sio.leave_room(sid, 'lobby')
sio.enter_room(sid, room_name)
i = [g.name for g in games].index(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'
games[i].add_player(sio.get_session(sid))
advertise_lobbies()
diff --git a/backend/players.py b/backend/players.py
index 518ec41..19f0fe7 100644
--- a/backend/players.py
+++ b/backend/players.py
@@ -87,6 +87,10 @@ class Player:
def notify_self(self):
if self.lives <= 0 and self.max_lives > 0:
print('dying, attacker', self.attacker)
+ if isinstance(self.character, characters.SidKetchum) and len(self.hand) > 1:
+ self.lives += 1
+ self.game.deck.scrap(self.hand.pop(randrange(0, len(self.hand))))
+ self.game.deck.scrap(self.hand.pop(randrange(0, len(self.hand))))
self.game.player_death(self)
if isinstance(self.character, characters.CalamityJanet):
self.expected_response = [cards.Mancato(0,0).name, cards.Bang(0,0).name]
@@ -109,7 +113,8 @@ class Player:
def play_turn(self):
if self.lives == 0:
- self.end_turn(forced=True)
+ return self.end_turn(forced=True)
+ self.scrapped_cards = 0
self.sio.emit('chat_message', room=self.game.name, data=f'È il turno di {self.name}.')
print(f'I {self.name} was notified that it is my turn')
self.was_shot = False
@@ -463,6 +468,10 @@ class Player:
def scrap(self, card_index):
if self.is_my_turn or isinstance(self.character, characters.SidKetchum):
+ self.scrapped_cards += 1
+ if isinstance(self.character, characters.SidKetchum) and self.scrapped_cards == 2:
+ self.scrapped_cards = 0
+ self.lives = min(self.lives+1, self.max_lives)
self.game.deck.scrap(self.hand.pop(card_index))
self.notify_self()
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 1c2f937..9affadf 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -26,7 +26,7 @@
-