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)
Example #2
0
 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