def main(): parser = argparse.ArgumentParser() parser.add_argument( "strategie", help="Sélectionne une stratégie nommée qui se trouve dans strategie/__init__.py (exemple: monte_carlo)", ) parser.add_argument( "-t", "--tailles", help="Taille du champ de bataille au format NxM (par défaut: 10x10)", default="10x10", ) parser.add_argument( "-fv", "--facteur-vide", type=float, help="Détermine le facteur vide de la grille générée aléatoirement (defaut: environ 30 %% des cases sont vides)", default=0.3, ) parser.add_argument( "-ag", "--animation-grille", help="Affiche à la fin du jeu la grille en temps réel", action="store_true", ) parser.add_argument( "-ab", "--animation-bataille", help="Affiche à la fin du jeu la bataille en temps réel", action="store_true", ) args = parser.parse_args() tailles = tuple(map(int, args.tailles.split("x"))) grille = Grille.generer_grille( tailles=tailles, facteur_vide=args.facteur_vide ) if args.animation_bataille and args.animation_grille: raise NotImplementedError("Race condition is occurring when those two options are enabled, try only one") print(repr(grille)) bataille = Bataille(grille) strategie = charge_strategie(args.strategie) trames_bataille = [] trames_grille = [] fig = plt.figure() ax = fig.add_subplot(111) while not bataille.victoire: if args.animation_bataille: trames_bataille.append(bataille.fog_of_war().copy()) if args.animation_grille: trames_grille.append(grille.inner.copy()) cible = strategie.agir(bataille) retour = bataille.tirer(cible) print('Tir à {}, retour: {}'.format(cible, retour)) strategie.analyser(bataille, cible, retour) print(bataille._nb_cases_occupees, sum(bataille._nb_cases_touchees.values())) if args.animation_bataille: trames_bataille.extend([bataille.fog_of_war().copy()] * 10) if args.animation_bataille: ani_bataille = cree_animation(ax, fig, trames_bataille, BATAILLE_CMAP, BATAILLE_NORM, BATAILLE_BOUNDS) ani_bataille.save('bataille.mp4') if args.animation_grille: ani_grille = cree_animation(ax, fig, trames_grille, None, None, None) ani_grille.save('grille.mp4') print(bataille.score)
def agir(self, bataille: Bataille) -> Point2D: while True: g = Grille.generer_grille(tailles=bataille.tailles) for p in g.registre_des_positions.keys(): if p not in self.positions_deja_jouees: return p