def jugar(self, primero):
        juego = Gato()

        if not primero:
            jugada = minimax(juego)
            juego.hacer_jugada(jugada)

        self.anuncio['text'] = "A ver de que cuero salen más correas"
        for _ in range(9):
            self.actualiza_tablero(juego.x)
            jugada = self.escoge_jugada(juego)
            juego.hacer_jugada(jugada)
            ganador = juego.terminal()
            if ganador is not None:
                break
            jugada = minimax(juego)
            juego.hacer_jugada(jugada)
            ganador = juego.terminal()
            if ganador is not None:
                break

        self.actualiza_tablero(juego.x)
        finstr = ("UN ASQUEROSO EMPATE, aggggg" if ganador == 0 else
                  "Ganaste, bye"
                  if (ganador > 0 and primero) or (ganador < 0 and not primero)
                  else "¡Gané¡  Juar, juar, juar.")
        self.anuncio['text'] = finstr
        self.anuncio.update()
Beispiel #2
0
    def jugar(self, primero):
        juego = Othello()

        if not primero:
            jugada = minimax(juego)
            juego.hacer_jugada(jugada)


        self.anuncio['text'] = "A ver de que cuero salen más correas"
        for _ in range(64):
            self.actualiza_tablero(juego.x)
            jugada = self.escoge_jugada(juego)
            juego.hacer_jugada(jugada)
            ganador = juego.terminal()
            if ganador is not None:
                break

            jugada = minimax(juego)
            juego.hacer_jugada(jugada)
            ganador = juego.terminal()
            if ganador is not None:
                break

        self.actualiza_tablero(juego.x)
        finstr = ("UN ASQUEROSO EMPATE, aggggg" if ganador == 0 else
                  "Ganaste, bye"
                  if (ganador > 0 and primero) or (ganador < 0 and not primero)
                  else "¡Gané¡  Juar, juar, juar.")
        self.anuncio['text'] = finstr
        self.anuncio.update()
Beispiel #3
0
def juega_gato(jugador='X'):

    if jugador not in ['X', 'O']:
        raise ValueError("El jugador solo puede tener los valores 'X' o 'O'")
    juego = Gato()

    print("El juego del gato".center(60))
    print("las 'X' siempre empiezan".center(60))
    print("y tu juegas con {}".format(jugador).center(60))

    if jugador is 'O':
        jugada = minimax(juego)
        juego.hacer_jugada(jugada)

    acabado = False

    while not acabado:
        pprint_gato(juego.x)
        print("Escoge tu jugada (uno de los números que quedan en el gato)")

        try:
            jugada = int(input("Jugador {}: ".format(jugador)))
            print(jugada)
        except:
            print("¡No seas macana y pon un número!")
            continue
        if jugada < 0 or jugada > 8 or juego.x[jugada] != 0:
            print("¡No seas macana, pon un número válido!")
            continue

        juego.hacer_jugada(jugada)

        if juego.terminal() is not None:
            acabado = True
        else:
            jugada = minimax(juego)
            juego.hacer_jugada(jugada)
            if juego.terminal() is not None:
                acabado = True

    pprint_gato(juego.x)
    ganador = juego.terminal()
    if ganador == 0:
        print("UN ASQUEROSO EMPATE".center(60))
    elif (ganador < 0 and jugador is 'X') or (ganador > 0 and jugador is 'O'):
        print("¡Gané! ¡Juar, juar, juar!, ¿Quieres jugar otra vez?".center(60))
    else:
        print("Ganaste, bye.")
    print("\n\nFin del juego")
def juega_gato(jugador='X'):

    if jugador not in ['X', 'O']:
        raise ValueError("El jugador solo puede tener los valores 'X' o 'O'")
    juego = Gato()

    print("El juego del gato".center(60))
    print("las 'X' siempre empiezan".center(60))
    print("y tu juegas con {}".format(jugador).center(60))

    if jugador is 'O':
        jugada = minimax(juego)
        juego.hacer_jugada(jugada)

    acabado = False

    while not acabado:
        pprint_gato(juego.x)
        print("Escoge tu jugada (uno de los números que quedan en el gato)")

        try:
            jugada = int(input("Jugador {}: ".format(jugador)))
            print(jugada)
        except:
            print("¡No seas macana y pon un número!")
            continue
        if jugada < 0 or jugada > 8 or juego.x[jugada] != 0:
            print("¡No seas macana, pon un número válido!")
            continue

        juego.hacer_jugada(jugada)

        if juego.terminal() is not None:
            acabado = True
        else:
            jugada = minimax(juego)
            juego.hacer_jugada(jugada)
            if juego.terminal() is not None:
                acabado = True

    pprint_gato(juego.x)
    ganador = juego.terminal()
    if ganador == 0:
        print("UN ASQUEROSO EMPATE".center(60))
    elif (ganador < 0 and jugador is 'X') or (ganador > 0 and jugador is 'O'):
        print("¡Gané! ¡Juar, juar, juar!, ¿Quieres jugar otra vez?".center(60))
    else:
        print("Ganaste, bye.")
    print("\n\nFin del juego")
Beispiel #5
0
    def jugar(self, primero):
        juego = Othello()
        self.actualiza_tablero(juego.x)
        self.anuncio['text'] = "A ver de que cuero salen más correas"
        while juego.terminal() is None:
            self.actualiza_tablero(juego.x)
            if len(juego.jugadas_legales()) != 0:
                if juego.jugador == primero:
                    jugada = self.escoge_jugada(juego)
                else:
                    #Con dmax = 2 me metio una putiza a mi y a la ia
                    # de othelloonline.org, lo dejo 49-0 lol
                    # pero si te consideras pro y te gustan los retos, subele
                    # a dmax 3
                    jugada = minimax(juego, dmax=2, utilidad=utilidad_ot)

                juego.hacer_jugada(jugada)
            else:
                juego.jugador *= -1
        self.actualiza_tablero(juego.x)
        u = juego.terminal()
        if u == 0:
            fin = "UN ASQUEROSO EMPATE"
        elif (primero < 0 and u > 0) or (primero > 0 and u < 0):
            fin = "¡Gané! ¡Juar, juar, juar!, ¿Quieres jugar otra vez?"
        else:
            fin = "Ganaste, bye."

        self.anuncio['text'] = fin
        self.anuncio.update()
Beispiel #6
0
def juega_timbiriche(jugador='X', altura=2, ancho=2):
    
    if jugador not in ['X', 'O']:
        raise ValueError("El jugador solo puede tener los valores 'X' o 'O'")
    juego = Timbiriche(1,altura, ancho)
    
    if jugador is 'O':
        jugada = minimax(juego, None, utilidad=utilidad, ordena_jugadas=ordena_jugadas) 
        juego.hacer_jugada(jugada)
    
    acabado = False
    
    while not acabado:
        pprint_timbiriche(juego.x, juego.y, altura, ancho)
        print("\nEscoge una linea juegor ", juego.jugador, ": ")

        try:
            if (juego.jugador == 1):
                jugada = int(input("Jugador X: ".format()))
            else:
                jugada = minimax(juego, dmax=6, utilidad=utilidad, ordena_jugadas=ordena_jugadas)                
                print("Jugador O: ",jugada)
        except:
            print("¡No seas macana y pon un número!")
            continue
        if jugada < 0 or jugada >= len(juego.y) or juego.y[jugada] != 0:
            print("¡No seas macana, pon un número válido!")
            continue

        juego.hacer_jugada(jugada)
        juego.actualiza_tablero(jugada)
        
        if juego.terminal() is not None:
            acabado = True
            
    pprint_timbiriche(juego.x, juego.y, altura, ancho)
    ganador = juego.terminal()
    if ganador == 0:
        print("UN ASQUEROSO EMPATE".center(60))
    elif (ganador < 0 and jugador is 'X') or (ganador > 0 and jugador is 'O'):
        print("¡Gané! ¡Juar, juar, juar!, ¿Quieres jugar otra vez?".center(60))
    else:
        print("Ganaste, bye.")
    print("\n\nFin del juego")
Beispiel #7
0
    def jugar2(self, primero):
        juego = ConectaCuatro()

        if not primero:
            jugada = minimax(juego,
                             dmax=6,
                             utilidad=utilidad_c4,
                             ordena_jugadas=ordena_jugadas,
                             transp=self.tr_ta)
            juego.hacer_jugada(jugada)
Beispiel #8
0
    def jugar(self, primero):
        juego = MetaGato()
        self.actualiza_tablero(juego.x)

        if not primero:
            jugada = minimax(juego, dmax=0, utilidad=utilidad_uttt)
            juego.deshacer_meta()
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(juego.x)

        self.anuncio['text'] = "A ver de que cuero salen más correas"
        for _ in range(81):
            jugada = self.escoge_jugada(juego)
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(juego.x)
            ganador = juego.terminal()
            if ganador is not None:
                break
            # Profundidad 3: tiempos muy buenos en todos los escenarios
            # Profundidad 4: tiempos buenos en la mayoria de los escenarios.
            # cuando hay muchos gatos ganados, y muchas jugadas legales
            # puede tardarse hasta 5 seg en una computadora "estandar"
            jugada = minimax(juego, dmax=3, utilidad=utilidad_uttt)
            juego.deshacer_meta()
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(juego.x)
            ganador = juego.terminal()
            if ganador is not None:
                break

        finstr = ("UN ASQUEROSO EMPATE, aggggg" if ganador == 2 else
                  "Ganaste, bye"
                  if (ganador == 1 and primero) or (ganador < 0 and not primero)
                  else "¡Gané¡  Juar, juar, juar.")
        self.anuncio['text'] = finstr
        self.anuncio.update()
Beispiel #9
0
def iterative_deepening(juego):
    firstguess = 0
    bf = len(list(juego.jugadas_legales()))
    t_ini = perf_counter()
    for d in range(2, 50):
        # juego = root
        # d = deep
        ta = perf_counter()
        jugada, firstguess = minimax(juego,
                                     d,
                                     utilidad,
                                     ordena_jugadas,
                                     transp=None)
        tb = perf_counter()
        if bf * (tb - ta) > t_ini + tmax - tb:
            return jugada
    return jugada
Beispiel #10
0
def MTDF(juego,
         firstguess,
         dmax,
         utilidad=None,
         ordena_jugadas=None,
         trans=None):
    """
    @param juego: es la raiz en este caso
    @param firstguess:
    """
    g = firstguess
    upperbound = inf
    lowerbound = -inf
    while lowerbound < upperbound:
        if g == lowerbound:
            beta = g + 1
        else:
            beta = g

        jugada, g = minimax(juego, d, utilidad, ordena_jugadas, transp)
    def jugar(self, primero):

        juego = othello()
        """
            El metodo limpiar_jugada lo agregue ya que al reiniciar una partida sin terminar
            me salian de color cuadros donde no debia poder poner por lo cual le quito esa propiedad
            a todos para que vuelva a ejecutarse como la primera vez
        """
        self.limpiar_jugada(juego)
        print(juego.frontera)
        self.actualiza_tablero(juego.x)

        #Inicializar marcador
        self.userpoints['text'] = "Jugador: 2 "
        self.userpoints.update()
        self.Mpoints['text'] = "Máquina: 2 "
        self.Mpoints.update()

        if not primero:
            primero = -1
            jugada = minimax(juego, 5, utilidad, ordena_jugadas)

            juego.hacer_jugada(jugada)
        else:
            primero = 1
        self.anuncio['text'] = "Que gane el mejor"

        for _ in range(64):
            self.actualiza_tablero(juego.x)

            if juego.jugadas_legales():

                jugada = self.escoge_jugada(juego)
                juego.hacer_jugada(jugada)

                #actualiza los puntos
                self.userpoints['text'] = "Jugador: {} ".format(
                    puntos(juego.x, primero))
                self.userpoints.update()
                self.Mpoints['text'] = "Máquina: {} ".format(
                    puntos(juego.x, -1 * primero))
                self.Mpoints.update()
                #actualiza tablero
                self.actualiza_tablero(juego.x)
            else:
                print("No hay jugadas para ti...")
                juego.jugador = -1 * juego.jugador  #cambio de turno

            ganador = juego.terminal()
            if ganador is not None: break  #revisa si finalizo el juego

            if juego.jugadas_legales():
                jugada = minimax(juego, 5, utilidad, ordena_jugadas)
                juego.hacer_jugada(jugada)
                #actualiza los puntos
                self.userpoints['text'] = "Jugador: {} ".format(
                    puntos(juego.x, primero))
                self.userpoints.update()
                self.Mpoints['text'] = "Máquina: {} ".format(
                    puntos(juego.x, -1 * primero))
                self.Mpoints.update()

            else:
                print("No hay jugadas para la máquina...")
                juego.jugador = -1 * juego.jugador  #cambio de turno

            ganador = juego.terminal()
            if ganador is not None: break  #revisa si finalizo el juego

        u = utilidad(juego.x)
        if u == 0:
            fin = "UN ASQUEROSO EMPATE"
        elif (primero < 0 and u > 0) or (primero > 0 and u < 0):
            fin = "GG EZ"
        else:
            fin = "Ganaste, bye."
        self.actualiza_tablero(juego.x)
        print("\n\nFin del juego")
        self.anuncio['text'] = fin
        self.anuncio.update()
    def jugar(self, primero):
        juego = othello()

        if primero == -1:
            jugada = minimax(juego, 5, utilidad, ordena_jugadas)
            juego.hacer_jugada(jugada)

        self.anuncio['text'] = "A ver de que cuero salen más correas"
        for _ in range(64):
            self.actualiza_tablero(juego.x)
            if juego.jugadas_legales():

                jugada = self.escoge_jugada(juego)
                juego.hacer_jugada(jugada)

                #actualiza los puntos
                self.userpoints['text'] = "YO: {} ".format(
                    puntos(juego.x, primero))
                self.userpoints.update()
                self.Mpoints['text'] = "M: {} ".format(
                    puntos(juego.x, -1 * primero))
                self.Mpoints.update()
                #actualiza tablero
                self.actualiza_tablero(juego.x)
                ganador = juego.terminal()
                if ganador is not None:
                    break
            else:
                print("No hay jugadas para ti...")
                juego.jugador = -1 * juego.jugador

            if juego.jugadas_legales():
                jugada = minimax(juego, 5, utilidad, ordena_jugadas)
                juego.hacer_jugada(jugada)
                #actualiza los puntos
                self.userpoints['text'] = "YO: {} ".format(
                    puntos(juego.x, primero))
                self.userpoints.update()
                self.Mpoints['text'] = "M: {} ".format(
                    puntos(juego.x, -1 * primero))
                self.Mpoints.update()

                ganador = juego.terminal()
                if ganador is not None:
                    break
            else:
                print("No hay jugadas para la máquina...")
                juego.jugador = -1 * juego.jugador

        self.actualiza_tablero(juego.x)
        u = utilidad(juego.x)
        if u == 0:
            fin = "UN ASQUEROSO EMPATE"
        elif (primero < 0 and u > 0) or (primero > 0 and u < 0):
            fin = "¡Gané! ¡Juar, juar, juar!, ¿Quieres jugar otra vez?"
        else:
            fin = "Ganaste, bye."

        print("\n\nFin del juego")
        self.anuncio['text'] = fin
        self.anuncio.update()
def juega_othello(jugador=1):

    juego = othello()

    tipo = 'X' if jugador == 1 else 'O'
    print("las 'X' siempre empiezan".center(60))
    print("y tu juegas con {}".format(tipo).center(60))

    if jugador is -1:  #si empieza la computadora "O"
        jugada = minimax(juego, 10, utilidad)
        juego.hacer_jugada(jugada)

    acabado = False

    for _ in range(64):
        pprint_othello(juego.x)
        legales = juego.jugadas_legales()
        print("yo", legales)

        if legales:  # si puede jugar
            print(
                "Escoge tu jugada (uno de los números que quedan en el tablero)"
            )

            try:
                jugada = int(input("Jugador {}: ".format(jugador)))
                print(jugada)
            except:
                print("¡No seas macana y pon un número!")
                continue
            if jugada not in legales:
                print("¡No seas macana, pon un número válido!")
                continue

            juego.hacer_jugada(jugada)

            #if juego.terminal(jugador) is None:
            #   acabado = True

        else:  #si pasa de turno
            juego.jugador = -1 * juego.jugador

        legales = juego.jugadas_legales()
        print("maquina", legales)
        print(utilidad)
        jugada = minimax(juego, 10, utilidad)

        if jugada:
            print("jugada M", jugada)
            juego.hacer_jugada(jugada)
            #if juego.terminal(jugador) is None:
            #    acabado = True
        else:
            juego.jugador = -1 * juego.jugador

    pprint_othello(juego.x)
    u = utilidad(juego.x)
    if u == 0:
        print("UN ASQUEROSO EMPATE".center(60))
    elif (primero < 0 and u > 0) or (primero > 0 and u < 0):
        print("¡Gané! ¡Juar, juar, juar!, ¿Quieres jugar otra vez?".center(60))
    else:
        print("Ganaste, bye.")
    print("\n\nFin del juego")
    def jugar(self, primero):

        juego = Othello()
        self.actualizar_tablero(juego)

        if not primero:
            self.anuncio['text'] = "Ahora juega Python"
            self.anuncio.update()
            jugada = minimax(juego,
                             dmax=6,
                             utilidad=utilidad_othello,
                             ordena_jugadas=ordena_jugadas,
                             transp=self.tr_ta)
            juego.hacer_jugada(jugada)
            self.actualizar_tablero(juego)
            juego.jugador *= -1

        def check_i_j(event):
            if ((event.widget.val[1], event.widget.val[2]) in self.posibles):
                juego.hacer_jugada((event.widget.val[1], event.widget.val[2]))
                self.actualizar_tablero(juego)
                self.var.set(0)

        self.var = tk.IntVar()

        while (juego.terminal() == None):
            self.anuncio['text'] = "Te toca jugar"
            self.anuncio.update()
            self.posibles = []
            for i in range(8):
                for j in range(8):
                    if (juego.tablero[i][j] == 0
                            and juego.check_positive_position((i, j))):
                        self.can[i][j].bind("<Button 1>", check_i_j)
                        self.posibles.append((i, j))
            if (juego.terminal() != None):
                break
            self.anuncio.wait_variable(self.var)
            juego.jugador *= -1

            if (len(juego.jugadas_legales()) == 0):
                juego.jugador *= -1
            else:
                self.posibles = []
                self.anuncio['text'] = "Ahora juega Python"
                self.anuncio.update()
                jugada = minimax(juego,
                                 dmax=3,
                                 utilidad=utilidad_othello,
                                 ordena_jugadas=ordena_jugadas,
                                 transp=self.tr_ta)
                juego.hacer_jugada(jugada)
                self.actualizar_tablero(juego)
                if (juego.terminal() != None):
                    break
                juego.jugador *= -1

            # esta parte permite jugar sin la maquina
        """ self.posibles = []
            for i in range(8):
                for j in range(8):
                    if(juego.tablero[i][j] == 0 and juego.check_positive_position((i,j))):
                        self.can[i][j].bind("<Button 1>", check_i_j)
                        self.posibles.append((i,j))          
            if(juego.terminal() != None):
                break;
            self.anuncio.wait_variable(self.var)
            juego.jugador *= -1
        
            if(len(juego.jugadas_legales()) == 0):
                juego.jugador *= -1 """

        str_fin = ("Ganaron las rojas"
                   if juego.terminal() > 0 else "Ganaron las negras"
                   if juego.terminal() < 0 else "Un asqueroso empate")
        self.anuncio['text'] = str_fin
        self.anuncio.update()
    def jugar(self, primero):

        juego = ConectaCuatro()

        for i in range(42):
            if self.can[i].val != 0:
                self.can[i].itemconfigure(self.cuadritos[i], fill='white')
                self.can[i].val = 0
        color, color_p = 'red', 'black'

        if not primero:
            color, color_p = 'black', 'red'
            self.anuncio['text'] = "Ahora juega Python"
            self.anuncio.update()
            for i in range(7):
                self.botones[i]['state'] = tk.DISABLED

            jugada = minimax(juego, dmax=6, utilidad=utilidad_c4,
                             ordena_jugadas=ordena_jugadas,
                             transp=self.tr_ta)
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(jugada, color_p)

        for _ in range(43):
            self.anuncio['text'] = "Te toca jugar"
            self.anuncio.update()
            for i in juego.jugadas_legales():
                self.botones[i]['state'] = tk.NORMAL

            self.anuncio.master.wait_variable('sel_j')
            jugada = self.sel_j.get()
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(jugada, color)

            ganancia = juego.terminal()
            if ganancia is not None:
                break

            self.anuncio['text'] = "Ahora juega Python"
            self.anuncio.update()
            for i in range(7):
                self.botones[i]['state'] = tk.DISABLED
                self.botones[i].update()

            jugada = minimax(juego, dmax=6, utilidad=utilidad_c4,
                             ordena_jugadas=ordena_jugadas,
                             transp=self.tr_ta)
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(jugada, color_p)

            ganancia = juego.terminal()
            if ganancia is not None:
                break

        for i in range(7):
            self.botones[i]['state'] = tk.DISABLED

        str_fin = ("Ganaron las rojas" if ganancia > 0 else
                   "Ganaron las negars" if ganancia < 0 else
                   "Un asqueroso empate")
        self.anuncio['text'] = str_fin
    def jugar(self):
        juego = Othello()
        os.system('cls' if os.name == 'nt' else 'clear')
        print(
            "Juego de othello contra una máquina con el algoritmo minimax.\n")
        print("En este juego siempre empiezan las negras: ")
        print("X: Piezas negras.")
        print("O: Piezas blancas.\n")
        res = ""

        while res != "s" and res != "n":
            res = input("¿Quieres ser primeras(s/n)?")

        if res == "n":
            os.system('cls' if os.name == 'nt' else 'clear')
            juego.dibuja_tablero()
            print("Esperando el movimiento de la máquina...")
            jugada = minimax(juego,
                             dmax=4,
                             utilidad=utilidad,
                             ordena_jugadas=ordena_jugadas,
                             transp={})

            juego.hacer_jugada(jugada)

        while (juego.terminal() == None):
            os.system('cls' if os.name == 'nt' else 'clear')
            juego.dibuja_tablero()

            jugadas = juego.jugadas_legales()
            if len(jugadas) > 0:
                print("Jugadas: ")
                for i in range(len(jugadas)):
                    print(i, ":", jugadas[i][0], "  ", sep='', end='')

                opc = input("\nOpción: ")

                while int(opc) >= len(jugadas) or int(opc) < 0:
                    print("Opción incorrecta...")
                    opc = input("Opción: ")

                juego.hacer_jugada(jugadas[int(opc)])
                os.system('cls' if os.name == 'nt' else 'clear')
                juego.dibuja_tablero()
            else:
                juego.jugador = -juego.jugador

            print("Esperando el movimiento de la máquina...")

            jugadas = juego.jugadas_legales()

            if len(jugadas) > 0:
                jugada = minimax(juego,
                                 dmax=4,
                                 utilidad=utilidad,
                                 ordena_jugadas=ordena_jugadas,
                                 transp={})

                juego.hacer_jugada(jugada)
            else:
                juego.jugador = -juego.jugador

        os.system('cls' if os.name == 'nt' else 'clear')
        juego.dibuja_tablero()

        mensaje = "Ganaron las blancas" if juego.terminal(
        ) == 1 else "Ganaron las negras" if juego.terminal(
        ) == -1 else "Empate D:"

        print(mensaje)
Beispiel #17
0
    def jugar(self, primero):

        juego = ConectaCuatro()

        for i in range(42):
            if self.can[i].val != 0:
                self.can[i].itemconfigure(self.cuadritos[i], fill='white')
                self.can[i].val = 0
        color, color_p = 'red', 'black'

        if not primero:
            color, color_p = 'black', 'red'
            self.anuncio['text'] = "Ahora juega Python"
            self.anuncio.update()
            for i in range(7):
                self.botones[i]['state'] = tk.DISABLED

            jugada = minimax(juego, dmax=6, utilidad=utilidad_c4,
                             ordena_jugadas=ordena_jugadas,
                             transp=self.tr_ta)
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(jugada, color_p)

        for _ in range(43):
            self.anuncio['text'] = "Te toca jugar"
            self.anuncio.update()
            for i in juego.jugadas_legales():
                self.botones[i]['state'] = tk.NORMAL

            self.anuncio.master.wait_variable('sel_j')
            jugada = self.sel_j.get()
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(jugada, color)

            ganancia = juego.terminal()
            if ganancia is not None:
                break

            self.anuncio['text'] = "Ahora juega Python"
            self.anuncio.update()
            for i in range(7):
                self.botones[i]['state'] = tk.DISABLED
                self.botones[i].update()

            jugada = minimax(juego, dmax=6, utilidad=utilidad_c4,
                             ordena_jugadas=ordena_jugadas,
                             transp=self.tr_ta)
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(jugada, color_p)

            ganancia = juego.terminal()
            if ganancia is not None:
                break

        for i in range(7):
            self.botones[i]['state'] = tk.DISABLED

        str_fin = ("Ganaron las rojas" if ganancia > 0 else
                   "Ganaron las negars" if ganancia < 0 else
                   "Un asqueroso empate")
        self.anuncio['text'] = str_fin
Beispiel #18
0
    def jugar(self, primero):

        juego = ConectaCuatro()

        for i in range(42):
            if self.can[i].val != 0:
                self.can[i].itemconfigure(self.cuadritos[i], fill='white')
                self.can[i].val = 0
        color, color_p = 'red', 'black'

        if not primero:
            color, color_p = 'black', 'red'
            self.anuncio['text'] = "Ahora juega Python"
            self.anuncio.update()
            for i in range(7):
                self.botones[i]['state'] = tk.DISABLED

            # Con esa profundidad a lo mas llega a tardar 2 segundos en casos
            # que considero muy pocas veces ocurren.
            # Nunca le pude ganar, pero me considero un macana de los juegos
            # por eso busque gente ociosa que pudiera hacer el paro.
            # tampoco pudieron ganar pero pienso yo que es porque
            # casi nadie juega ya conecta4. hace falta practicar mas.
            # ordenar jugadas no lo implemente porque me senti bien
            # con lo que ya tengo
            jugada = minimax(juego, dmax=6, utilidad=utilidad_c4,
                             ordena_jugadas=ordena_jugadas,
                             transp=self.tr_ta)
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(jugada, color_p)

        for _ in range(43):
            self.anuncio['text'] = "Te toca jugar"
            self.anuncio.update()
            for i in juego.jugadas_legales():
                self.botones[i]['state'] = tk.NORMAL

            self.anuncio.master.wait_variable('sel_j')
            jugada = self.sel_j.get()
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(jugada, color)

            ganancia = juego.terminal()
            if ganancia is not None:
                break

            self.anuncio['text'] = "Ahora juega Python"
            self.anuncio.update()
            for i in range(7):
                self.botones[i]['state'] = tk.DISABLED
                self.botones[i].update()

            jugada = minimax(juego, dmax=6, utilidad=utilidad_c4,
                             ordena_jugadas=ordena_jugadas,
                             transp=self.tr_ta)
            juego.hacer_jugada(jugada)
            self.actualiza_tablero(jugada, color_p)

            ganancia = juego.terminal()
            if ganancia is not None:
                break

        for i in range(7):
            self.botones[i]['state'] = tk.DISABLED

        str_fin = ("Ganaron las rojas" if ganancia > 0 else
                   "Ganaron las negars" if ganancia < 0 else
                   "Un asqueroso empate")
        self.anuncio['text'] = str_fin