add: tictactoe: timers on catchup

This commit is contained in:
Namonay
2024-05-14 16:46:16 +02:00
parent aa01405988
commit 995a808974
5 changed files with 50 additions and 25 deletions

View File

@ -5,7 +5,9 @@ from channels.generic.websocket import WebsocketConsumer
from django.contrib.auth.models import User
import json
import sys
from .objects.GameManager import GameManager
from .objects.tictactoe.TicTacToePlayer import TicTacToePlayer
@ -47,7 +49,7 @@ class TicTacToeWebSocket(WebsocketConsumer):
self.member.send(self.member.sign)
if (self.game._everbody_is_here() and self.game.model.started == True and self.game.model.finished == False): # if an user disconnected and joined back
self.member.send("catchup", {"morpion" : self.game._map, "turn" : self.game.turn, "currentMorpion": self.member.currentMorpion})
self.member.send("catchup", {"morpion" : self.game._map, "turn" : self.game.turn, "currentMorpion": self.member.currentMorpion, "timer" : 20 - (time.time() - self.game.time), "finished" : self.game.model.finished})
return
if (self.game._everbody_is_here() and self.game.model.started == False): # Launch the game if the two players are connected
@ -64,8 +66,10 @@ class TicTacToeWebSocket(WebsocketConsumer):
self.game.broadcast("game_move", data, [self.member])
if (data.get("timerIsDue") is not None and self.game.time + 20 < time.time()): # Frontend asking if the timer is due
self.winner = 'x' if self.game.turn == 'o' else 'o'
self.game.model.finish(self.user)
self.winner = "x" if self.game.turn == "o" else "o"
self.game.get_members()
self.game.model.finish(self.game.get_players_by_sign(self.winner).user)
self.game.broadcast("game_end", {"winning_sign": self.winner})
if (self.game.checkWin() != False): # Check if after a move, the game is finished
@ -77,6 +81,8 @@ class TicTacToeWebSocket(WebsocketConsumer):
def disconnect(self, event):
try:
self.member.socket = None
if (len(self.game.get_players_connected()) == 0):
self.game.model.finish(None)
except:
pass

View File

@ -8,13 +8,15 @@ from .TicTacToeSpectator import TicTacToeSpectator
import time
import sys
class TicTacToeGame(AGame):
def __init__(self, game_id: int, game_manager):
super().__init__("tictactoe", game_id, game_manager)
players: list[int] = self.model.get_players()
players = self.model.get_players()
self.players: list[TicTacToePlayer] = [TicTacToePlayer(player, None, self, ["x", "o"][i]) for i, player in enumerate(players)]
@ -29,6 +31,12 @@ class TicTacToeGame(AGame):
def _everbody_is_here(self):
return len(self.players) == len(self.get_players_connected())
def get_players_by_sign(self, sign):
for player in self.players:
if (player.sign == sign):
return player
return None
def _player_join(self, user_id: int, socket: WebsocketConsumer):
player = self.get_player_by_user_id(user_id)