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()
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()
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")
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()
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")
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)
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()
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
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)
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, 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