diff --git a/src/player.py b/src/player.py index 6f7f138..6aaceba 100644 --- a/src/player.py +++ b/src/player.py @@ -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)