add detection when player left the tournament to not start any game, add action 7 to tournaments

This commit is contained in:
2024-10-22 01:42:05 +02:00
parent 1b6b921cbc
commit a40d886485
6 changed files with 34 additions and 10 deletions

View File

@ -6,7 +6,7 @@
# By: tomoron <tomoron@student.42angouleme.fr> +#+ +:+ +#+ # # By: tomoron <tomoron@student.42angouleme.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2024/10/19 18:29:36 by tomoron #+# #+# # # Created: 2024/10/19 18:29:36 by tomoron #+# #+# #
# Updated: 2024/10/20 15:36:33 by tomoron ### ########.fr # # Updated: 2024/10/22 01:19:12 by tomoron ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #

View File

@ -6,13 +6,14 @@
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ # # By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2024/10/08 07:33:29 by tomoron #+# #+# # # Created: 2024/10/08 07:33:29 by tomoron #+# #+# #
# Updated: 2024/10/11 10:47:53 by edbernar ### ########.fr # # Updated: 2024/10/22 01:19:10 by tomoron ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
class DummySocket: class DummySocket:
def __init__(self, game): def __init__(self, game):
self.id = 0 self.id = 0
self.online = True
self.username = "bot" self.username = "bot"
self.game = game self.game = game
self.pfp = "/static/img/robot_pfp.jpg" self.pfp = "/static/img/robot_pfp.jpg"

View File

@ -6,7 +6,7 @@
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ # # By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2024/10/06 16:33:56 by tomoron #+# #+# # # Created: 2024/10/06 16:33:56 by tomoron #+# #+# #
# Updated: 2024/10/20 15:48:47 by edbernar ### ########.fr # # Updated: 2024/10/22 01:30:44 by tomoron ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
@ -46,4 +46,5 @@ class GameSettings:
maxScore = 1 maxScore = 1
maxPlayerSpeed = 6 maxPlayerSpeed = 6
BotMovement = False BotMovement = True
maxTimePlayerWait = 10

View File

@ -6,7 +6,7 @@
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ # # By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2024/10/04 17:17:07 by tomoron #+# #+# # # Created: 2024/10/04 17:17:07 by tomoron #+# #+# #
# Updated: 2024/10/20 15:30:13 by tomoron ### ########.fr # # Updated: 2024/10/22 01:34:49 by tomoron ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
@ -121,7 +121,18 @@ class Tournament:
self.broadcast({"action":6, "p1" : p1, "p2" : p2, "p1Win": p1Win}) self.broadcast({"action":6, "p1" : p1, "p2" : p2, "p1Win": p1Win})
self.history.append({"p1": p1, "p2" : p2, "p1Win":p1Win}) self.history.append({"p1": p1, "p2" : p2, "p1Win":p1Win})
def allPlayersReady(self):
for x in self.players:
if (not x.isTournamentReady()):
return False
return True
async def tournamentLoop(self): async def tournamentLoop(self):
while self.finalGame.winner == None: while self.finalGame.winner == None:
await asyncio.sleep(1) await asyncio.sleep(1)
nbLoop = 0
while not self.allPlayersReady() and nbLoop < GameSettings.maxTimePlayerWait * 10:
nbLoop += 1
await asyncio.sleep(0.1)
self.broadcast({"action":7, "winnerId" : self.players.index(self.finalGame.winner)})
print("tournament done, winner is ", self.finalGame.winner.socket.username) print("tournament done, winner is ", self.finalGame.winner.socket.username)

View File

@ -3,13 +3,15 @@
# ::: :::::::: # # ::: :::::::: #
# TournamentGame.py :+: :+: :+: # # TournamentGame.py :+: :+: :+: #
# +:+ +:+ +:+ # # +:+ +:+ +:+ #
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ # +#+#+#+#+#+ +#+ # # By: tomoron <tomoron@student.42angouleme.fr> +#+ +:+ +#+ #
# Created: 2024/10/12 22:49:00 by tomoron #+# #+# # # +#+#+#+#+#+ +#+ #
# Updated: 2024/10/15 13:36:34 by tomoron ### ########.fr # # Created: 2024/10/22 01:37:00 by tomoron #+# #+# #
# Updated: 2024/10/22 01:37:12 by tomoron ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
from .Game import Game from .Game import Game
from .GameSettings import GameSettings
import asyncio import asyncio
class TournamentGame: class TournamentGame:
@ -31,9 +33,15 @@ class TournamentGame:
else: else:
l = self.left l = self.left
r = self.right r = self.right
while (not l.isTournamentReady() or not r.isTournamentReady()): nbLoop = 0
while (not l.isTournamentReady() or not r.isTournamentReady()) and nbLoop < GameSettings.maxTimePlayerWait * 10:
print("waiting for player") print("waiting for player")
nbLoop += 1
await asyncio.sleep(0.1) await asyncio.sleep(0.1)
if(not l.socket.online or not r.socket.online):
print("player is not online, opponent is winner")
self.winner = l if l.socket.online else r
return;
await asyncio.sleep(3) await asyncio.sleep(3)
self.game = Game(l, r, self.tournament.code) self.game = Game(l, r, self.tournament.code)
l.socket.sync_send("tournament", { l.socket.sync_send("tournament", {

View File

@ -6,7 +6,7 @@
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ # # By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2024/10/01 13:16:39 by edbernar #+# #+# # # Created: 2024/10/01 13:16:39 by edbernar #+# #+# #
# Updated: 2024/10/20 15:02:51 by edbernar ### ########.fr # # Updated: 2024/10/22 01:02:00 by tomoron ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
@ -51,6 +51,9 @@ from .tournamentActions.fetchAllData import fetchAllData
# - p1 : id of the player 1 # - p1 : id of the player 1
# - p2 : id of the player 2 # - p2 : id of the player 2
# - p1Win : true/false # - p1Win : true/false
#
# 7 : tournament end : when the tournament ends
# - winnerId : id of the player who won the game
#client actions (actions sent by the client) : #client actions (actions sent by the client) :