repositionnement du bot
This commit is contained in:
+28
-10
@@ -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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user