From f39a8bb8b794f4206ce1a1959c2c7a2b9efbc3d6 Mon Sep 17 00:00:00 2001 From: tomoron Date: Fri, 20 Sep 2024 02:46:53 +0200 Subject: [PATCH] add colision with player, server now detects when a player loses. ball direction is now relative to the place where it hit the player --- .../djangoserver/file/server/server/Game.py | 76 ++++++++++++------- 1 file changed, 47 insertions(+), 29 deletions(-) diff --git a/docker-compose/requirements/djangoserver/file/server/server/Game.py b/docker-compose/requirements/djangoserver/file/server/server/Game.py index 504df6f..f02c850 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/Game.py +++ b/docker-compose/requirements/djangoserver/file/server/server/Game.py @@ -6,7 +6,7 @@ # By: edbernar = Game.limits["right"]): - velX = -velX + newBallPos = (round(currentBallPos[0] + (delta * velX), 5), + round(currentBallPos[1] + (delta * velZ), 5)) if(newBallPos[1] <= Game.limits["back"] or newBallPos[1] >= Game.limits["front"]): - velZ = -velZ + playerDistance = self.getPlayerDistance(newBallPos) + print("player distance :", playerDistance) + if(playerDistance >= -1 and playerDistance <= 1): + print("colided") + velX = -((self.speed * 0.80) * playerDistance) + velZ = self.speed - abs(velX) + print("velocity : " , velX , ", ", velZ) + + if(newBallPos[1] > 0): + velZ = -velZ + else: + print("a player suffured from a major skill issue") + await asyncio.sleep(3) + self.prepareGame(True) + await asyncio.sleep(3) + self.prepareGame() + return; + elif(newBallPos[0] <= Game.limits["left"] or newBallPos[0] >= Game.limits["right"]): + velX = -velX self.ballVel = (velX, velZ) self.lastUpdate = now self.ballPos["pos"] = newBallPos self.sendNewBallInfo() - print("new ball pos : ", self.ballPos) - print("new ball velocity : ", self.ballVel) - + + def prepareGame(self, stop = False): + self.ballPos = {"pos":(0, 0), "up": False} + if(stop): + self.ballVel = (0, 0) + else: + self.ballVel = (self.speed/2, self.speed/2) + self.sendNewBallInfo() + self.lastUpdate = time.time() async def gameLoop(self): self.started = True self.sendPlayers({"action":2}) - self.ballPos = {"pos":(0, 0), "up": False} - self.ballVel = (Game.startSpeed, Game.startSpeed) - self.sendNewBallInfo() - self.lastUpdate = time.time() + await asyncio.sleep(3) + self.prepareGame() while(not self.end): - self.updateBall() + await self.updateBall() sleep_time = self.getSleepTime() await asyncio.sleep(sleep_time) print("game end")