def possede( self ): #retourne true si la balle est plus proche d'un membre de notre equipe ou false sinon i = 0 j = 1 equipe = 9 dmax = math.sqrt((GAME_WIDTH)**2 + (GAME_HEIGHT)**2) while j < 3: while i < 4: if math.sqrt((self.state.player_state(j, i).position.x - self.ball.x)**2 + (self.state.player_state(j, i).position.y - self.ball.y)**2) < dmax: dmax = math.sqrt( (self.state.player_state(j, i).position.x - self.ball.x)**2 + (self.state.player_state(j, i).position.y - self.ball.y)**2) equipe = j i = i + 1 j = j + 1 i = 0 if equipe == self.id_team: return True return False
def fprocheatk( self): #donne le vecteur position de l'attaquant le plus proche i = 2 # a partir des 2 attaquant n = 4 j = 0 while i < n: ve = Vector2D(GAME_WIDTH, GAME_HEIGHT) while j < n: if (math.sqrt( (self.state.player_state(self.id_team % 2 + 1, j).position.x - self.state.player_state(self.id_team, i).position.x)**2 + (self.state.player_state(self.id_team % 2 + 1, j).position.y - self.state.player_state(self.id_team, i).position.y)**2) < math.sqrt(ve.x**2 + ve.y**2)): ve = Vector2D( self.state.player_state(self.id_team % 2 + 1, j).position.x - self.state.player_state(self.id_team, i).position.x, self.state.player_state(self.id_team % 2 + 1, j).position.y - self.state.player_state(self.id_team, i).position.y) j = j + 1 j = 0 if i == 2: tmp = Vector2D( self.state.player_state(self.id_team, i).position.x - self.player.x, self.state.player_state(self.id_team, i).position.y - self.player.y) distfe = math.sqrt(ve.x**2 + ve.y**2) else: tmp2 = Vector2D( self.state.player_state(self.id_team, i).position.x - self.player.x, self.state.player_state(self.id_team, i).position.y - self.player.y) distfe2 = math.sqrt(ve.x**2 + ve.y**2) if tmp < tmp2: if distfe > 15: return tmp else: return tmp2 else: if distfe2 > 15: return tmp2 else: return tmp
def eproche(self): #distance entre nous et l'adversaire le plus proche i = 0 n = len(self.state.players) / 2 v = Vector2D(GAME_WIDTH, GAME_HEIGHT) while i < n: if (math.sqrt( (self.state.player_state(self.id_team % 2 + 1, i).position.x - self.player.x)**2 + (self.state.player_state(self.id_team % 2 + 1, i).position.y - self.player.y)**2) < math.sqrt(v.x**2 + v.y**2)): v = Vector2D( self.state.player_state(self.id_team % 2 + 1, i).position.x - self.player.x, self.state.player_state(self.id_team % 2 + 1, i).position.y - self.player.y) i = i + 1 return math.sqrt(v.x**2 + v.y**2)
def eproche(self): i = 0 n = len(self.state.players) / 2 v = Vector2D(GAME_WIDTH, GAME_HEIGHT) while i < n: if (math.sqrt( (self.state.player_state(self.id_team % 2 + 1, i).position.x - self.player.x)**2 + (self.state.player_state(self.id_team % 2 + 1, i).position.y - self.player.y)**2) < math.sqrt(v.x**2 + v.y**2)): v = Vector2D( self.state.player_state(self.id_team % 2 + 1, i).position.x - self.player.x, self.state.player_state(self.id_team % 2 + 1, i).position.y - self.player.y) i = i + 1 return v.x**2 + v.y**2
def fbnorme(self): #distance la plus courte entre la balle et un alliee i = 0 n = len(self.state.players) / 2 v = Vector2D(GAME_WIDTH, GAME_HEIGHT) while i < n: if (math.sqrt( (self.state.player_state(self.id_team, i).position.x - self.ball.x)**2 + (self.state.player_state(self.id_team, i).position.y - self.ball.y)**2) < math.sqrt(v.x**2 + v.y**2)): v = Vector2D( self.state.player_state(self.id_team, i).position.x - self.ball.x, self.state.player_state(self.id_team, i).position.y - self.ball.y) i = i + 1 return math.sqrt(v.x**2 + v.y**2)
def enorme(self): #distance balle et adversaire i = 0 n = len(self.state.players) / 2 v = Vector2D(GAME_WIDTH, GAME_HEIGHT) while i < n: if (math.sqrt( (self.state.player_state(self.id_team % 2 + 1, i).position.x - self.ball.x)**2 + (self.state.player_state(self.id_team % 2 + 1, i).position.y - self.ball.y)**2) < math.sqrt(v.x**2 + v.y**2)): v = Vector2D( self.state.player_state(self.id_team % 2 + 1, i).position.x - self.ball.x, self.state.player_state(self.id_team % 2 + 1, i).position.y - self.ball.y) i = i + 1 return math.sqrt(v.x**2 + v.y**2)
def fproche(self): #donne le vecteur position de l'allier le plus proche i = 0 n = len(self.state.players) / 2 dmax = math.sqrt((GAME_WIDTH)**2 + (GAME_HEIGHT)**2) if self.id_team == 1: while i < n: if dmax > math.sqrt( (self.state.player_state(self.id_team, i).position.x - self.player.x)**2 + (self.state.player_state(self.id_team, i).position.y - self.player.y)**2 ) and i != self.id_player and self.state.player_state( self.id_team, i).position.x > self.player.x: v = Vector2D( self.state.player_state(self.id_team, i).position.x - self.player.x, self.state.player_state(self.id_team, i).position.y - self.player.y) dmax = math.sqrt( (self.state.player_state(self.id_team, i).position.x - self.player.x)**2 + (self.state.player_state(self.id_team, i).position.y - self.player.y)**2) i = i + 1 else: while i < n: if dmax > math.sqrt( (self.state.player_state(self.id_team, i).position.x - self.player.x)**2 + (self.state.player_state(self.id_team, i).position.y - self.player.y)**2 ) and i != self.id_player and self.state.player_state( self.id_team, i).position.x < self.player.x: v = Vector2D( self.state.player_state(self.id_team, i).position.x - self.player.x, self.state.player_state(self.id_team, i).position.y - self.player.y) dmax = math.sqrt( (self.state.player_state(self.id_team, i).position.x - self.player.x)**2 + (self.state.player_state(self.id_team, i).position.y - self.player.y)**2) i = i + 1 return v
def defadv(self): #retourne la position du defenseur adverse i = 0 n = len(self.state.players) / 2 v = Vector2D(GAME_WIDTH, GAME_HEIGHT) while i < n: if math.sqrt( (self.state.player_state(self.id_team % 2 + 1, i).position.x - ((self.id_team % 2 + 1) % 2) * GAME_WIDTH)**2 + (self.state.player_state(self.id_team % 2 + 1, i).position.y - GAME_HEIGHT / 2)**2) < math.sqrt(v.x**2 + v.y**2): v = Vector2D( self.state.player_state(self.id_team % 2 + 1, i).position.x - ((self.id_team % 2 + 1) % 2) * GAME_WIDTH, self.state.player_state(self.id_team % 2 + 1, i).position.y - GAME_HEIGHT / 2) res = self.state.player_state(self.id_team % 2 + 1, i).position i = i + 1 return res
def pos_eproche(self): # retourne la position de l'ennemie le plus proche i = 0 n = len(self.state.players) / 2 v = Vector2D(GAME_WIDTH, GAME_HEIGHT) while i < n: if (math.sqrt( (self.state.player_state(self.id_team % 2 + 1, i).position.x - self.player.x)**2 + (self.state.player_state(self.id_team % 2 + 1, i).position.y - self.player.y)**2) < math.sqrt(v.x**2 + v.y**2)): v = Vector2D( self.state.player_state(self.id_team % 2 + 1, i).position.x - self.player.x, self.state.player_state(self.id_team % 2 + 1, i).position.y - self.player.y) j = self.state.player_state(self.id_team % 2 + 1, i).position i = i + 1 return j
def abnorme(self): # retourne true si on est le plus proche de la balle i = 0 v = Vector2D(GAME_WIDTH, GAME_HEIGHT) while i < 4: if (math.sqrt( (self.state.player_state(self.id_team, i).position.x - self.ball.x)**2 + (self.state.player_state(self.id_team, i).position.y - self.ball.y)**2) < math.sqrt(v.x**2 + v.y**2)): v = Vector2D( self.state.player_state(self.id_team, i).position.x - self.ball.x, self.state.player_state(self.id_team, i).position.y - self.ball.y) j = i i = i + 1 if j == self.id_player: return True return False
def fnorme(self): #distance entre le joueur et l'allier le plus proche i = 0 n = len(self.state.players) / 2 v = Vector2D(GAME_WIDTH, GAME_HEIGHT) while i < n: if 0 < (math.sqrt( (self.state.player_state(self.id_team, i).position.x - self.ball.x)**2 + (self.state.player_state(self.id_team, i).position.y - self.ball.y)**2) and (math.sqrt( (self.state.player_state(self.id_team, i).position.x - self.player.x)**2 + (self.state.player_state(self.id_team, i).position.y - self.player.y)**2) < math.sqrt(v.x**2 + v.y**2))): v = Vector2D( self.state.player_state(self.id_team, i).position.x - self.ball.x, self.state.player_state(self.id_team, i).position.y - self.ball.y) i = i + 1 return math.sqrt(v.x**2 + v.y**2)
def cnorme( self ): #distance entre l'attaquant adverse le plus proche et nos cages i = 0 n = len(self.state.players) / 2 v = Vector2D(GAME_WIDTH, GAME_HEIGHT) while i < n: if 0 < (math.sqrt( (self.state.player_state(self.id_team % 2 + 1, i).position.x - (self.id_team % 2 + 1) * GAME_WIDTH)**2 + (self.state.player_state(self.id_team % 2 + 1, i).position.y - GAME_HEIGHT / 2)**2 )) and (math.sqrt( (self.state.player_state(self.id_team % 2 + 1, i).position.x - (self.id_team % 2 + 1) * GAME_WIDTH)**2 + (self.state.player_state(self.id_team % 2 + 1, i).position.y - GAME_HEIGHT / 2)**2)) < math.sqrt(v.x**2 + v.y**2): v = Vector2D( self.state.player_state(self.id_team % 2 + 1, i).position.x - (self.id_team % 2 + 1) * GAME_WIDTH, self.state.player_state(self.id_team % 2 + 1, i).position.y - GAME_HEIGHT / 2) i = i + 1 return math.sqrt(v.x**2 + v.y**2)
def eproche2v2( self): #distance entre nous et l'adversaire le plus proche devant i = 0 n = len(self.state.players) / 2 v = Vector2D(GAME_WIDTH, GAME_HEIGHT) while i < n: if (math.sqrt( (self.state.player_state(self.id_team % 2 + 1, i).position.x - self.player.x)**2 + (self.state.player_state(self.id_team % 2 + 1, i).position.y - self.player.y)**2) < math.sqrt(v.x**2 + v.y**2) and ((self.state.player_state(self.id_team % 2 + 1, i).position.x > self.player.x and self.id_team == 1) or (self.state.player_state(self.id_team % 2 + 1, i).position.x < self.player.x and self.id_team == 2))): v = Vector2D( self.state.player_state(self.id_team % 2 + 1, i).position.x - self.player.x, self.state.player_state(self.id_team % 2 + 1, i).position.y - self.player.y) i = i + 1 if math.sqrt(v.x**2 + v.y**2) <= 15: return True return False
def norme(self): return math.sqrt((self.ball.x - self.player.x)**2 + (self.ball.y - self.player.y)**2)
def gnorme(self): #distance joueur et goal adverse return math.sqrt(((self.id_team % 2) * GAME_WIDTH - self.player.x)**2 + (45 - self.player.y)**2)
def norme(self): #distance entre le joueur et la balle return math.sqrt((self.ball.x - self.player.x)**2 + (self.ball.y - self.player.y)**2)
def defadv4( self ): #retourne la position du defenseur adverse dans le cas d'un 4V4 v = Vector2D(GAME_WIDTH, GAME_HEIGHT) s = (self.id_team % 2 + 1) - 1 j0 = math.sqrt( (self.state.player_state(self.id_team % 2 + 1, 0).position.x - s * GAME_WIDTH)**2 + (self.state.player_state(self.id_team % +1, 0).position.y - GAME_HEIGHT / 2)**2) j1 = math.sqrt( (self.state.player_state(self.id_team % 2 + 1, 1).position.x - s * GAME_WIDTH)**2 + (self.state.player_state(self.id_team % +1, 1).position.y - GAME_HEIGHT / 2)**2) j2 = math.sqrt( (self.state.player_state(self.id_team % 2 + 1, 2).position.x - s * GAME_WIDTH)**2 + (self.state.player_state(self.id_team % +1, 2).position.y - GAME_HEIGHT / 2)**2) j3 = math.sqrt( (self.state.player_state(self.id_team % 2 + 1, 3).position.x - s * GAME_WIDTH)**2 + (self.state.player_state(self.id_team % +1, 3).position.y - GAME_HEIGHT / 2)**2) if j0 < j1 and j0 < j2 and j0 < j3: if j1 < j2 and j1 < j3: return self.state.player_state(self.id_team % 2 + 1, 1).position elif j2 < j1 and j2 < j3: return self.state.player_state(self.id_team % 2 + 1, 2).position else: return self.state.player_state(self.id_team % 2 + 1, 3).position elif j2 < j1 and j2 < j0 and j2 < j3: if j1 < j0 and j1 < j3: return self.state.player_state(self.id_team % 2 + 1, 1).position elif j0 < j1 and j0 < j3: return self.state.player_state(self.id_team % 2 + 1, 0).position else: return self.state.player_state(self.id_team % 2 + 1, 3).position elif j1 < j0 and j1 < j2 and j1 < j3: if j0 < j2 and j0 < j3: return self.state.player_state(self.id_team % 2 + 1, 0).position elif j2 < j0 and j2 < j3: return self.state.player_state(self.id_team % 2 + 1, 2).position else: return self.state.player_state(self.id_team % 2 + 1, 3).position else: if j0 < j2 and j0 < j1: return self.state.player_state(self.id_team % 2 + 1, 0).position elif j2 < j0 and j2 < j1: return self.state.player_state(self.id_team % 2 + 1, 2).position else: return self.state.player_state(self.id_team % 2 + 1, 1).position
def distgb(self): #retourne la distance entre la balle et notre goal return math.sqrt((self.state.player_state(self.id_team, 3).position.x - self.ball.x)**2 + (self.state.player_state(self.id_team, 3).position.y - self.ball.y)**2)