repositionnement du bot

This commit is contained in:
2026-06-27 14:14:47 +02:00
parent a404dab474
commit 75b16dd16f
+28 -10
View File
@@ -21,7 +21,7 @@ class Player(Entity):
image:pygame.Surface = pygame.Surface(self.size)
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)
@@ -55,7 +55,28 @@ class Player(Entity):
self.pos.x = temps_pos[0]
self.pos.y = temps_pos[1]
def determinate_endx(self, ball:Ball, dist_boty:float, coef_dir:float):
"""Determine ou se trouvera la balle en x quand elle sera au niveau du bot quand la balle monte vers le bot"""
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
collisiony: float = ball.pos.y + (coef_dir * (ball.pos.x - (ball.size / 2))) # Calculer a quelle hauteur la balle va collisionner avec le mur
dist_boty = (self.pos.y - self.size[1]) - (collisiony - (ball.size / 2))
self.end_ballx = ball.pos.x + (dist_boty / -coef_dir) # déterminer ou la ball devrais arriver
elif (self.end_ballx > self.screen.get_width() + (ball.size / 2)): # Si la balle devrait collisionner avec le mur de droite
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
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
@@ -66,19 +87,16 @@ class Player(Entity):
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
if (self.end_ballx < 0): # Si la balle devrait collisionner avec le mur de gauche
collisiony: float = ball.pos.y + (coef_dir * (ball.pos.x - (ball.size / 2))) # Calculer a quelle hauteur la balle va collisionner avec le mur
dist_boty = (self.pos.y - self.size[1]) - (collisiony - (ball.size / 2))
self.end_ballx = ball.pos.x + (dist_boty / -coef_dir) # déterminer ou la ball devrais arriver
elif (self.end_ballx > self.screen.get_width() + (ball.size / 2)): # Si la balle devrait collisionner avec le mur de droite
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.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
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)