From 8ad33f8acb6eb238489872aee9a6af70015732c4 Mon Sep 17 00:00:00 2001 From: CHIBOUB Chakib Date: Tue, 10 Sep 2024 16:49:10 +0200 Subject: [PATCH 1/3] fixed tournament byes --- pong/game/game.py | 5 +++-- .../pong/tournament_waiting_room.html | 2 +- pong/game/tournament.py | 21 ++++++++++--------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/pong/game/game.py b/pong/game/game.py index 2235970..1e77fdf 100644 --- a/pong/game/game.py +++ b/pong/game/game.py @@ -27,9 +27,10 @@ class Game: 'game_text': '' } else: - self.botgame = player2 is None + # Set botgame to True if either player1 or player2 is None + self.botgame = player1 is None or player2 is None self.game_state = { - 'player1_name': player1.user.username, + 'player1_name': player1.user.username if player1 else 'BOT', 'player2_name': player2.user.username if player2 else 'BOT', 'player1_position': 150, 'player2_position': 150, diff --git a/pong/game/templates/pong/tournament_waiting_room.html b/pong/game/templates/pong/tournament_waiting_room.html index cb77338..4b635c3 100644 --- a/pong/game/templates/pong/tournament_waiting_room.html +++ b/pong/game/templates/pong/tournament_waiting_room.html @@ -1,4 +1,4 @@ - +jik

Tournament Waiting Room

diff --git a/pong/game/tournament.py b/pong/game/tournament.py index 4416135..dfea67b 100644 --- a/pong/game/tournament.py +++ b/pong/game/tournament.py @@ -21,7 +21,8 @@ class TournamentMatch(Game): await super().end_game(disconnected_player) # Handle the end of the match in the tournament context await self.tournament.handle_match_end(self) - del match_maker.active_games[self.game_id] + if self.game_id in match_maker.active_games: + del match_maker.active_games[self.game_id] class TournamentMatchMaker: def __init__(self): @@ -51,10 +52,10 @@ class TournamentMatchMaker: def generate_waiting_room_html(self): context = { - 'players': [player.user.username if player else 'BOT' for player in self.waiting_players], + 'players': [player.user.username if player else 'BYE' for player in self.waiting_players], 'tournament_state': self.tournament_state, 'players_count': len(self.waiting_players), - 'min_players_to_start': 2 # You can adjust this number as needed + 'min_players_to_start': 3 # You can adjust this number as needed } return render_to_string('pong/tournament_waiting_room.html', context) @@ -139,8 +140,8 @@ class TournamentMatchMaker: return [ [ { - 'player1': match.player1.user.username if match.player1 else 'BOT', - 'player2': match.player2.user.username if match.player2 else 'BOT', + 'player1': match.player1.user.username if match.player1 else 'BYE', + 'player2': match.player2.user.username if match.player2 else 'BYE', 'winner': match.game_state['player1_name'] if match.game_state['player1_score'] > match.game_state['player2_score'] else match.game_state['player2_name'] if match.ended else None, 'score1': match.game_state['player1_score'], 'score2': match.game_state['player2_score'] @@ -159,18 +160,18 @@ class TournamentMatchMaker: elif match.player1: # Handle BYE match await match_maker.notify_players(match.player1, match.player2, match.game_id, False) - asyncio.create_task(match.start_game()) - '''match.game_state['player1_score'] = 3 + #asyncio.create_task(match.start_game()) + match.game_state['player1_score'] = 3 match.game_state['player2_score'] = 0 - await match.end_game()''' + await match.end_game() def get_round_winners(self): winners = [] for match in self.rounds[-1]: if match.ended: winner = match.player1 if match.game_state['player1_score'] > match.game_state['player2_score'] else match.player2 - if winner: - winners.append(winner) + #if winner: + winners.append(winner) return winners async def end_tournament(self, winner): From c6cb11d2f842ec7bab706b362d4da29265055e11 Mon Sep 17 00:00:00 2001 From: CHIBOUB Chakib Date: Tue, 10 Sep 2024 17:23:54 +0200 Subject: [PATCH 2/3] handle tournament end game's --- pong/game/game.py | 11 +++++++++-- pong/game/templates/pong/tournament_waiting_room.html | 2 +- pong/game/tournament.py | 8 ++++++++ pong/game/utils.py | 2 ++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/pong/game/game.py b/pong/game/game.py index 1e77fdf..f8b6059 100644 --- a/pong/game/game.py +++ b/pong/game/game.py @@ -4,8 +4,9 @@ import json import asyncio import random from datetime import datetime -from .utils import handle_game_data +from .utils import handle_game_data, getlen from asgiref.sync import sync_to_async +from .models import Tournoi class Game: def __init__(self, game_id, player1, player2, localgame): @@ -242,6 +243,12 @@ class Game: if not self.botgame: if not self.localgame: await self.player2.send(end_message) - await sync_to_async(handle_game_data)(self.game_state['player1_name'], self.game_state['player2_name'], + if hasattr(self, 'tournament'): + len_tournament = await sync_to_async(getlen)() + await sync_to_async(handle_game_data)(self.game_state['player1_name'], self.game_state['player2_name'], + self.game_state['player1_score'], self.game_state['player2_score'], + self.bt1, self.bt2, duration, True, self.tournament.name + " #" + str(len_tournament + 1)) + else: + await sync_to_async(handle_game_data)(self.game_state['player1_name'], self.game_state['player2_name'], self.game_state['player1_score'], self.game_state['player2_score'], self.bt1, self.bt2, duration, False, None) diff --git a/pong/game/templates/pong/tournament_waiting_room.html b/pong/game/templates/pong/tournament_waiting_room.html index 4b635c3..cb77338 100644 --- a/pong/game/templates/pong/tournament_waiting_room.html +++ b/pong/game/templates/pong/tournament_waiting_room.html @@ -1,4 +1,4 @@ -jik +

Tournament Waiting Room

diff --git a/pong/game/tournament.py b/pong/game/tournament.py index dfea67b..c2b944c 100644 --- a/pong/game/tournament.py +++ b/pong/game/tournament.py @@ -7,6 +7,12 @@ import random from .matchmaking import match_maker from .game import Game +TOURNAMENT_NAMES = [ + "Champion's Clash", "Ultimate Showdown", "Battle Royale", + "Victory's Cup", "Legends Tournament", "Elite Series", "Clash of 42", + "Shibuya Incident", "Cunning Game", "Elite of the Stars", "Chaku's Disciples" +] + class TournamentMatch(Game): def __init__(self, game_id, player1, player2, tournament): # Initialize the parent Game class with the provided parameters @@ -32,6 +38,7 @@ class TournamentMatchMaker: self.current_round = 0 self.games = 0 self.tournament_state = "waiting" #Can be "waiting", "in_progress", or "ended" + self.name = random.choice(TOURNAMENT_NAMES) async def add_player(self, player): if self.tournament_state == "waiting" and player not in self.waiting_players: @@ -70,6 +77,7 @@ class TournamentMatchMaker: # Tournament start method async def start_tournament(self): + if len(self.waiting_players) < 2: return False if len(self.waiting_players) % 2 == 0: diff --git a/pong/game/utils.py b/pong/game/utils.py index d30ae3f..8e9c2db 100644 --- a/pong/game/utils.py +++ b/pong/game/utils.py @@ -172,3 +172,5 @@ def get_player_p_win(player_name): player = get_object_or_404(Player, name=player_name) return player.p_win +def getlen(): + return Tournoi.objects.count() From 239d6ef51cbc2614047c24002aa01551be9f967f Mon Sep 17 00:00:00 2001 From: CHIBOUB Chakib Date: Tue, 10 Sep 2024 17:34:49 +0200 Subject: [PATCH 3/3] log in tournament end game --- pong/game/game.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pong/game/game.py b/pong/game/game.py index f8b6059..56fe7ed 100644 --- a/pong/game/game.py +++ b/pong/game/game.py @@ -245,9 +245,11 @@ class Game: await self.player2.send(end_message) if hasattr(self, 'tournament'): len_tournament = await sync_to_async(getlen)() + name_tournament = self.tournament.name + " #" + str(len_tournament + 1) + print(f"- Saving match game #{self.game_id} of tournament: {name_tournament}") await sync_to_async(handle_game_data)(self.game_state['player1_name'], self.game_state['player2_name'], self.game_state['player1_score'], self.game_state['player2_score'], - self.bt1, self.bt2, duration, True, self.tournament.name + " #" + str(len_tournament + 1)) + self.bt1, self.bt2, duration, True, name_tournament) else: await sync_to_async(handle_game_data)(self.game_state['player1_name'], self.game_state['player2_name'], self.game_state['player1_score'], self.game_state['player2_score'],