From abff5e0500b627d0d94919f1a84f3a0f415980dd Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Mon, 23 Nov 2020 21:13:37 +0100 Subject: [PATCH] sid ketchum --- backend/__init__.py | 7 ++++++- backend/players.py | 11 ++++++++++- frontend/src/App.vue | 7 ++++--- frontend/src/components/Player.vue | 3 ++- 4 files changed, 22 insertions(+), 6 deletions(-) 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 @@ - +
@@ -83,6 +83,9 @@ export default { }, lobbies(data) { this.openLobbies = data; + }, + room() { + this.isInLobby = true; } }, methods: { @@ -102,13 +105,11 @@ export default { createLobby(e) { if (this.lobbyName.trim().length > 0) { this.$socket.emit('create_room', this.lobbyName) - this.isInLobby = true; } e.preventDefault(); }, joinLobby(lobby) { this.$socket.emit('join_room', lobby.name) - this.isInLobby = true; }, init() { location.reload(); diff --git a/frontend/src/components/Player.vue b/frontend/src/components/Player.vue index a3d1b20..5859138 100644 --- a/frontend/src/components/Player.vue +++ b/frontend/src/components/Player.vue @@ -161,6 +161,7 @@ export default { methods: { end_turn(){ console.log('ending turn') + this.cancelEndingTurn() this.$socket.emit('end_turn') }, scrap(c) { @@ -251,7 +252,7 @@ export default { } .hand>.card:hover { margin-right:35pt; - margin-top:-0.5pt; + transform: translateY(-15px); } .equipment-slot { display:flex;