예제 #1
0
파일: tp3.py 프로젝트: juancebarberis/algo1
    def __init__(self, editor):
        super().__init__(editor)

        self.resizable(False, False)

        self.title("TP3 - Backtracking")

        self.vista = Vista(self, editor.mapa)
        self.vista.grid()

        self.ia = IA(editor.mapa)

        self.bind('<Escape>', lambda e: self.destroy())

        self.actualizar_vista()
        self.esperar_y_avanzar()
예제 #2
0
 def creer_joueurs(self):
     """
     Crée les 4 joueurs (Humains et IAs et les répartit aléatoirement
     """
     liste = [i+1 for i in range(self.nb_clients)] + [0]*(4-self.nb_clients)
     random.shuffle(liste)
     for i, p in enumerate(liste):
         if p > 0:
             self.envoi(self.clients[p-1], "indice,"+str(i))
             self.players.append(Human(0, i, self.clients[p-1]))
         else:
             self.players.append(IA(0, i, self.database))
예제 #3
0
파일: tp3.py 프로젝트: juancebarberis/algo1
class ModoIA(tk.Toplevel):
    def __init__(self, editor):
        super().__init__(editor)

        self.resizable(False, False)

        self.title("TP3 - Backtracking")

        self.vista = Vista(self, editor.mapa)
        self.vista.grid()

        self.ia = IA(editor.mapa)

        self.bind('<Escape>', lambda e: self.destroy())

        self.actualizar_vista()
        self.esperar_y_avanzar()

    def esperar_y_avanzar(self):
        self.after(50, self.avanzar)

    def avanzar(self):
        self.ia.avanzar()
        self.actualizar_vista()
        self.esperar_y_avanzar()

    def actualizar_vista(self):
        coord_jugador = self.ia.coord_jugador()
        visitados = set(self.ia.visitados())
        camino = set(self.ia.camino())

        def obtener_color_celda(mapa, coord):
            return Color.backtracking(mapa, coord, coord_jugador, visitados,
                                      camino)

        self.vista.actualizar(obtener_color_celda)
예제 #4
0
    def mover_peca(self, casa_destino: Casa):
        """
        Move a atual peça selecionada para a casa escolhida. Considera jogadas especiais.

        :param casa_destino: Casa que foi escolhida para a peça ser movida.
        :return:
        """
        peca_movida: PecaBase = self.casa_selecionada.peca
        peca_movida.movimentos += 1
        self.casa_selecionada.remover_peca()

        if casa_destino.is_roque:
            casa_destino.inserir_peca(peca_movida)
            i = casa_destino.posicao_na_matriz[0]

            if casa_destino.posicao_na_matriz[1] > 4:
                torre = self.vetor_de_Controle[i][7].peca
                torre.movimentos += 1
                self.vetor_de_Controle[i][7].remover_peca()
                self.vetor_de_Controle[i][5].inserir_peca(torre)

            if casa_destino.posicao_na_matriz[1] < 4:
                torre = self.vetor_de_Controle[i][0].peca
                torre.movimentos += 1
                self.vetor_de_Controle[i][0].remover_peca()
                self.vetor_de_Controle[i][3].inserir_peca(torre)

        elif casa_destino.is_en_passant:
            casa_destino.inserir_peca(peca_movida)

            i = casa_destino.posicao_na_matriz[0]
            j = casa_destino.posicao_na_matriz[1]

            if casa_destino.peca.tonalidade == 'claro':
                self.vetor_de_Controle[i + 1][j].remover_peca(True)
            else:
                self.vetor_de_Controle[i - 1][j].remover_peca(True)

        else:
            casa_destino.inserir_peca(peca_movida)

        self.promocao()
        self.trocar_vez()

        # IA:
        if modoJogo == 2:
            IA(self)
예제 #5
0
def main(nbLignes,
         nbColonnes,
         nb_coups_avance_blanc=0,
         profondeur_raisonnement_noir=1,
         profondeur_raisonnement_blanc=1,
         alphabeta_utilisation=True):
    if nbLignes <= 1 or nbColonnes <= 1:
        raise ValueError(
            "Le nombre de lignes et de colonnes doit être supérieur ou égale à 2"
        )
    if nb_coups_avance_blanc < 0:
        raise ValueError("On peut pas retourner en arrière")
    if profondeur_raisonnement_blanc < 1:
        raise ValueError(
            "Il faut que l'IA puisse réfléchir. Mettez un nombre >= 1")
    if profondeur_raisonnement_noir < 1:
        raise ValueError(
            "Il faut que l'IA puisse réfléchir. Mettez un nombre >= 1")

    historique_grille = []

    grille = Grille(nbLignes, nbColonnes)
    ia_blanc = IA('blanc', profondeur_raisonnement_blanc,
                  alphabeta_utilisation)
    ia_noir = IA('noir', profondeur_raisonnement_noir, alphabeta_utilisation)
    for i in range(nb_coups_avance_blanc):
        mouv = ia_blanc.play(grille)
        nouvelle_grille = grille.effectuerAction(mouv)
        grille.grille = nouvelle_grille.grille
        del nouvelle_grille

    print(
        f"Grille initiale (avec {nb_coups_avance_blanc} coups d'avance pour le joueur blanc):"
    )
    print(grille)

    while not grille.estTermine() and not any(
        [grille == h for h in historique_grille]):
        historique_grille.append(grille)
        joueur = grille.joueurActuel
        if joueur == 'blanc':
            mouvement = ia_blanc.play(grille)
        else:
            mouvement = ia_noir.play(grille)
        grille = grille.effectuerAction(mouvement)
    return grille, ia_blanc, ia_noir
예제 #6
0
def main():
    print "#### Iitialisation ####"
    game = Party("Ghost")
    game.createRoom()
    chars = [
        Character("Nass"),
        Character("Mad"),
        Character("JD"),
        Character("Tony"),
        Character("Nassim"),
        Character("Imad"),
        Character("Jean-David"),
        Character("Anthony")
    ]
    game.characters = chars
    for i, c in enumerate(chars):
        c.moveToRoom(game.rooms[i])
    print "#### Start ####"
    taro = chars[4:]
    result = IA.computeTaros(taro, game.rooms, IA.GHOST)
    print "\tMOVE::", result["perso"].name, " from ", result[
        "perso"].room.name, " to ", result["move"].name
예제 #7
0
파일: main.py 프로젝트: bevilla/Zappy
def main():
    args = parse()
    ia1 = IA(host=args.ip, port=args.port, name=args.name, verbose=True)
    ia1.run()
예제 #8
0
 def __init__(self):
     IA.__init__(self)
예제 #9
0
 def __init__(self):
     random.seed(1)
     IA.__init__(self)
예제 #10
0
파일: main.py 프로젝트: NanoClem/polychess
        ))

    #info sur la partie
    jeu = Save(board)
    jeu.fill_headers([
        str(input("Event : ")),
        str(input("Site : ")),
        datetime.datetime.now(),
        str(input("Round : ")),
        str(input("White : ")),
        str(input("Black : ")), None
    ])

    #IA
    if a == 1:
        game = IA(board)
        print(game.play())

    #Player VS Player
    elif a == 2:
        game = PvP(board)
        print(game.playPvP())

    #Player VS IA
    elif a == 3:
        game = PvE(board)
        print(game.playPvE())

    else:
        print("Choose an other game mode")
예제 #11
0
    def __call__(self):
        """Boucle 'for' principale du simulateur."""
        for i in range(self.nombre_parties):
            if self.fenetre:
                jeu = Othello(self.joueurs, self.fenetre)
            else:
                jeu = Othello(self.joueurs)
            jeu()
            if not jeu.fenetre.open:
                break
            self.gagnants.append(jeu.gagnant)
            if self.display: print(self)

    def __repr__(self):
        """Renvoie une représentation des victoires de chaque joueur avec l'historice des victoires du simulateur."""
        message = "Resultats de " + str(len(self.gagnants)) + " parties:\n"
        for numeror in range(len(self.joueurs)):
            message += "- Joueur " + str(numero) + " a gagne " + str(
                self.gagnants.count(numero)) + " fois.\n"
        return message


if __name__ == "__main__":
    fenetre = Window(taille=[800, 800], fullscreen=False)
    joueurs = [IA(), BruteForce(3)]
    nombre_parties = 50
    affichage = True
    simulation = Simulateur(fenetre, joueurs, nombre_parties)
    simulation()
    print(simulation)