add: tictactoe: timers on catchup
This commit is contained in:
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user