Esempio n. 1
0
    def comparer_coin(self, pos1, pos2):
        coeff1, coeff2 = [], []

        coeff1.append(
            self.Nombre_coin_adjacent_pris(self.plateau, self.cote, pos1))
        coeff2.append(
            self.Nombre_coin_adjacent_pris(self.plateau, self.cote, pos2))

        coeff1.append(
            self.Augmentation_pion_stable_dans_zone(self.plateau, self.cote,
                                                    ZONE_BORD, pos1))
        coeff2.append(
            self.Augmentation_pion_stable_dans_zone(self.plateau, self.cote,
                                                    ZONE_BORD, pos2))

        coeff1.append(
            self.Augmentation_pion_dans_zone(self.plateau, self.cote,
                                             ZONE_BORD, pos1))
        coeff2.append(
            self.Augmentation_pion_dans_zone(self.plateau, self.cote,
                                             ZONE_BORD, pos2))

        coeff1.append(self.Nombre_pion_retourne(self.plateau, pos1))
        coeff2.append(self.Nombre_pion_retourne(self.plateau, pos2))

        outils.ajouter_coeff_alea(coeff1, coeff2)
        if est_superieur(coeff1, coeff2):
            return pos1
        else:
            return pos2
Esempio n. 2
0
    def comparer_vert_noir(self, vert, noir):
        if self.Augmentation_coup_possible_adv_dans_zone(
                self.plateau, noir, ZONE_COIN) <= 0:
            #Ok on peut envisager de jouer noir
            coeff_vert, coeff_noir = [], []

            coeff_vert.append(
                self.Augmentation_pion_stable_dans_zone(
                    self.plateau, self.cote, ZONE_BORD, vert))
            coeff_noir.append(
                self.Augmentation_pion_stable_dans_zone(
                    self.plateau, self.cote, ZONE_BORD, noir))

            coeff_vert.append(
                self.Augmentation_pion_dans_zone(self.plateau, self.cote,
                                                 ZONE_BORD, vert))
            coeff_noir.append(
                self.Augmentation_pion_dans_zone(self.plateau, self.cote,
                                                 ZONE_BORD, noir))

            coeff_vert.append(self.Nombre_pion_retourne(self.plateau, vert))
            coeff_noir.append(self.Nombre_pion_retourne(self.plateau, noir))

            outils.ajouter_coeff_alea(coeff_vert, coeff_noir)
            if est_superieur(coeff_vert, coeff_noir):
                return vert
            else:
                return noir

        return vert
Esempio n. 3
0
    def comparer_blanc_noir(self, blanc,
                            noir):  #todo faire un debug affichable
        if self.Augmentation_coup_possible_adv_dans_zone(
                self.plateau, noir, ZONE_COIN) <= 0:
            #Ok on peut envisager de jouer noir
            coeff_blanc, coeff_noir = [], []
            coeff_blanc.append(
                self.Augmentation_pion_stable_dans_zone(
                    self.plateau, self.cote, ZONE_TOUT, blanc))
            coeff_noir.append(
                self.Augmentation_pion_stable_dans_zone(
                    self.plateau, self.cote, ZONE_TOUT, noir))

            coeff_blanc.append(self.Nombre_pion_retourne(self.plateau, blanc))
            coeff_noir.append(self.Nombre_pion_retourne(self.plateau, noir))

            outils.ajouter_coeff_alea(coeff_blanc, coeff_noir)

            cfg.debug("##Cas particu noir {} est mieux que blanc {}".format(
                noir, blanc))
            if est_superieur(coeff_blanc, coeff_noir):
                return blanc
            else:
                return noir

        return blanc
Esempio n. 4
0
    def comparer_rouge_noir(self, rouge, noir):
        coeff_rouge, coeff_noir = [], []

        coeff_noir.append(int(self.plateau.possessionCoinDuQuartier(noir, self.cote)))
        coeff_rouge.append(1)

        coeff_noir.append(
            self.plateau.est_coup_bourbier_par_cote(noir, self.cote)
            * self.parite_desavantageuse
        )
        coeff_rouge.append(
            self.plateau.est_coup_bourbier_par_cote(rouge, self.cote)
            * self.parite_desavantageuse
        )

        coeff_rouge.append(
            self.plateau.Augmentation_pion_stable_dans_zone(self.cote, ZONE_TOUT, rouge)
        )
        coeff_noir.append(
            self.plateau.Augmentation_pion_stable_dans_zone(self.cote, ZONE_TOUT, noir)
        )

        coeff_rouge.append(self.plateau.Nombre_pion_retourne(rouge, self.cote))
        coeff_noir.append(self.plateau.Nombre_pion_retourne(noir, self.cote))

        if est_superieur(coeff_rouge, coeff_noir):
            return rouge
        else:
            return noir
Esempio n. 5
0
 def comparer_blanc(self, pos1, pos2):
     coeff1, coeff2 = [], []
     coeff1.append(self.Nombre_pion_retourne(self.plateau, pos1))
     coeff2.append(self.Nombre_pion_retourne(self.plateau, pos2))
     outils.ajouter_coeff_alea(coeff1, coeff2)
     if est_superieur(coeff1, coeff2):
         return pos1
     else:
         return pos2
Esempio n. 6
0
    def comparer_vert(self, pos1, pos2):
        """On produit ci dessous est en fait une astuce :
        Si self.parite_desavantageuse est True, la parite est desavantgeuse,
        il faut essayer de faire passer le tour de l'adversaire, pour cela,
        on cherche un "coup bourbier",
        il faut donc en prendre compte dans la selection des coups proposes.
        Sinon, alors self.parite_desavantageuse est False et
        le produit est dans les deux cas egal à 0
        il n'influe donc pas dans la selection du coup
        """
        coeff1, coeff2 = [], []

        coeff1.append(
            self.plateau.est_coup_bourbier_par_cote(pos1, self.cote)
            * self.parite_desavantageuse
        )
        coeff2.append(
            self.plateau.est_coup_bourbier_par_cote(pos2, self.cote)
            * self.parite_desavantageuse
        )

        coeff1.append(int(self.plateau.position_stable_pour_cote(pos1, self.cote)))
        coeff2.append(int(self.plateau.position_stable_pour_cote(pos2, self.cote)))

        coeff1.append(
            -1
            * self.plateau.Augmentation_coup_possible_adv_dans_zone(
                pos1, ZONE_VERTE, self.cote
            )
        )
        coeff2.append(
            -1
            * self.plateau.Augmentation_coup_possible_adv_dans_zone(
                pos2, ZONE_VERTE, self.cote
            )
        )

        coeff1.append(
            -1
            * self.plateau.Augmentation_coup_possible_adv_dans_zone(
                pos1, ZONE_TOUT, self.cote
            )
        )
        coeff2.append(
            -1
            * self.plateau.Augmentation_coup_possible_adv_dans_zone(
                pos2, ZONE_TOUT, self.cote
            )
        )

        coeff1.append(self.plateau.Nombre_pion_retourne(pos1, self.cote))
        coeff2.append(self.plateau.Nombre_pion_retourne(pos2, self.cote))

        if est_superieur(coeff1, coeff2):
            return pos1
        else:
            return pos2
Esempio n. 7
0
 def comparer_rouge(self, pos1, pos2):
     coeff1, coeff2 = [], []
     coeff1.append(-1 * self.Augmentation_coup_possible_adv_dans_zone(
         self.plateau, pos1, ZONE_BORD))
     coeff2.append(-1 * self.Augmentation_coup_possible_adv_dans_zone(
         self.plateau, pos2, ZONE_BORD))
     coeff1.append(self.Nombre_pion_retourne(self.plateau, pos1))
     coeff2.append(self.Nombre_pion_retourne(self.plateau, pos2))
     outils.ajouter_coeff_alea(coeff1, coeff2)
     if est_superieur(coeff1, coeff2):
         return pos1
     else:
         return pos2
Esempio n. 8
0
    def comparer_blanc(self, pos1, pos2):
        """Comparer deux positions de couleur blanche"""
        coeff1, coeff2 = [], []

        # Les méthodes de comparaisons à partir des couleurs sont toutes construites de la même façon.
        # A chaque position, on associe une liste.
        # En fonction des critères ordonnés de l'algorithme que l'on applique sur chaque position, on ajoute un
        # coefficient dans la liste correspondante : plus le coefficient est élevé, plus le coup est favorisé.
        # Si le critère est qualitatif, le coefficient peut être des Booléens converti en 0 ou 1.
        # Si le critère est quantitatif, le coefficient est la quantité examinée (éventuellement multiplié par -1
        # si le critère demande de limiter cette quantité)
        # Enfin, pour déterminer la position choisie, il suffit de comparer les deux listes termes par terme : cf la
        # fonction est_superieur dans outils.py

        # Le coefficeint ci dessous est un porduit astucieux :
        # Si self.parite_desavantageuse est True, la parite est desavantgeuse, il faut essayer de faire passer le tour
        # de l'adversaire, pour cela, on cherche un "coup bourbier", il faut donc en prendre compte dans la selection
        # des coups proposes.
        # Sinon, alors self.parite_desavantageuse est False et le porduit est dans les deux cas egal à 0
        # il n'influe donc pas dans  la selection du coup

        coeff1.append(
            self.plateau.est_coup_bourbier_par_cote(pos1, self.cote)
            * self.parite_desavantageuse
        )
        coeff2.append(
            self.plateau.est_coup_bourbier_par_cote(pos2, self.cote)
            * self.parite_desavantageuse
        )

        coeff1.append(
            -1
            * self.plateau.Augmentation_coup_possible_adv_dans_zone(
                pos1, ZONE_TOUT, self.cote
            )
        )
        coeff2.append(
            -1
            * self.plateau.Augmentation_coup_possible_adv_dans_zone(
                pos2, ZONE_TOUT, self.cote
            )
        )

        coeff1.append(self.plateau.Nombre_pion_retourne(pos1, self.cote))
        coeff2.append(self.plateau.Nombre_pion_retourne(pos2, self.cote))

        if est_superieur(coeff1, coeff2):
            return pos1
        else:
            return pos2
Esempio n. 9
0
    def comparer_vert_noir(self, vert, noir):

        coeff_vert, coeff_noir = [], []

        coeff_noir.append(int(self.plateau.possessionCoinDuQuartier(noir, self.cote)))
        coeff_vert.append(1)

        coeff_noir.append(1)
        coeff_vert.append(0)

        if est_superieur(coeff_vert, coeff_noir):
            return vert
        else:
            return noir
Esempio n. 10
0
    def comparer_rouge(self, pos1, pos2):
        """Permet de comparer deux positions rouge"""
        coeff1, coeff2 = [], []
        coeff1.append(
            self.plateau.est_coup_bourbier_par_cote(pos1, self.cote)
            * self.parite_desavantageuse
        )
        coeff2.append(
            self.plateau.est_coup_bourbier_par_cote(pos2, self.cote)
            * self.parite_desavantageuse
        )

        coeff1.append(
            -1
            * self.plateau.Augmentation_coup_possible_adv_dans_zone(
                pos1, ZONE_VERTE, self.cote
            )
        )
        coeff2.append(
            -1
            * self.plateau.Augmentation_coup_possible_adv_dans_zone(
                pos2, ZONE_VERTE, self.cote
            )
        )

        coeff1.append(
            -1
            * self.plateau.Augmentation_coup_possible_adv_dans_zone(
                pos1, ZONE_TOUT, self.cote
            )
        )
        coeff2.append(
            -1
            * self.plateau.Augmentation_coup_possible_adv_dans_zone(
                pos2, ZONE_TOUT, self.cote
            )
        )

        coeff1.append(self.plateau.Nombre_pion_retourne(pos1, self.cote))
        coeff2.append(self.plateau.Nombre_pion_retourne(pos2, self.cote))

        if est_superieur(coeff1, coeff2):
            return pos1
        else:
            return pos2
Esempio n. 11
0
    def comparer_rouge_noir(self, rouge,
                            noir):  #todo revoir ca + debug affichage
        if self.Augmentation_coup_possible_adv_dans_zone(
                self.plateau, noir, ZONE_COIN) <= 0:
            #Ok on peut envisager de jouer noir
            coeff_rouge, coeff_noir = [], []

            coeff_rouge.append(
                self.Augmentation_pion_stable_dans_zone(
                    self.plateau, self.cote, ZONE_TOUT, rouge))
            coeff_noir.append(
                self.Augmentation_pion_stable_dans_zone(
                    self.plateau, self.cote, ZONE_TOUT, noir))

            coeff_rouge.append(self.Nombre_pion_retourne(self.plateau, rouge))
            coeff_noir.append(self.Nombre_pion_retourne(self.plateau, noir))

            outils.ajouter_coeff_alea(coeff_rouge, coeff_noir)
            if est_superieur(coeff_rouge, coeff_noir):
                return rouge
            else:
                return noir

        return rouge
Esempio n. 12
0
    def comparer_noir(self, pos1, pos2):
        coeff1, coeff2 = [], []

        coeff1.append(-1 * self.Augmentation_coup_possible_adv_dans_zone(
            self.plateau, pos1, ZONE_COIN))
        coeff1.append(-1 * self.Augmentation_coup_possible_adv_dans_zone(
            self.plateau, pos2, ZONE_COIN))

        coeff1.append(
            int(self.position_stable_pour_cote(self.plateau, pos1, self.cote)))
        coeff2.append(
            int(self.position_stable_pour_cote(self.plateau, pos2, self.cote)))

        #todo faire cas Case noir sur l'extrême bord, juste à côté d’un coin conquis

        coeff1.append(self.Nombre_pion_retourne(self.plateau, pos1))
        coeff2.append(self.Nombre_pion_retourne(self.plateau, pos2))

        outils.ajouter_coeff_alea(coeff1, coeff2)
        if est_superieur(coeff1,
                         coeff2):  #todo utiliser le mot cle or en python
            return pos1
        else:
            return pos2
Esempio n. 13
0
    def comparer_rouge_vert(self, rouge, vert):
        coeff_rouge, coeff_vert = [], []

        coeff_rouge.append(
            int(not (self.plateau.position_stable_pour_cote(vert, self.cote)))
        )
        coeff_vert.append(1)

        coeff_rouge.append(
            self.plateau.est_coup_bourbier_par_cote(rouge, self.cote)
            * self.parite_desavantageuse
        )
        coeff_vert.append(
            self.plateau.est_coup_bourbier_par_cote(vert, self.cote)
            * self.parite_desavantageuse
        )

        coeff_rouge.append(1)
        coeff_vert.append(0)

        if est_superieur(coeff_rouge, coeff_vert):
            return rouge
        else:
            return vert