repositionnement du bot
This commit is contained in:
+30
-12
@@ -21,7 +21,7 @@ class Player(Entity):
|
|||||||
image:pygame.Surface = pygame.Surface(self.size)
|
image:pygame.Surface = pygame.Surface(self.size)
|
||||||
image.fill(color_player)
|
image.fill(color_player)
|
||||||
|
|
||||||
origin: Tuple[int, int] = (round(screen_manager.get_screen().get_size()[0] / 2) - round(self.size[0] / 2), 105) if is_ai else (round(screen_manager.get_screen().get_size()[0] / 2) - round(self.size[0] / 2), 675)
|
origin: Tuple[int, int] = (round(screen_manager.get_screen().get_size()[0] / 2) - round(self.size[0] / 2), 45) if is_ai else (round(screen_manager.get_screen().get_size()[0] / 2) - round(self.size[0] / 2), 675)
|
||||||
|
|
||||||
super().__init__("Player", origin, image, screen_manager)
|
super().__init__("Player", origin, image, screen_manager)
|
||||||
|
|
||||||
@@ -55,17 +55,8 @@ class Player(Entity):
|
|||||||
self.pos.x = temps_pos[0]
|
self.pos.x = temps_pos[0]
|
||||||
self.pos.y = temps_pos[1]
|
self.pos.y = temps_pos[1]
|
||||||
|
|
||||||
def ia_move(self, deltatime:float, ball:Ball):
|
def determinate_endx(self, ball:Ball, dist_boty:float, coef_dir:float):
|
||||||
# IA en mode facile
|
"""Determine ou se trouvera la balle en x quand elle sera au niveau du bot quand la balle monte vers le bot"""
|
||||||
if (self.difficulty == 0):
|
|
||||||
if (ball.pos.x < self.pos.x + self.size[0] / 2): self.velocity.x -= self.speed * deltatime
|
|
||||||
elif (ball.pos.x > self.pos.x + self.size[0] / 2): self.velocity.x += self.speed * deltatime
|
|
||||||
|
|
||||||
# IA en mode normal && difficile
|
|
||||||
if (self.difficulty > 0):
|
|
||||||
if (ball.velocity.y < 0): # Si la balle va vers le bot (en gros, monte)
|
|
||||||
coef_dir: float = ball.velocity.y / ball.velocity.x # Calculer le coef directeur de la droite qui suit le vecteur mouvement de la balle
|
|
||||||
dist_boty: float = (self.pos.y - self.size[1]) - (ball.pos.y - (ball.size / 2)) # La distance en yqui séparre le bot et la balle
|
|
||||||
self.end_ballx = ball.pos.x + (dist_boty / coef_dir) # déterminer ou la ball devrais arriver
|
self.end_ballx = ball.pos.x + (dist_boty / coef_dir) # déterminer ou la ball devrais arriver
|
||||||
|
|
||||||
if (self.end_ballx < 0): # Si la balle devrait collisionner avec le mur de gauche
|
if (self.end_ballx < 0): # Si la balle devrait collisionner avec le mur de gauche
|
||||||
@@ -76,9 +67,36 @@ class Player(Entity):
|
|||||||
collisiony: float = ball.pos.y + (coef_dir * (self.screen.get_width() - (ball.pos.x - (ball.size / 2)))) # Calculer a quelle hauteur la balle va collisionner avec le mur
|
collisiony: float = ball.pos.y + (coef_dir * (self.screen.get_width() - (ball.pos.x - (ball.size / 2)))) # Calculer a quelle hauteur la balle va collisionner avec le mur
|
||||||
self.end_ballx = ball.pos.x + (dist_boty / -coef_dir) # déterminer ou la ball devrais arriver
|
self.end_ballx = ball.pos.x + (dist_boty / -coef_dir) # déterminer ou la ball devrais arriver
|
||||||
|
|
||||||
|
def ia_move(self, deltatime:float, ball:Ball):
|
||||||
|
"""
|
||||||
|
- mode facile :
|
||||||
|
le bot essaye juste de ce mettre ou se trouve la balle en temps reelle
|
||||||
|
- mode normale :
|
||||||
|
le bot anticipe ou se trouvera la balle quand elle sera a son niveau UNIQUEMENT quand elle vient vers lui
|
||||||
|
- mode difficile :
|
||||||
|
le bot anticipe ou se trouvera la balle quand elle sera a son niveau TOUT LE TEMPS
|
||||||
|
"""
|
||||||
|
|
||||||
|
# IA en mode facile
|
||||||
|
if (self.difficulty == 0):
|
||||||
|
if (ball.pos.x < self.pos.x + self.size[0] / 2): self.velocity.x -= self.speed * deltatime
|
||||||
|
elif (ball.pos.x > self.pos.x + self.size[0] / 2): self.velocity.x += self.speed * deltatime
|
||||||
|
|
||||||
|
# IA en mode normal && difficile
|
||||||
|
if (self.difficulty > 0):
|
||||||
|
if (ball.velocity.y < 0): # Si la balle va vers le bot (en gros, monte)
|
||||||
|
coef_dir: float = ball.velocity.y / ball.velocity.x # Calculer le coef directeur de la droite qui suit le vecteur mouvement de la balle
|
||||||
|
dist_boty: float = (self.pos.y - self.size[1]) - (ball.pos.y - (ball.size / 2)) # La distance en yqui séparre le bot et la balle
|
||||||
|
self.determinate_endx(ball=ball, dist_boty=dist_boty, coef_dir=coef_dir)
|
||||||
|
# else: self.end_ballx = round(self.screen.get_size()[0] / 2)
|
||||||
|
|
||||||
if (self.end_ballx < self.pos.x + self.size[0] / 2): self.velocity.x -= self.speed * deltatime
|
if (self.end_ballx < self.pos.x + self.size[0] / 2): self.velocity.x -= self.speed * deltatime
|
||||||
elif (self.end_ballx > self.pos.x + self.size[0] / 2): self.velocity.x += self.speed * deltatime
|
elif (self.end_ballx > self.pos.x + self.size[0] / 2): self.velocity.x += self.speed * deltatime
|
||||||
|
|
||||||
|
if (self.difficulty == 2): # Le mode difficile
|
||||||
|
if (ball.velocity.y > 0): # Quand la balle se dirige vers le joueur
|
||||||
|
pass
|
||||||
|
|
||||||
self.apply_move(deltatime)
|
self.apply_move(deltatime)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user