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)
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)
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)
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
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