Esempio n. 1
0
    def changementDePoste(self):
        baller = None
        ball = False
        distance = []
        closer = None
        for joueur in self.joueurs[0].match.joueurs:
            if joueur.hasTheBall():
                baller = joueur
                ball = True
            balle = self.joueurs[0].match.balle
            d = joueur.distanceToXY(balle.position)
            joueur.distance_balle = d
            distance.append(d)

        closer = self.joueurs[0].match.joueurs[np.argmin(distance)]

        for joueur in self.joueurs:

            if joueur.poste[-1] == 'WAIT':
                if ball:
                    if baller == joueur:
                        joueur.defPoste('ATT')
                        joueur.teammate().defPoste('DEMARQUE')

                    elif baller.team != self.nom:
                        if (self.whoIsTheGoal() == joueur) & (
                                joueur.teammate().poste[-1] != 'GOAL'):
                            joueur.defPoste('GOAL')

                        else:
                            if ((self.side == 'L') &
                                (balle.x < 0)) | ((self.side == 'R') &
                                                  (balle.x > 0)):
                                joueur.defPoste('TACKLE')

                            else:
                                joueur.defPoste('DEF')
                else:
                    if closer.team != self.nom:
                        if (self.whoIsTheGoal() == joueur) & (
                                joueur.teammate().poste[-1] != 'GOAL'):
                            joueur.defPoste('GOAL')

                        elif (min(distance) /
                              joueur.distanceToXY(balle.position)) > 0.7:
                            joueur.defPoste('CHASER')

                    elif closer == joueur:
                        joueur.defPoste('CHASER')

            elif joueur.poste[-1] == 'ATT':
                if self.openGoal(joueur):
                    joueur.defPoste('SHOOTER')

                else:

                    if self.openGoal(joueur.teammate()):
                        joueur.defPoste('PASSEUR')
                        joueur.teammate().defPoste('RECEVEUR')

                    else:
                        # print('here')

                        field = joueur.create_game()
                        final_pos_joueur, score_joueur, fail = ia.play_game_3(
                            agent=self.ia, game=field)

                        # print(field)
                        # ia.Game(9,9,terrain=field).print()

                        field = joueur.teammate().create_game()
                        final_pos_mate, score_mate, fail = ia.play_game_3(
                            agent=self.ia, game=field)

                        if score_mate > score_joueur + 2:
                            if self.side == 'L':
                                joueur.teammate().goto = final_pos_mate
                            else:
                                joueur.teammate().goto = (-final_pos_mate[0],
                                                          final_pos_mate[1])
                            joueur.teammate().goto = final_pos_mate

                            joueur.teammate().status = joueur.teammate(
                            ).commande_position(joueur.teammate().goto[0],
                                                joueur.teammate().goto[1],
                                                self.but_adversaire[0],
                                                self.but_adversaire[1],
                                                spin=True)

                            joueur.teammate().defPoste('DEMARQUE')

                            joueur.defPoste('PASSEUR')

                        else:
                            if self.side == 'L':
                                joueur.goto = final_pos_joueur
                            else:
                                joueur.goto = (-final_pos_joueur[0],
                                               final_pos_joueur[1])
                            joueur.status = joueur.commande_position(
                                joueur.goto[0],
                                joueur.goto[1],
                                self.but_adversaire[0],
                                self.but_adversaire[1],
                                spin=True)
                            # print(joueur.goto)

                            joueur.defPoste('DRIBBLE')

            elif joueur.poste[-1] == 'SHOOTER':
                if joueur.status == 'DONE':
                    joueur.defPoste('WAIT')
                    if joueur.teammate().poste[-1] == 'DEMARQUE':
                        joueur.teammate().defPoste('WAIT')

            elif joueur.poste[-1] == 'DEMARQUE':
                if ball:
                    if baller in joueur.opponents():
                        joueur.defPoste('WAIT')
                elif (min(distance) /
                      joueur.distanceToXY(balle.position)) > 0.7:
                    joueur.defPoste('CHASER')

            elif joueur.poste[
                    -1] == 'DRIBBLE':  #commande vers la position calcuée
                if joueur.status == 'DONE':
                    joueur.defPoste('ATT')
                    joueur.teammate().defPoste('DEMARQUE')
                if not ball:  #perte de balle
                    joueur.defPoste('WAIT')
                    joueur.status = 'DONE'

                if self.openGoal(joueur):  #on tire si le but est ouvert
                    joueur.defPoste('SHOOTER')

            elif (joueur.poste[-1] == 'PASSEUR'):  #procédure avant la passe
                #Calcul si la passe est possible
                passe = True
                a, b = np.polyfit([joueur.x, joueur.teammate().x],
                                  [joueur.y, joueur.teammate().y], 1)
                for robot in joueur.opponents():
                    if robot.distance_droite(a, b) < r_robot:
                        passe = False
                        break

                if not passe:  #dans ce cas, il faut determiner ce qu'on doit faire
                    print('passe impossible')
                    joueur.status = 'DONE'
                    joueur.defPoste('DRIBBLE')
                    joueur.teammate().defPoste('DEMARQUE')

            elif (
                    joueur.poste[-1] == 'RECEVEUR'
            ):  #procédure pendant la passe pour ajuster la position du receveur
                # if ball:
                #     if baller==joueur:
                #             joueur.defPoste('ATT')
                #             joueur.teammate().defPoste('DEMARQUE')
                if joueur.distanceToXY(balle.position) < 200:
                    joueur.defPoste('CHASER')
                    joueur.teammate().defPoste('DEMARQUE')

            elif joueur.poste[-1] == 'CHASER':
                if ball:
                    if baller:
                        if (baller == joueur):
                            joueur.defPoste('ATT')
                            joueur.teammate().defPoste('DEMARQUE')

            elif joueur.poste[-1] == 'GOAL':
                if ball:
                    if baller == joueur:
                        joueur.defPoste('ATT')
                        joueur.teammate().defPoste('DEMARQUE')

                if joueur == closer:
                    joueur.defPoste('CHASER')

            elif joueur.poste[-1] == 'DEF':
                if ball:
                    if baller == joueur:
                        joueur.defPoste('ATT')
                        joueur.teammate().defPoste('DEMARQUE')

                    elif baller.team != self.nom:
                        if ((self.side == 'L') & (balle.x < 0)) | (
                            (self.side == 'R') &
                            (balle.x > 0)):  #Balle de notre coté
                            joueur.defPoste('TACKLE')
                else:
                    joueur.defPoste('CHASER')

            elif joueur.poste[-1] == 'TACKLE':
                if ball:

                    if baller == joueur:
                        joueur.defPoste('ATT')
                        joueur.teammate().defPoste('DEMARQUE')
                else:
                    joueur.defPoste('CHASER')

        #Affichage changement de status
        if self.joueurs[0].match.disp == 0:
            changement = False
            status = ''
            for joueur in self.joueurs:
                status += (f'{joueur} {joueur.poste} {joueur.status} \n')
                if joueur.poste[-2] != joueur.poste[-1]:
                    changement = True
            if changement:
                print('---------------')
                print(status)
Esempio n. 2
0
    def action(self):
        for joueur in self.joueurs:
            if joueur.poste[-1] == 'SHOOTER':
                joueur.status = joueur.Tir()

            elif joueur.poste[-1] == 'CHASER':
                joueur.status = joueur.commande_balle()

            elif joueur.poste[-1] == 'DEMARQUE':
                if (joueur.status
                        == 'DONE') & (not self.openGoal(joueur)
                                      ):  #calcul d'une nouvelle position
                    field = joueur.create_game()
                    final_pos_joueur, score_joueur, fail = ia.play_game_3(
                        agent=self.ia, game=field)
                    if self.side == 'L':  #l'ia est entrainée que sur un coté donc on doit flip la position
                        joueur.goto = final_pos_joueur
                    else:
                        joueur.goto = (-final_pos_joueur[0],
                                       final_pos_joueur[1])
                    joueur.status = joueur.commande_position(
                        joueur.goto[0], joueur.goto[1],
                        joueur.teammate().x,
                        joueur.teammate().y)

                else:  #la position est déjà calculée donc commande vers la position
                    joueur.status = joueur.commande_position(
                        joueur.goto[0], joueur.goto[1],
                        joueur.teammate().x,
                        joueur.teammate().y)

                #affichage de la position prédicte
                if joueur.match.disp == 2:
                    goto, = ax.plot(joueur.goto[0], joueur.goto[1], 'go')
                    ax.draw_artist(goto)

            elif joueur.poste[
                    -1] == 'DRIBBLE':  #commande vers la position calcuée
                if (joueur.status
                        == 'DONE') & (not self.openGoal(joueur)
                                      ):  #calcul d'une nouvelle position
                    field = joueur.create_game()
                    final_pos_joueur, score_joueur, fail = ia.play_game_3(
                        agent=self.ia, game=field)
                    if self.side == 'L':  #l'ia est entrainée que sur un coté donc on doit flip la position
                        joueur.goto = final_pos_joueur
                    else:
                        joueur.goto = (-final_pos_joueur[0],
                                       final_pos_joueur[1])

                joueur.status = joueur.commande_position(
                    joueur.goto[0],
                    joueur.goto[1],
                    self.but_adversaire[0],
                    self.but_adversaire[1],
                    spin=True)

                if joueur.match.disp == 2:  #affichage
                    goto, = ax.plot(joueur.goto[0], joueur.goto[1], 'go')
                    ax.draw_artist(goto)

                joueur.defPoste('DRIBBLE')

            elif (joueur.poste[-1] == 'PASSEUR'):  #procédure avant la passe
                joueur.status = joueur.Passe()

            elif (
                    joueur.poste[-1] == 'RECEVEUR'
            ):  #procédure pendant la passe pour ajuster la position du receveur
                joueur.reception()

            elif joueur.poste[-1] == 'GOAL':
                joueur.defPoste('GOAL')
                joueur.goal()

            elif joueur.poste[-1] == 'DEF':
                joueur.defPoste('DEF')
                if self.side == 'L':
                    x = -300

                else:
                    x = 300

                joueur.commande_position(x, joueur.match.balle.y / 2,
                                         joueur.match.balle.x,
                                         joueur.match.balle.y)

            elif joueur.poste[-1] == 'TACKLE':
                joueur.defPoste('TACKLE')
                joueur.commande_balle()

            elif joueur.poste[-1] == 'WAIT':
                joueur.commande_position(joueur.x, joueur.y, 0, 0)
Esempio n. 3
0
    def changementDePoste(self):
        baller=None
        ball=False
        distance=[]
        closer=None
        for joueur in self.joueurs[0].match.joueurs :
            if joueur.hasTheBall():
                baller=joueur
                ball=True
            balle=self.joueurs[0].match.balle
            d=joueur.distanceToXY(balle.position)
            joueur.distance_balle=d
            distance.append(d)
            
        closer=self.joueurs[0].match.joueurs[np.argmin(distance)]
        
        for joueur in self.joueurs:
            
                
            if joueur.poste[-1]=='WAIT':
                if ball:
                    if baller==joueur:
                        joueur.defPoste('ATT')
                        joueur.teammate().defPoste('DEMARQUE')
                    
                    
                        
                    elif baller.team!=self.nom:
                        if (self.whoIsTheGoal()==joueur)&(joueur.teammate().poste[-1]!='GOAL'):
                            joueur.defPoste('GOAL')
                            
                        else:    
                            if ((self.side=='L')&(balle.x<0))|((self.side=='R')&(balle.x>0)):
                                # joueur.defPoste('TACKLE')
                                # joueur.defPoste('DEF')
                                defense=random.random()
                                # print(defense)
                                if defense<0.5:
                                    joueur.defPoste('DEF')
                                elif defense < 0.75:
                                    joueur.defPoste('DEF1')
                                else:
                                    joueur.defPoste('DEF2')
                                
                            else :
                                defense=random.random()
                                # print(defense)
                                if defense<0:
                                    joueur.defPoste('DEF')
                                elif defense < 0.5:
                                    joueur.defPoste('DEF1')
                                else:
                                    joueur.defPoste('DEF2')
                                    
                else :
                    if closer.team!=self.nom:
                        if (self.whoIsTheGoal()==joueur)&(joueur.teammate().poste[-1]!='GOAL'):
                            joueur.defPoste('GOAL')
                    
                            
                        elif ((min(distance)/joueur.distanceToXY(balle.position))>0.7)&(joueur.teammate().poste[-1]!='RECEVEUR'):
                            joueur.defPoste('CHASER')
                            joueur.teammate().defPoste('GOAL')
                        
                        else :
                            joueur.defPoste('DEF')
                            joueur.teammate().defPoste('GOAL')
                            
                    # elif (closer==joueur)&(joueur.teammate().poste[-1]!='RECEVEUR'):
                    #     joueur.defPoste('CHASER')
                    
                    else :
                        joueur.defPoste('DEMARQUE')
                        
                
                    
                
            elif joueur.poste[-1]=='ATT':
                if self.openGoal(joueur):
                    joueur.defPoste('SHOOTER')
                                        
                    
                else :
                    
                    if (self.openGoal(joueur.teammate()))&(self.openPasse()):
                        alea=random.random()
                        if alea<0.650:
                            joueur.defPoste('PASSEUR')
                            joueur.teammate().defPoste('RECEVEUR')
                        else:
                            joueur.defPoste('DRIBBLE')
                    
                    elif not self.openGoal(joueur.teammate()) :
                        # print('here')
                        alea=random.random()
                        if alea<0.750:
                            field=joueur.create_game()
                            final_pos_joueur,score_joueur,fail,_=ia.play_game_3(agent=self.ia,game=field)
                            
                            # print(field)
                            # ia.Game(9,9,terrain=field).print()
                            
                            field=joueur.teammate().create_game()
                            final_pos_mate,score_mate,fail,_=ia.play_game_3(agent=self.ia,game=field)
                            
                            
                            if score_mate>score_joueur+2:
                                if self.side=='L':
                                    joueur.teammate().goto=complex(final_pos_mate[0],final_pos_mate[1])
                                else:
                                    joueur.teammate().goto=complex(-final_pos_mate[0],final_pos_mate[1])
                                # joueur.teammate().goto=final_pos_mate
                               
                                joueur.teammate().status=joueur.teammate().commande_position(joueur.teammate().goto.real, joueur.teammate().goto.imag, self.but_adversaire[0],self.but_adversaire[1],spin=True)
                                
                                joueur.teammate().defPoste('DEMARQUE')
                                
                                joueur.defPoste('PASSEUR')
                                
                                
                                
                                
                            else:
                                if self.side=='L':
                                    joueur.goto=complex(final_pos_mate[0],final_pos_mate[1])
                                else:
                                    joueur.goto=complex(-final_pos_joueur[0],final_pos_joueur[1])
                                joueur.status=joueur.commande_position(joueur.goto.real, joueur.goto.imag, self.but_adversaire[0],self.but_adversaire[1],spin=True)
                                # print(joueur.goto)
                                
                                joueur.defPoste('DRIBBLE')
                                
                        else:
                            joueur.defPoste('PASSEUR')
                            joueur.teammate().defPoste('RECEVEUR')
                            
                    elif not self.openPasse():
                        print('here')
                        joueur.defPoste('DRIBBLE')
            
            elif joueur.poste[-1]=='SHOOTER':
                if not ball:
                    joueur.defPoste('ATT')
                if joueur.status=='DONE':
                    joueur.defPoste('WAIT')
                    if joueur.teammate().poste[-1]=='DEMARQUE':
                        joueur.teammate().defPoste('WAIT')
                
            elif joueur.poste[-1]=='DEMARQUE':
                if ball:
                    if baller in joueur.opponents():
                        joueur.defPoste('WAIT')
                        
                    elif baller==joueur:
                        joueur.defPoste('ATT')
                    
                        
                elif (min(distance)/joueur.distanceToXY(balle.position))>0.7:
                            joueur.defPoste('CHASER')
                            
                elif (closer.team!=self.nom):
                    joueur.defPoste('WAIT')
                    

            
            elif joueur.poste[-1]=='DRIBBLE': #commande vers la position calcuée
                # if not ball:
                if joueur.distanceToXY(balle.position)>150:
                    joueur.defPoste('ATT')
            
                if joueur.status=='DONE':
                    joueur.defPoste('ATT')
                    joueur.teammate().defPoste('DEMARQUE')
                if not ball:#perte de balle
                    joueur.defPoste('WAIT')
                    joueur.status='DONE'
                    
                if self.openGoal(joueur):#on tire si le but est ouvert
                    joueur.defPoste('SHOOTER')
                    
            
            elif (joueur.poste[-1]=='PASSEUR') : #procédure avant la passe
                if not ball:
                    joueur.defPoste('WAIT')
                
                    
                
                if not self.openPasse(): #dans ce cas, il faut determiner ce qu'on doit faire
                    print('passe impossible')
                    joueur.status='DONE' 
                    joueur.defPoste('DRIBBLE')
                    joueur.teammate().defPoste('DEMARQUE')
                    
                
            
            elif (joueur.poste[-1]=='RECEVEUR'): #procédure pendant la passe pour ajuster la position du receveur
                if ball:    
                    if baller.team!=self.nom:
                            joueur.defPoste('WAIT')
                            
                if joueur.distanceToXY(balle.position)<200:
                    joueur.defPoste('CHASER')
                    joueur.teammate().defPoste('DEMARQUE')
            
            elif joueur.poste[-1]=='CHASER':
                if ball:        
                    
                    if(baller==joueur):
                        joueur.defPoste('ATT')
                        joueur.teammate().defPoste('DEMARQUE')
                    else :
                        joueur.defPoste('DEF')
                #on évite d'avoir les deux robots qui chassent la balle
                if joueur.teammate().poste[-1]=='CHASER':
            
                    if joueur.distanceToXY(balle.position)>joueur.teammate().distanceToXY(balle.position):
                        joueur.defPoste('DEMARQUE')
                    else:
                        joueur.teammate().defPoste('DEMARQUE')
                   
            elif joueur.poste[-1]=='GOAL':
                if ball:
                    if baller==joueur:
                        joueur.defPoste('ATT')
                        joueur.teammate().defPoste('DEMARQUE')
                #Si la balle est pas loin, on va la récupérer
                if (joueur==closer) and (not ball):
                    joueur.defPoste('CHASER')
                
            elif joueur.poste[-1]=='DEF':
                if ball:
                    if baller==joueur:
                        joueur.defPoste('ATT')
                        joueur.teammate().defPoste('DEMARQUE')
                  
                    elif baller.team!=self.nom:
                        if ((self.side=='L')&(balle.x<0))|((self.side=='R')&(balle.x>0)): #Balle de notre coté
                            # joueur.defPoste('TACKLE')
                            joueur.defPoste('DEF2')
                elif closer==joueur:
                    joueur.defPoste('CHASER')
                    
            elif joueur.poste[-1]=='DEF1':
                if ball:
                    if baller==joueur:
                        joueur.defPoste('ATT')
                        joueur.teammate().defPoste('DEMARQUE')
                  
                    elif baller.team!=self.nom:
                        joueur.defPoste('DEF1')
                elif closer==joueur:
                    joueur.defPoste('CHASER')
                    
            elif joueur.poste[-1]=='DEF2':
                if ball:
                    if baller==joueur:
                        joueur.defPoste('ATT')
                        joueur.teammate().defPoste('DEMARQUE')
                  
                    elif baller.team!=self.nom:
                        joueur.defPoste('DEF2')
                elif closer==joueur:
                    joueur.defPoste('CHASER')
                    
                
            elif joueur.poste[-1]=='TACKLE':
                if joueur.teammate().poste[-1]=='TACKLE':
                    if joueur.distanceToXY(balle.position)>joueur.teammate().distanceToXY(balle.position):
                        joueur.defPoste('GOAL')
                    else:
                        joueur.teammate().defPoste('GOAL')
                    
                if ball:
                
                    if baller==joueur:
                        joueur.defPoste('ATT')
                        joueur.teammate().defPoste('DEMARQUE')
                else:
                    joueur.defPoste('CHASER')
                
            
            
               
       
        
        #Affichage changement de status
        if self.joueurs[0].match.disp==0:
            changement=False
            status=''
            for joueur in self.joueurs:
                status+=(f'{joueur} {joueur.poste} {joueur.status} \n')
                if joueur.poste[-2]!=joueur.poste[-1]:
                    changement=True
            if changement:
                print('---------------')
                print(status)
Esempio n. 4
0
    def action(self):
        for joueur in self.joueurs:
            if joueur.poste[-1]=='SHOOTER':
                joueur.status=joueur.Tir()
                joueur.defPoste('SHOOTER')
                
            elif joueur.poste[-1]=='CHASER':
                joueur.status=joueur.commande_balle()
                joueur.defPoste('CHASER')
                
            elif joueur.poste[-1]=='DEMARQUE':
                if (joueur.status=='DONE')&(not self.openPasse()) or (abs(joueur.goto-joueur.teammate().goto)<500): #calcul d'une nouvelle position 
                    field=joueur.create_game()
                    final_pos_joueur,score_joueur,fail,_=dmq.play_game_3(agent=self.dmq,game=field)
                    if self.side=='L': #l'ia est entrainée que sur un coté donc on doit flip la position
                        joueur.goto=complex(final_pos_joueur[0],final_pos_joueur[1])
                    else: 
                        joueur.goto=complex(-final_pos_joueur[0],final_pos_joueur[1])
                    joueur.status=joueur.commande_position(joueur.goto.real, joueur.goto.imag, joueur.teammate().x,joueur.teammate().y,spin=True)
                 
                elif (joueur.status=='DONE')&(not self.openGoal(joueur)): #calcul d'une nouvelle position 
                    field=joueur.create_game()
                    final_pos_joueur,score_joueur,fail,_=ia.play_game_3(agent=self.ia,game=field)
                    if self.side=='L': #l'ia est entrainée que sur un coté donc on doit flip la position
                        joueur.goto=complex(final_pos_joueur[0],final_pos_joueur[1])
                    else: 
                        joueur.goto=complex(-final_pos_joueur[0],final_pos_joueur[1])
                    joueur.status=joueur.commande_position(joueur.goto.real, joueur.goto.imag, joueur.teammate().x,joueur.teammate().y,spin=True)
                    
                   
                else : #la position est déjà calculée donc commande vers la position
                    joueur.status=joueur.commande_position(joueur.goto.real, joueur.goto.imag, joueur.teammate().x,joueur.teammate().y,spin=True)
                
                
                joueur.defPoste('DEMARQUE')
                
            
            
            elif joueur.poste[-1]=='DRIBBLE': #commande vers la position calcuée
                 if (joueur.status=='DONE')&(not self.openGoal(joueur)): #calcul d'une nouvelle position 
                    field=joueur.create_game()
                    final_pos_joueur,score_joueur,fail,_=ia.play_game_3(agent=self.ia,game=field)
                    if self.side=='L': #l'ia est entrainée que sur un coté donc on doit flip la position
                        joueur.goto=complex(final_pos_joueur[0],final_pos_joueur[1])
                    else: 
                        joueur.goto=complex(-final_pos_joueur[0],final_pos_joueur[1])

                 joueur.status=joueur.commande_position(joueur.goto.real, joueur.goto.imag, self.but_adversaire[0],self.but_adversaire[1],spin=True)
                
                 
                
                
                 joueur.defPoste('DRIBBLE')
            
            elif (joueur.poste[-1]=='PASSEUR') : #procédure avant la passe
                joueur.status=joueur.Passe()
                joueur.defPoste('PASSEUR')
                
            
            elif (joueur.poste[-1]=='RECEVEUR') : #procédure pendant la passe pour ajuster la position du receveur
                joueur.defPoste('RECEVEUR')    
                joueur.reception()
                
                
                    
            elif joueur.poste[-1]=='GOAL':    
                joueur.goal()
                joueur.defPoste('GOAL')
                
            elif joueur.poste[-1]=='DEF':#placement dans notre camp, mode 'passif'
                if self.side=='L':
                    x=-300
                    
                else :
                    x=300
      
                joueur.commande_position(x, joueur.match.balle.y/2, joueur.match.balle.x,joueur.match.balle.y)     
                joueur.defPoste('DEF')   
                
            elif joueur.poste[-1]=='DEF1':#placement entre les 2 attaquants, orienté vers le plus proche de la balle
                adversaires=joueur.opponents()
                adv1=adversaires[0].positionc
                adv2=adversaires[1].positionc
                placement=(adv1+adv2)/2
                joueur.goto=placement
                distance1=adversaires[0].distanceToXY(joueur.match.balle.position)
                distance2=adversaires[1].distanceToXY(joueur.match.balle.position)
                if distance1<distance2:
                    orientation=adv1
                else:
                    orientation=adv2
                joueur.commande_position(joueur.goto.real,joueur.goto.imag,orientation.real,orientation.imag)
                joueur.defPoste('DEF1')
                
            elif joueur.poste[-1]=='DEF2':#placement entre le 2è attaquant et le but, orienté vers lui
                adversaires=joueur.opponents()
                distance1=adversaires[0].distanceToXY(joueur.match.balle.position)
                distance2=adversaires[1].distanceToXY(joueur.match.balle.position)
                if distance1<distance2:
                    adv=adversaires[1]
                else:
                    adv=adversaires[0]
                pos_adv=adv.positionc
                placement=(pos_adv+complex(self.but[0],self.but[1]))/2
                joueur.goto=placement
                joueur.commande_position(joueur.goto.real,joueur.goto.imag,pos_adv.real,pos_adv.imag)
                joueur.defPoste('DEF2')
            
            elif joueur.poste[-1]=='TACKLE':
                joueur.commande_balle()
                joueur.defPoste('TACKLE')
                
            elif joueur.poste[-1]=='WAIT':
                joueur.commande_position(joueur.x,joueur.y,0,0,spin=True)
                joueur.defPoste('WAIT')
Esempio n. 5
0
    def whereIstheBall(self):
        ball = False
        baller = None
        distance = []

        for joueur in self.joueurs[0].match.joueurs:
            if joueur.hasTheBall():
                ball = True
                baller = joueur
            balle = self.joueurs[0].match.balle
            d = joueur.distanceToXY(balle.position)
            joueur.distance_balle = d
            distance.append(d)
            # if joueur==Robot('B',0,match_test):
            #     print(d)
            # if joueur.poste[-1]=='RECEVEUR':
            #     self.passe=True

            # if (joueur.poste[-1]=='DRIBBLE')&(joueur.status=='DONE'):
            #     joueur.defPoste('RECEVEUR')

        # print(ball)
        if ball:
            if (baller.team == self.nom):

                if self.openGoal(baller):
                    baller.defPoste('SHOOTER')
                    baller.teammate().defPoste('AT2')  #ou defense

                elif (baller.poste[-1] == 'DRIBBLE') & (baller.status
                                                        == 'EN COURS'):
                    baller.defPoste('DRIBBLE')
                    baller.teammate().defPoste('DEMARQUE')

                # elif (baller.poste[-1]=='DRIBBLE')&(baller.status=='DONE'):
                #     baller.defPoste('BALLER')
                #     baller.teammate().defPoste('MATE' )

                else:

                    if self.openGoal(baller.teammate()):
                        self.passe = True
                        baller.defPoste('PASSEUR')
                        baller.teammate().defPoste('RECEVEUR')

                    elif baller.status != 'EN COURS':
                        # print('here')

                        field = baller.create_game()
                        final_pos_baller, score_baller, fail = ia.play_game_3(
                            agent=self.ia, game=field)

                        # print(field)
                        # ia.Game(9,9,terrain=field).print()

                        field = baller.teammate().create_game()
                        final_pos_mate, score_mate, fail = ia.play_game_3(
                            agent=self.ia, game=field)

                        if score_mate > score_baller + 2:
                            if self.side == 'L':
                                baller.teammate().goto = final_pos_mate
                            else:
                                baller.teammate().goto = (-final_pos_mate[0],
                                                          final_pos_mate[1])
                            baller.teammate().goto = final_pos_mate

                            baller.teammate().status = baller.teammate(
                            ).commande_position(baller.teammate().goto[0],
                                                baller.teammate().goto[1],
                                                self.but_adversaire[0],
                                                self.but_adversaire[1],
                                                spin=True)

                            baller.teammate().defPoste('DRIBBLE')

                            baller.defPoste('PASSEUR')

                        else:
                            if self.side == 'L':
                                baller.goto = final_pos_baller
                            else:
                                baller.goto = (-final_pos_baller[0],
                                               final_pos_baller[1])
                            baller.status = baller.commande_position(
                                baller.goto[0],
                                baller.goto[1],
                                self.but_adversaire[0],
                                self.but_adversaire[1],
                                spin=True)
                            # print(baller.goto)

                            baller.defPoste('DRIBBLE')

            elif baller.team != self.nom:
                # print('defense1',baller)
                goal = self.whoIsTheGoal()
                goal.defPoste('GOAL')

                if ((baller.x < 0) & (self.side == 'L')) | (
                    (baller.x > 0) &
                    (self.side == 'R')):  #Baller de notre coté
                    goal.teammate().defPoste('TACKLE')

                else:
                    goal.teammate().defPoste('DEF')

        elif (not ball):
            closer = self.joueurs[0].match.joueurs[distance.index(
                min(distance))]

            if closer.team == self.nom:  #on est plus proche de la balle

                if (closer.poste[-1] == 'PASSEUR') & (
                        joueur.status == 'DONE'
                ):  #on verifie que ce n'est pas celui qui vient de faire la passe
                    closer.defPoste('DEMARQUE')

                elif (closer.poste[-1] == 'DEMARQUE') & (
                        joueur.status == 'EN COURS'
                ):  #pareil que précédemment mais à l'instant d'aprés
                    closer.defPoste('DEMARQUE')

                elif closer.poste[
                        -1] == 'RECEVEUR':  #si c'est le receveur, alors on ne change pas son poste
                    closer.defPoste('RECEVEUR')

                else:  #sinon on va chercher la balle
                    closer.defPoste('CHASER')
                    closer.teammate().defPoste('DEMARQUE')

            else:  #l'autre équipe est plus proche de la balle
                goal = self.whoIsTheGoal()  #attribution d'un gardien
                goal.defPoste('GOAL')

                if ((self.side == 'L') &
                    (balle.x < 0)) | ((self.side == 'R') &
                                      (balle.x > 0)):  #Balle de notre coté
                    goal.teammate().defPoste('CHASER')
                else:
                    if (min(distance) /
                            goal.teammate().distanceToXY(balle.position)
                        ) > 0.7:  #Rapport de décision def/chaser
                        goal.teammate().defPoste('DEF')
                    else:
                        goal.teammate().defPoste('CHASER')

        #Affichage changement de status
        if self.joueurs[0].match.disp == 0:
            changement = False
            status = ''
            for joueur in self.joueurs:
                status += (f'{joueur} {joueur.poste} {joueur.status} \n')
                if joueur.poste[-2] != joueur.poste[-1]:
                    changement = True
            if changement:
                print('---------------')
                print(status)
Esempio n. 6
0
    def action(self):
        for joueur in self.joueurs:
            if joueur.poste[-1]=='SHOOTER':
                joueur.Tir()
            elif joueur.poste[-1]=='CHASER':
                joueur.status=joueur.commande_balle()
                
            elif joueur.poste[-1]=='AT2':
                if joueur.status!='EN COURS':
                    field=joueur.create_game()
                    final_pos_joueur,score_joueur,fail=ia.play_game_3('ia3',game=field)
                    if self.side=='L':
                        joueur.goto=final_pos_joueur
                    else:
                        joueur.goto=(-final_pos_joueur[0],final_pos_joueur[1])
                    joueur.status=joueur.commande_position(joueur.goto[0], joueur.goto[1], joueur.teammate().x,joueur.teammate().y)
                    # print(joueur.goto)
                    
                else :
                    joueur.status=joueur.commande_position(joueur.goto[0], joueur.goto[1], joueur.teammate().x,joueur.teammate().y)
                ax.plot(joueur.goto[0],joueur.goto[1],'go')
                # p = psl.packetCommandBot(joueur.team=='Y', 
                #           id=joueur.id, 
                #           veltangent=0., 
                #           velnormal=0, 
                #           velangular=0.)
                # grSim.send(p)
                self.passe=False
            #     field=joueur.create_game()
            #     final_pos,score=ia.play_game('ia2',game=field)

                
            #     if self.side=='L':
            #         joueur.goto=final_pos
            #     else:
            #         joueur.goto=(-final_pos[0],final_pos[1])
                
                
                
            elif joueur.poste[-1]=='BALLER':
                # field=self.joueurs[0].match.create_game()
                # final_pos,score=ia.play_game('ia2',game=field)
                
                # joueur.goto=final_pos
                # joueur.status=joueur.commande_position(joueur.goto[0], joueur.goto[1], 0,spin=True)
                
                joueur.defPoste('DRIBBLE')
                joueur.defPoste('DRIBBLE')
                # print(final_pos)
                # time.pause(5)
            
            elif joueur.poste[-1]=='DRIBBLE':
                joueur.status=joueur.commande_position(joueur.goto[0], joueur.goto[1], self.but_adversaire[0],self.but_adversaire[1],spin=True)
                ax.plot(joueur.goto[0],joueur.goto[1],'go')
                joueur.defPoste('DRIBBLE')
            
            elif (joueur.poste[-1]=='PASSEUR') & (joueur.teammate().poste[-1]=='RECEVEUR'):
                joueur.Passe()
                joueur.defPoste('PASSEUR')
                
            
            elif (joueur.poste[-1]=='RECEVEUR') & (joueur.teammate().poste[-1]=='AT2'):
                joueur.reception()
                joueur.defPoste('RECEVEUR')
                
                # if joueur.distance_balle<100:
                #     joueur.poste[-1]=='CHASER'
                    
            elif joueur.poste[-1]=='GOAL':
                joueur.goal()
                
            elif joueur.poste[-1]=='DEF':
                
                if self.side=='L':
                    x=-600
                    
                else :
                    x=600
                    
                    
                
                joueur.commande_position(x, 0, 0,0)     
                
            elif joueur.poste[-1]=='TACKLE':
                joueur.commande_balle()
Esempio n. 7
0
 def whereIstheBall(self):
     ball=False
     baller=None
     distance=[]
     
     for joueur in self.joueurs[0].match.joueurs :
         if joueur.hasTheBall():
             ball=True
             baller=joueur
         
         d=joueur.distanceToXY(self.joueurs[0].match.balle.position)
         joueur.distance_balle=d
         distance.append(d)
         # if joueur==Robot('B',0,match_test):
         #     print(d)
         # if joueur.poste[-1]=='RECEVEUR':
         #     self.passe=True
         
         # if (joueur.poste[-1]=='DRIBBLE')&(joueur.status=='DONE'):
         #     joueur.defPoste('RECEVEUR')
             
             
         
            
     # print(ball)
     if ball: 
         if (baller.team==self.nom):
             # baller.defPoste('BALLER')
             self.baller=baller
             if self.openGoal(baller):
                 baller.defPoste('SHOOTER')
                 baller.teammate().defPoste('AT2')
                 
             
             elif (baller.poste[-1]=='DRIBBLE')&(baller.status=='EN COURS') :
                 baller.defPoste('DRIBBLE')
                 baller.teammate().defPoste('AT2' ) 
                 
                 
             # elif (baller.poste[-1]=='DRIBBLE')&(baller.status=='DONE'):
             #     baller.defPoste('BALLER')
             #     baller.teammate().defPoste('MATE' ) 
                 
             else :
                 
                 if self.openGoal(baller.teammate()):
                     self.passe=True
                     baller.defPoste('PASSEUR')
                     baller.teammate().defPoste('RECEVEUR')
                 
                 elif baller.status!='EN COURS':
                     print('here')
                     
                     field=baller.create_game()
                     final_pos_baller,score_baller,fail=ia.play_game_3('ia3',game=field)
                     
                     # print(field)
                     # ia.Game(9,9,terrain=field).print()
                     
                     field=baller.teammate().create_game()
                     final_pos_mate,score_mate,fail=ia.play_game_3('ia3',game=field)
                     
                     
                     if score_mate>score_baller+2:
                         if self.side=='L':
                             baller.teammate().goto=final_pos_mate
                         else:
                             baller.teammate().goto=(-final_pos_mate[0],final_pos_mate[1])
                         baller.teammate().goto=final_pos_mate
                        
                         baller.teammate().status=baller.teammate().commande_position(baller.teammate().goto[0], baller.teammate().goto[1], self.but_adversaire[0],self.but_adversaire[1],spin=True)
                         
                         baller.teammate().defPoste('DRIBBLE')
                         
                         baller.defPoste('PASSEUR')
                         
                         
                         
                         
                     else:
                         if self.side=='L':
                             baller.goto=final_pos_baller
                         else:
                             baller.goto=(-final_pos_baller[0],final_pos_baller[1])
                         baller.status=baller.commande_position(baller.goto[0], baller.goto[1], self.but_adversaire[0],self.but_adversaire[1],spin=True)
                         # print(baller.goto)
                         
                         baller.defPoste('DRIBBLE')
                         
                         
                         
                     
                 
             
                 # passe=True
                 
             # print('attaque PASSE',baller)
         
         if (baller.team==self.nom) & (self.passe):
             if baller.teammate()==self.baller:
                 self.passe=False
                 baller.defPoste('AT2')
                 
             
         elif baller.team!=self.nom :
             # print('defense1',baller)
             goal=self.whoIsTheGoal()
             goal.defPoste('GOAL')
             
             if ((baller.x<0)&(self.side=='L'))|((baller.x>0)&(self.side=='R')):
                 goal.teammate().defPoste('TACKLE')
                 
             else :
                 goal.teammate().defPoste('DEF')
     elif (not ball) & (not self.passe):
         closer=self.joueurs[0].match.joueurs[distance.index(min(distance))]
         if closer.team==self.nom:
             if (min(distance)<300)&(closer.poste[-1]=='DRIBBLE'):
                 pass
             else:
                 closer.defPoste('CHASER')
                 closer.teammate().defPoste('AT2')
         else :
             # print('defense', closer)
             goal=self.whoIsTheGoal()
             goal.defPoste('GOAL')
             goal.teammate().defPoste('DEF')
     
     elif (not ball) & self.passe:
         for joueur in self.joueurs:
             if joueur.poste[-1]=='PASSEUR':
                 joueur.defPoste('AT2')
     
     
     
     
     changement=False
     status=''
     for joueur in self.joueurs:
         status+=(f'{joueur} {joueur.poste} {joueur.status} \n')
         if joueur.poste[-2]!=joueur.poste[-1]:
             changement=True
     if changement:
        print('---------------')
        print(status)