Ejemplo n.º 1
0
    def setUp(self):

        # on crée la cellule qui sera testée
        self.cellule = Cellule(numero=1,
                               attaque=0,
                               defense=0,
                               attaqueMax=10,
                               defenseMax=30,
                               production=3,
                               couleurJoueur=2,
                               x=100,
                               y=100,
                               rayon=50)
Ejemplo n.º 2
0
    def test_ajouterLien_pasCellule(self):
        cellule1 = Cellule(numero=0,
                           attaque=0,
                           defense=5,
                           attaqueMax=25,
                           defenseMax=30,
                           production=2,
                           couleurJoueur=8,
                           x=10,
                           y=60,
                           rayon=45)
        cellule2 = Cellule(numero=2,
                           attaque=10,
                           defense=8,
                           attaqueMax=20,
                           defenseMax=36,
                           production=4,
                           couleurJoueur=0,
                           x=10,
                           y=60,
                           rayon=40)
        lien = Lien(cellule1, cellule2, 99)

        self.assertRaises(Exception, self.cellule.ajouterLien, lien)
Ejemplo n.º 3
0
    def test_ajouterLien_ok(self):

        cellule2 = Cellule(numero=2,
                           attaque=10,
                           defense=5,
                           attaqueMax=20,
                           defenseMax=30,
                           production=2,
                           couleurJoueur=0,
                           x=10,
                           y=60,
                           rayon=40)
        lien = Lien(self.cellule, cellule2, 666)
        self.cellule.ajouterLien(lien)

        # on regarde si le lien ajouté est bien dans la liste des liens de la cellule
        self.assertIn(lien, self.cellule.liens)
Ejemplo n.º 4
0
 def initialiserGrille(self):
     """
     Cette fonction remplie la grille de cellules mortes.
     Elle renvoie la grille une fois remplie
     """
     grille = []
     for ligne in range(NB_LIGNES):
         grille.append([])
         for colonne in range(NB_COLONNES):
             if ligne * (
                     HAUTEUR_CELLULE + MARGE_CELLULE
             ) >= HAUTEUR_BARRE:  # pour chaque cellule si elle est
                 # en dessous de la barre d'options
                 nouvelle_cellule = Cellule(
                     ligne, colonne,
                     0)  # On cree un nouvel objet de notre classe 'Cellule'
                 grille[ligne].append(
                     nouvelle_cellule)  # On l'ajoute dans notre grille
                 nouvelle_cellule.afficher(self.fenetre)  # et on l'affiche
     return grille
Ejemplo n.º 5
0
    def initialiserMatch(self, init_string):
        """
        Initialise le robot pour un match.
        A appeler dans la procédure 'init_pooo(init_string)'

        exemple : "INIT20ac18ab-6d18-450e-94af-bee53fdc8fcaTO6[2];1;3CELLS:1(23,9)'2'30'8'I,2(41,55)'1'30'8'II,3(23,103)'1'20'5'I;2LINES:1@3433OF2,1@6502OF3"
        
        :param init_string: chaîne regroupant les informations envoyées par le serveur pour l'initialisation d'un nouveau match, sous la forme INIT.
        :type init_string: str
        """

        logging.info("==== initialisation")

        regex_init = re.compile(
            r"INIT(?P<id_match>.{8}-.{4}-.{4}-.{4}-.{12})TO(?P<nb_joueurs>[0-9]*)\[(?P<maCouleur>[0-9]*)\];(?P<vitesse>[0-9]*);(?P<nbCellules>[0-9]*)CELLS:(?P<cellules>([0-9]+\([0-9]+,[0-9]+\)'[0-9]+'[0-9]+'[0-9]+'I+,?)*);(?P<nbLines>[0-9]*)LINES:(?P<lignes>([0-9]+@[0-9]+OF[0-9]+,?)*)"
        )
        informations = regex_init.match(init_string)
        if (not informations):
            raise Exception(
                "la chaine entrée est invalide (ne correspond pas à la regex)")

        # on récupère autant d'informations que possible sur la chaine d'origine
        self.vitesse = int(informations.group('vitesse'))
        self.id_match = informations.group('id_match')
        self.maCouleur = int(informations.group('maCouleur'))
        self.nbJoueursInitial = int(informations.group('nb_joueurs'))
        self.nbJoueurs = self.nbJoueursInitial

        # création d'un terrain vide, que l'on remplira au fur et à mesure
        self.terrain = te.Terrain()

        nbCellules = informations.group("nbCellules")

        # on trouve toutes les correspondances au pattern correspondant à la description d'une cellule
        # et pour chaque correspondance, on en extrait les informations de la cellule
        regex_cellules = re.compile(
            r"[0-9]+\([0-9]+,[0-9]+\)'[0-9]+'[0-9]+'[0-9]+'I+")
        regex_uneCellule = re.compile(
            r"(?P<id_cellule>[0-9]+)\((?P<x>[0-9]+),(?P<y>[0-9]+)\)'(?P<rayon>[0-9]+)'(?P<maxATT>[0-9]+)'(?P<maxDEF>[0-9]+)'(?P<production>I+)"
        )

        # on ne peut pas séparer ici pas un "," => donc on n'utilise pas re.split()
        for chaine in regex_cellules.findall(informations.group('cellules')):

            ifs = regex_uneCellule.match(chaine)

            try:

                numero = int(ifs.group('id_cellule'))
                attaque, defense, couleurJoueur = 0, 0, -1  # cellule neutre, n'a ni attaque, ni defense
                attaqueMax = int(ifs.group('maxATT'))
                defenseMax = int(ifs.group('maxDEF'))
                production = len(
                    ifs.group('production'))  # on compte le nombre de I

                x = int(ifs.group('x'))
                y = int(ifs.group('y'))
                rayon = int(ifs.group('rayon'))

                cellule = ce.Cellule(numero, attaque, defense, attaqueMax,
                                     defenseMax, production, couleurJoueur, x,
                                     y, rayon)
                self.terrain.ajouterCellule(cellule)

            except Exception as e:
                logging.info(
                    "======== /!\ IMPOSSIBLE DE CREER UNE CELLULE (initialiserMatch) : "
                    + e)

        nbLines = informations.group("nbLines")

        # on fait de même pour les liens entres les cellules
        regex_unLien = re.compile(
            r"(?P<id_cellule_u>[0-9]+)@(?P<distance>[0-9]+)OF(?P<id_cellule_v>[0-9]+)"
        )

        for chaine in re.split(",", informations.group("lignes")):

            try:

                ifs = regex_unLien.match(chaine)

                numero_u = int(ifs.group('id_cellule_u'))
                numero_v = int(ifs.group('id_cellule_v'))
                distance = int(ifs.group('distance'))

                lien = li.Lien(self.terrain.getCellule(numero_u),
                               self.terrain.getCellule(numero_v), distance)
                self.terrain.ajouterLien(lien)

            except Exception as e:
                logging.info("======== /!\ IMPOSSIBLE DE CREER LE LIEN : " + e)

        self.peut_jouer = True
        self.partie_en_cours = True

        pass