mirror of
https://github.com/AudebertAdrien/ft_transcendence.git
synced 2026-11-09 18:17:07 +01:00
my modif
This commit is contained in:
@@ -16,6 +16,8 @@ class GameConsumer(AsyncWebsocketConsumer):
|
||||
data = json.loads(text_data)
|
||||
if data['type'] == 'authenticate':
|
||||
await self.authenticate(data['token'])
|
||||
elif data['type'] == 'authenticate2':
|
||||
await self.authenticate2(data['token_1'], data['token_2'])
|
||||
elif data['type'] == 'key_press':
|
||||
if self.game:
|
||||
await self.game.handle_key_press(self, data['key'])
|
||||
@@ -45,6 +47,33 @@ class GameConsumer(AsyncWebsocketConsumer):
|
||||
await self.send(text_data=json.dumps({'type': 'waiting_room'}))
|
||||
await match_maker.add_player(self)
|
||||
|
||||
async def authenticate2(self, token, token2):
|
||||
user = await self.get_user_from_token(token)
|
||||
if user:
|
||||
self.user = user
|
||||
await self.send(text_data=json.dumps({'type': 'authenticated'}))
|
||||
print(f"User {self.user} authenticated")
|
||||
user2 = await self.get_user_from_token2(token2)
|
||||
if user2:
|
||||
self.user2 = user2
|
||||
await self.send(text_data=json.dumps({'type': 'authenticated'}))
|
||||
print(f"User {self.user2} authenticated")
|
||||
await match_maker.create_game(self, None, True)
|
||||
else:
|
||||
await self.send(text_data=json.dumps({'type': 'error', 'message': 'Authentication failed'}))
|
||||
print("Authentication failed")
|
||||
else:
|
||||
await self.send(text_data=json.dumps({'type': 'error', 'message': 'Authentication failed'}))
|
||||
print("Authentication failed")
|
||||
|
||||
@database_sync_to_async
|
||||
def get_user_from_token2(self, token):
|
||||
try:
|
||||
user2 = User.objects.filter(auth_token=token).first()
|
||||
return user2
|
||||
except User.DoesNotExist:
|
||||
return None
|
||||
|
||||
async def disconnect(self, close_code):
|
||||
if self.game:
|
||||
await self.game.end_game(disconnected_player=self)
|
||||
|
||||
@@ -6,23 +6,36 @@ import random
|
||||
from datetime import datetime
|
||||
from .utils import endfortheouche
|
||||
|
||||
|
||||
class Game:
|
||||
def __init__(self, game_id, player1, player2):
|
||||
def __init__(self, game_id, player1, player2, localgame):
|
||||
self.game_id = game_id
|
||||
self.player1 = player1
|
||||
self.player2 = player2
|
||||
self.botgame = player2 is None
|
||||
self.game_state = {
|
||||
'player1_name': player1.user.username,
|
||||
'player2_name': player2.user.username if player2 else 'BOT',
|
||||
'player1_position': 150,
|
||||
'player2_position': 150,
|
||||
'ball_position': {'x': 390, 'y': 190},
|
||||
'ball_velocity': {'x': random.choice([-5, 5]), 'y': random.choice([-5, 5])},
|
||||
'player1_score': 0,
|
||||
'player2_score': 0
|
||||
}
|
||||
self.localgame = localgame
|
||||
if self.localgame:
|
||||
self.botgame = False
|
||||
self.game_state = {
|
||||
'player1_name': player1.user.username,
|
||||
'player2_name': player1.user2.username,
|
||||
'player1_position': 150,
|
||||
'player2_position': 150,
|
||||
'ball_position': {'x': 390, 'y': 190},
|
||||
'ball_velocity': {'x': random.choice([-5, 5]), 'y': random.choice([-5, 5])},
|
||||
'player1_score': 0,
|
||||
'player2_score': 0
|
||||
}
|
||||
else:
|
||||
self.botgame = player2 is None
|
||||
self.game_state = {
|
||||
'player1_name': player1.user.username,
|
||||
'player2_name': player2.user.username if player2 else 'BOT',
|
||||
'player1_position': 150,
|
||||
'player2_position': 150,
|
||||
'ball_position': {'x': 390, 'y': 190},
|
||||
'ball_velocity': {'x': random.choice([-5, 5]), 'y': random.choice([-5, 5])},
|
||||
'player1_score': 0,
|
||||
'player2_score': 0
|
||||
}
|
||||
self.speed = 1
|
||||
self.game_loop_task = None
|
||||
self.ended = False
|
||||
@@ -31,21 +44,18 @@ class Game:
|
||||
self.bt1 = 0
|
||||
self.bt2 = 0
|
||||
self.start_time = None
|
||||
|
||||
|
||||
|
||||
async def start_game(self):
|
||||
print(f"- Game #{self.game_id} STARTED")
|
||||
self.game_loop_task = asyncio.create_task(self.game_loop())
|
||||
print(" begin MATCH at : ")
|
||||
self.start_time = datetime.now()
|
||||
print(f" begin MATCH : {self.start_time} ")
|
||||
print(f" Begin MATCH at: {self.start_time}")
|
||||
|
||||
async def game_loop(self):
|
||||
print(" In the game loop..")
|
||||
while not self.ended:
|
||||
if self.botgame:
|
||||
await self.update_bot_position()
|
||||
|
||||
await self.update_bot_position()
|
||||
await self.handle_pad_movement()
|
||||
await self.update_game_state()
|
||||
await self.send_game_state()
|
||||
@@ -60,7 +70,6 @@ class Game:
|
||||
elif self.game_state['player2_position'] + 80 > target_y:
|
||||
self.game_state['player2_position'] = max(self.game_state['player2_position'] - (5 * self.speed), 0)
|
||||
|
||||
|
||||
async def update_game_state(self):
|
||||
if self.ended:
|
||||
return
|
||||
@@ -84,18 +93,19 @@ class Game:
|
||||
self.bt2 += 1
|
||||
self.update_ball_velocity()
|
||||
# Check for scoring
|
||||
print(f"########### score user 1 {self.game_state['player1_score']} ###########")
|
||||
print(f"§§§§§§§§§§§ score user 2 {self.game_state['player2_score']} §§§§§§§§§§§")
|
||||
#print(f"########### score user 1 {self.game_state['player1_score']} ###########")
|
||||
#print(f"§§§§§§§§§§§ score user 2 {self.game_state['player2_score']} §§§§§§§§§§§")
|
||||
|
||||
if self.game_state['ball_position']['x'] <= 10:
|
||||
self.game_state['player2_score'] += 1
|
||||
if self.game_state['player2_score'] >= 2:
|
||||
if self.game_state['player2_score'] > 2:
|
||||
print("Here !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
|
||||
await self.end_game()
|
||||
self.reset_ball()
|
||||
elif self.game_state['ball_position']['x'] >= 790:
|
||||
self.game_state['player1_score'] += 1
|
||||
if self.game_state['player1_score'] >= 2:
|
||||
if self.game_state['player1_score'] > 2:
|
||||
print("Here !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
|
||||
await self.end_game()
|
||||
self.reset_ball()
|
||||
|
||||
@@ -128,30 +138,33 @@ class Game:
|
||||
})
|
||||
await self.player1.send(message)
|
||||
if not self.botgame:
|
||||
await self.player2.send(message)
|
||||
if not self.localgame:
|
||||
await self.player2.send(message)
|
||||
|
||||
async def handle_key_press(self, player, key):
|
||||
if self.ended:
|
||||
return
|
||||
if player == self.player1:
|
||||
print(f"Key press: {key}")
|
||||
if self.localgame:
|
||||
if key == 'arrowup':
|
||||
self.p2_mov = -1
|
||||
elif key == 'arrowdown':
|
||||
self.p2_mov = 1
|
||||
elif key == 'w':
|
||||
self.p1_mov = -1
|
||||
elif key == 's':
|
||||
self.p1_mov = 1
|
||||
elif player == self.player1:
|
||||
if key == 'arrowup':
|
||||
self.p1_mov = -1
|
||||
#self.game_state['player1_position'] = max(self.game_state['player1_position'] - 25, 0)
|
||||
elif key == 'arrowdown':
|
||||
self.p1_mov = 1
|
||||
#self.game_state['player1_position'] = min(self.game_state['player1_position'] + 25, 300)
|
||||
elif not self.botgame and player == self.player2:
|
||||
elif player == self.player2:
|
||||
if key == 'arrowup':
|
||||
self.p2_mov = -1
|
||||
#self.game_state['player2_position'] = max(self.game_state['player2_position'] - 25, 0)
|
||||
elif key == 'arrowdown':
|
||||
self.p2_mov = 1
|
||||
#self.game_state['player2_position'] = min(self.game_state['player2_position'] + 25, 300)
|
||||
|
||||
async def handle_pad_movement(self):
|
||||
#print(f"P1 mov: {self.p1_mov}")
|
||||
#print(f"P2 mov: {self.p2_mov}")
|
||||
if self.ended:
|
||||
return
|
||||
if self.p1_mov == -1:
|
||||
@@ -192,9 +205,9 @@ class Game:
|
||||
})
|
||||
await self.player1.send(end_message)
|
||||
if not self.botgame:
|
||||
await self.player2.send(end_message)
|
||||
if not self.localgame:
|
||||
await self.player2.send(end_message)
|
||||
print("save data")
|
||||
await endfortheouche(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)
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ class MatchMaker:
|
||||
player1 = self.waiting_players.pop(0)
|
||||
player2 = self.waiting_players.pop(0)
|
||||
print(f"*** MATCH FOUND: {player1.user.username} vs {player2.user.username}")
|
||||
await self.create_game(player1, player2)
|
||||
await self.create_game(player1, player2, False)
|
||||
else:
|
||||
await asyncio.sleep(1)
|
||||
self.timer += 1
|
||||
@@ -49,26 +49,30 @@ class MatchMaker:
|
||||
if not self.waiting_players:
|
||||
break
|
||||
|
||||
async def create_game(self, player1, player2):
|
||||
async def create_game(self, player1, player2, localgame):
|
||||
game_id = len(self.active_games) + 1
|
||||
print(f"- Creating game: #{game_id}")
|
||||
new_game = Game(game_id, player1, player2)
|
||||
if localgame:
|
||||
print(f"- Creating LOCAL game: #{game_id}")
|
||||
else:
|
||||
print(f"- Creating MATCH game: #{game_id}")
|
||||
new_game = Game(game_id, player1, player2, localgame)
|
||||
self.active_games[game_id] = new_game
|
||||
await player1.set_game(new_game)
|
||||
await player2.set_game(new_game)
|
||||
await self.notify_players(player1, player2, game_id)
|
||||
if not localgame:
|
||||
await player2.set_game(new_game)
|
||||
await self.notify_players(player1, player2, game_id, localgame)
|
||||
asyncio.create_task(new_game.start_game())
|
||||
|
||||
async def create_bot_game(self, player1):
|
||||
game_id = len(self.active_games) + 1
|
||||
print(f"- Creating BOT game: #{game_id}")
|
||||
new_game = Game(game_id, player1, None)
|
||||
new_game = Game(game_id, player1, None, False)
|
||||
self.active_games[game_id] = new_game
|
||||
await player1.set_game(new_game)
|
||||
await self.notify_players(player1, None, game_id)
|
||||
await self.notify_players(player1, None, game_id, False)
|
||||
asyncio.create_task(new_game.start_game())
|
||||
|
||||
async def notify_players(self, player1, player2, game_id):
|
||||
async def notify_players(self, player1, player2, game_id, localgame):
|
||||
if player2:
|
||||
await player1.send(json.dumps({
|
||||
'type': 'game_start',
|
||||
@@ -83,12 +87,20 @@ class MatchMaker:
|
||||
'player2': player2.user.username
|
||||
}))
|
||||
else:
|
||||
await player1.send(json.dumps({
|
||||
'type': 'game_start',
|
||||
'game_id': game_id,
|
||||
'player1': player1.user.username,
|
||||
'player2': 'BOT'
|
||||
}))
|
||||
if localgame:
|
||||
await player1.send(json.dumps({
|
||||
'type': 'game_start',
|
||||
'game_id': game_id,
|
||||
'player1': player1.user.username,
|
||||
'player2': player1.user2.username
|
||||
}))
|
||||
else:
|
||||
await player1.send(json.dumps({
|
||||
'type': 'game_start',
|
||||
'game_id': game_id,
|
||||
'player1': player1.user.username,
|
||||
'player2': 'BOT'
|
||||
}))
|
||||
|
||||
async def handle_key_press(self, player, key):
|
||||
for game in self.active_games.values():
|
||||
|
||||
@@ -18,6 +18,16 @@ from rest_framework import viewsets
|
||||
import json
|
||||
import uuid
|
||||
|
||||
@csrf_exempt
|
||||
def check_user_exists(request):
|
||||
if request.method == 'POST':
|
||||
data = json.loads(request.body)
|
||||
username = data.get('username')
|
||||
if User.objects.filter(username=username).exists():
|
||||
return JsonResponse({'exists': True})
|
||||
return JsonResponse({'exists': False})
|
||||
return JsonResponse({'error': 'Invalid request method'}, status=400)
|
||||
|
||||
@csrf_exempt
|
||||
def register_user(request):
|
||||
if request.method == 'POST':
|
||||
@@ -31,16 +41,6 @@ def register_user(request):
|
||||
return JsonResponse({'registered': False, 'error': 'User already exists'})
|
||||
return JsonResponse({'error': 'Invalid request method'}, status=400)
|
||||
|
||||
@csrf_exempt
|
||||
def check_user_exists(request):
|
||||
if request.method == 'POST':
|
||||
data = json.loads(request.body)
|
||||
username = data.get('username')
|
||||
if User.objects.filter(username=username).exists():
|
||||
return JsonResponse({'exists': True})
|
||||
return JsonResponse({'exists': False})
|
||||
return JsonResponse({'error': 'Invalid request method'}, status=400)
|
||||
|
||||
@csrf_exempt
|
||||
def authenticate_user(request):
|
||||
if request.method == 'POST':
|
||||
@@ -86,8 +86,8 @@ def tournoi_list(request):
|
||||
|
||||
from django.http import JsonResponse
|
||||
|
||||
def match_list_json(request):
|
||||
matches = Match.objects.all()
|
||||
async def match_list_json(request):
|
||||
matches = await Match.objects.all()
|
||||
data = {
|
||||
'matches': list(matches.values(
|
||||
'id', 'player1__name', 'player2__name', 'score_player1', 'score_player2',
|
||||
@@ -97,9 +97,9 @@ def match_list_json(request):
|
||||
}
|
||||
return JsonResponse(data)
|
||||
|
||||
def player_list_json(request):
|
||||
async def player_list_json(request):
|
||||
# Récupère tous les joueurs
|
||||
players = Player.objects.all()
|
||||
players = await Player.objects.all()
|
||||
|
||||
# Crée un dictionnaire avec les informations des joueurs
|
||||
data = {
|
||||
@@ -114,9 +114,9 @@ def player_list_json(request):
|
||||
# Renvoie les données en JSON
|
||||
return JsonResponse(data)
|
||||
|
||||
def tournoi_list_json(request):
|
||||
async def tournoi_list_json(request):
|
||||
# Récupère tous les joueurs
|
||||
tournois = Tournoi.objects.all()
|
||||
tournois = await Tournoi.objects.all()
|
||||
|
||||
# Crée un dictionnaire avec les informations des joueurs
|
||||
data = {
|
||||
|
||||
Reference in New Issue
Block a user