bot now hit ball to send it in a random direction and fixed walls when ball is going straight
This commit is contained in:
@ -6,7 +6,7 @@
|
|||||||
# By: tomoron <tomoron@student.42.fr> +#+ +:+ +#+ #
|
# By: tomoron <tomoron@student.42.fr> +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2024/10/06 03:24:10 by tomoron #+# #+# #
|
# Created: 2024/10/06 03:24:10 by tomoron #+# #+# #
|
||||||
# Updated: 2024/10/09 09:09:54 by tomoron ### ########.fr #
|
# Updated: 2024/10/10 01:25:42 by tomoron ### ########.fr #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
@ -20,14 +20,15 @@ class Ball:
|
|||||||
self.obstacles = []
|
self.obstacles = []
|
||||||
|
|
||||||
def setStartVel(self, inv):
|
def setStartVel(self, inv):
|
||||||
self.speed = GameSettings.startSpeed
|
# self.speed = GameSettings.startSpeed
|
||||||
self.vel[0] = self.speed * (random.randint(-50, 50) / 100)
|
# self.vel[0] = self.speed * (random.randint(-50, 50) / 100)
|
||||||
self.vel[1] = self.speed - abs(self.vel[0])
|
# self.vel[1] = self.speed - abs(self.vel[0])
|
||||||
if(inv == 2):
|
# if(inv == 2):
|
||||||
self.vel[1] = -self.vel[1]
|
# self.vel[1] = -self.vel[1]
|
||||||
|
self.vel = [0, -3]
|
||||||
|
|
||||||
def default(self):
|
def default(self):
|
||||||
self.pos = [0, 0]
|
self.pos = [1, 5]
|
||||||
self.up = False
|
self.up = False
|
||||||
self.vel = [0, 0]
|
self.vel = [0, 0]
|
||||||
self.speed = GameSettings.startSpeed
|
self.speed = GameSettings.startSpeed
|
||||||
@ -69,7 +70,7 @@ class Ball:
|
|||||||
return(None)
|
return(None)
|
||||||
|
|
||||||
wallSide = (GameSettings.wallWidth / 2) + GameSettings.ballRadius
|
wallSide = (GameSettings.wallWidth / 2) + GameSettings.ballRadius
|
||||||
if(pos1[1] < 0):
|
if(self.vel[1] > 0):
|
||||||
wallSide *= -1
|
wallSide *= -1
|
||||||
hitPos = (wallSide - offset) / slope
|
hitPos = (wallSide - offset) / slope
|
||||||
relPos = wpos - hitPos
|
relPos = wpos - hitPos
|
||||||
@ -118,7 +119,7 @@ class Ball:
|
|||||||
|
|
||||||
def wallColisionDistanceY(self, wall):
|
def wallColisionDistanceY(self, wall):
|
||||||
wallSide = (GameSettings.wallWidth / 2) + GameSettings.ballRadius
|
wallSide = (GameSettings.wallWidth / 2) + GameSettings.ballRadius
|
||||||
if(self.pos[1] < 0):
|
if(self.vel[1] > 0):
|
||||||
wallSide *= -1
|
wallSide *= -1
|
||||||
relPos = wall["pos"]["x"] - self.pos[0]
|
relPos = wall["pos"]["x"] - self.pos[0]
|
||||||
if(abs(relPos) < (GameSettings.wallLength / 2) + GameSettings.ballRadius):
|
if(abs(relPos) < (GameSettings.wallLength / 2) + GameSettings.ballRadius):
|
||||||
@ -131,7 +132,6 @@ class Ball:
|
|||||||
return(jumper["pos"]["z"])
|
return(jumper["pos"]["z"])
|
||||||
return(None)
|
return(None)
|
||||||
|
|
||||||
|
|
||||||
def colisionTimeY(self, checkObstacles):
|
def colisionTimeY(self, checkObstacles):
|
||||||
wallsTime = self.getTimeUntilWallColision("back","front", self.pos[1], self.vel[1])
|
wallsTime = self.getTimeUntilWallColision("back","front", self.pos[1], self.vel[1])
|
||||||
if(not checkObstacles):
|
if(not checkObstacles):
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# By: tomoron <tomoron@student.42.fr> +#+ +:+ +#+ #
|
# By: tomoron <tomoron@student.42.fr> +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2024/10/05 03:54:20 by tomoron #+# #+# #
|
# Created: 2024/10/05 03:54:20 by tomoron #+# #+# #
|
||||||
# Updated: 2024/10/09 09:05:42 by tomoron ### ########.fr #
|
# Updated: 2024/10/10 02:24:08 by tomoron ### ########.fr #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
@ -14,6 +14,7 @@ from .Ball import Ball
|
|||||||
from .Player import Player
|
from .Player import Player
|
||||||
from .DummySocket import DummySocket
|
from .DummySocket import DummySocket
|
||||||
from .GameSettings import GameSettings
|
from .GameSettings import GameSettings
|
||||||
|
import random
|
||||||
import asyncio
|
import asyncio
|
||||||
import time
|
import time
|
||||||
|
|
||||||
@ -23,6 +24,7 @@ class Bot(Player):
|
|||||||
self.game = game
|
self.game = game
|
||||||
self.ready = True
|
self.ready = True
|
||||||
self.pos = {"pos":0, "up": False}
|
self.pos = {"pos":0, "up": False}
|
||||||
|
self.lastCalculated = {"pos":0, "up":False}
|
||||||
self.objective = {"pos":0, "up": False}
|
self.objective = {"pos":0, "up": False}
|
||||||
self.skin = 0
|
self.skin = 0
|
||||||
asyncio.create_task(self.updateLoop())
|
asyncio.create_task(self.updateLoop())
|
||||||
@ -38,6 +40,18 @@ class Bot(Player):
|
|||||||
res.speed = self.game.ball.speed
|
res.speed = self.game.ball.speed
|
||||||
return(res)
|
return(res)
|
||||||
|
|
||||||
|
def genRandomBallDirection(self, pos, up, center):
|
||||||
|
if(self.lastCalculated["pos"] == pos and self.lastCalculated["up"] == up):
|
||||||
|
return(self.objective)
|
||||||
|
self.lastCalculated = {"pos":pos, "up" : up}
|
||||||
|
if(not center):
|
||||||
|
offset = random.randint(-100, 100) / 100
|
||||||
|
if(offset == 0):
|
||||||
|
offset = 0.1
|
||||||
|
pos += offset * (GameSettings.playerLength / 2)
|
||||||
|
return({"pos":pos, "up":up})
|
||||||
|
|
||||||
|
|
||||||
async def getExpectedPos(self):
|
async def getExpectedPos(self):
|
||||||
tempBall = self.createTempBall()
|
tempBall = self.createTempBall()
|
||||||
hit = 0
|
hit = 0
|
||||||
@ -47,8 +61,9 @@ class Bot(Player):
|
|||||||
hit = await tempBall.update(sleepTime, self, self.game.p2, True)
|
hit = await tempBall.update(sleepTime, self, self.game.p2, True)
|
||||||
i += 1
|
i += 1
|
||||||
if(i == 50):
|
if(i == 50):
|
||||||
|
self.objective = self.genRandomBallDirection(0, 0, True)
|
||||||
return
|
return
|
||||||
self.objective = {"pos":tempBall.pos[0], "up":tempBall.up}
|
self.objective = self.genRandomBallDirection(tempBall.pos[0], tempBall.up, False)
|
||||||
|
|
||||||
async def updateLoop(self):
|
async def updateLoop(self):
|
||||||
while not self.game.end:
|
while not self.game.end:
|
||||||
|
Reference in New Issue
Block a user