¿Cuál es el algoritmo a seguir para ganar un 5 * 5 Tic Tac Toe?

Si solo necesita 3 en una fila, X gana para todos n> 3 donde n es la dimensión del tablero.

Considere un 4 × 4:

Coloque la X en uno de los cuadrados centrales (por simetría, importa cuál elija):

_ _ _ _

_ _ X _

_ _ _ _

_ _ _ _

Tu oponente tiene cuatro opciones (una para cada fila):

_ _ _ _ | _ _ _ _ | _ _ _ _ | _ _ O _ |

_ OX _ | _ _ X _ | _ _ XO | _ _ X _ |

_ _ _ _ | _ _ O _ | _ _ _ _ | _ _ _ _ |

_ _ _ _ | _ _ _ _ | _ _ _ _ | _ _ _ _ |

o O puede jugar en cualquier otra casilla (movimiento A), su respuesta:

_ _ _ _ | _ _ _ _ | _ _ _ _ | _ _ O _ |

_ OX _ | _ XX _ | _ _ XO | _ XX _ |

_ _ X _ | _ _ O _ | _ _ X _ | _ _ _ _ |

_ _ _ _ | _ _ _ _ | _ _ _ _ | _ _ _ _ |

llame a estos movimientos 1, 2, 3, 4, en nuestro último caso donde O jugó en otra casilla (movimiento A):

si O jugó en la 1ra, 3ra o 4ta fila, juega el movimiento 2, de lo contrario juega el movimiento 1.

Puede reducir esto a simplemente:

def playMoveX (tablero, turnNumber, lastPlaced):
# lastPlaced es una tupla (fila, columna)
if turnNumber == 1: # primer turno, sin contar en francés
board.place (“X”, fila = 0, columna = 2) # recuento francés
elif turnNumber == 3:
# si O jugó en la segunda fila (conteo francés)
if lastPlaced [0] == 1:
board.place (“X”, fila = 2, columna = 3) # recuento francés
más:
board.place (“X”, fila = 1, columna = 1) # recuento francés
más: # gana aquí
# TODO: comprueba cuál de los dos cuadrados x tiene libre y gana


Ahora, si pregunta qué sucede cuando necesita k, en una fila, en una placa nxn, n> = k> 3, aquí es donde entra la poda alfa-beta en la parte superior de minimax (como han mencionado otros).

La idea es simple, finge que tu oponente jugaría el movimiento óptimo, si jugó el movimiento óptimo, y tú jugaste de manera óptima, ¿qué jugarías?

def playMove (Xmove, tablero):
score = board.score ()
if board.gameover (): # ya sea sin movimientos o ganador
puntaje de retorno

# no Xmove, porque estamos cambiando de lado
seqOfNextMoves = (playMove (no Xmove, board.pretendPlay (openTile)) para openTile en board.openTiles ())
si Xmove:
return max (seqOfNextMoves)
más:
return min (seqOfNextMoves)

Esto es solo minimax, para la poda alfa-beta, querrás podar este gran árbol (especialmente a medida que n crece). Poda alfa-beta


Editar con poda alfa-beta:

copia de importación
def abPrune (alfa, beta, Xmove, placa):
if board.gameover (): # empate o alguien ganó
return board.score ()
# si es el movimiento de X, entonces queremos maximizar la puntuación, de lo contrario minimizar
# establecemos el valor en un puntaje peor que el puntaje mínimo posible para X, y el puntaje más grande posible para O, ya que
# x quiere maximizar su puntaje, y O quiere minimizar su puntaje (ver board.score ())
func, value = (max, -2) si Xmove else (min, 2)
para emptyTile en board.emptyTiles ():
# llama recursivamente, no Xmove porque estamos cambiando de lado.
# ver qué pasaría si jugamos este movimiento
value = func (value, abPrune (alpha, beta, not Xmove, board.pretendPlay (emptyTile, Xmove)))
alpha = func (alpha, value) # min o max dependiendo de quién es el turno
si beta <= alfa: # si baja por este camino dará lugar a una peor puntuación posible
rotura
valor de retorno

Tablero de clase ():
def __init __ (self, filas, columnas, cantidadNeededToWin = 3, emptyTileStr = “_”):
self.amountNeededToWin = cantidadNeededToWin
self.emptyTileStr = emptyTileStr
self.board = [[emptyTileStr para r en rango (filas)] para c en rango (columnas)]
def place (self, position, Xmove):
fila, columna = posición
tile = “X” si Xmove más “O”
self.board [fila] [columna] = mosaico
def pretendPlay (self, position, Xmove):
temp = copy.copy (tablero)
lugar temp. (posición, Xmove)
temperatura de retorno
def emptyTiles (self):
para i, rowArray en enumerate (self.board):
para j, val en enumerate (self.board [i]):
si val == self.emptyTileStr:
rendimiento (i, j)
def xwin (auto):
# Cosas TODO aquí

def owin (auto):
# Cosas TODO aquí

def tie (self):
# Cosas TODO aquí

puntaje de def (auto):
si self.xwin ():
volver 1
elif self.owin ():
volver -1
elif self.tie ():
volver 0
más:
# Cosas TODO aquí
… # Número de retorno x, -1 <x <1
… # debe evaluar qué jugador está en una mejor posición
def gameover (auto):
si self.xwin () o self.owin () o self.tie ():
volver verdadero
falso retorno

filas, columnas = 5,5
abPrune (-2, 2, True, Board (filas, columnas, cantidadNeededToWin = 3))

Recuerdo haber escrito un programa para jugar al tic tac toe para 3 × 3. Es un algo simple llamado min -max. ¡Ya que el árbol para 3 x3 no puede ser más de 9! Entonces estuvo bien. Una placa 5 × 5 aún podrá usar ese algoritmo con un poco de optimización, principalmente la purificación alfa beta. Le recomendaría que comience con 3 × 3 y luego use el mismo algo, (recuerde que para un 5 × 5, ¡la altura de su árbol será de 25! Cuando haya hecho eso, use el método de purga AB. Si lo desea, también puedo proporcionarle los enlaces a los recursos que utilicé para codificarlo. Feliz codificación

Completa los pasos para vencer 5 × 5 en tic tac toe hasta el final.

He desarrollado Tic Tac Toe para Android. Está disponible en la tienda de juegos.

Tic Tac Toe Multiplayer – Aplicaciones de Android en Google Play

El algoritmo depende de cómo quiera declarar ganar. Si el ganador está en 3 seguidos, entonces es muy fácil encontrar esa combinación. Pero el juego real sucede cuando hay 4 victorias consecutivas.

En este juego he desarrollado la lógica de la computadora para 5 × 5 para restringir que el jugador gane. Pero todos juegan para ganar, así que mantuve algunas posibilidades abiertas para que el jugador pueda ganar también si puede encontrar esos trucos.

Volviendo a tu punto, estoy compartiendo todas las capturas de pantalla de cómo puedes vencer a la computadora. Aquí estoy comenzando con el primer movimiento, así que tengo X.

Espero que ayude.

Dado que no ha mencionado ninguna regla de ganar, ya sea teniendo cinco en fila o tres o cuatro; Lo estoy mencionando con todos los casos posibles.

  • En caso de que quieras cinco en una fila , intenté jugar el 5 * 5 y todos fueron empate. Incluso si ambos jugadores intentan jugar su propio juego. Llega un punto en el que uno tiene que abandonar su juego y arruinar a otros. Nadie gana
  • En caso de que desee cuatro en una fila , vaya con el patrón que se muestra a continuación. Marque los cuadrados dejando uno adyacente. Llénalos en diagonal. El que comienza el juego tiene más posibilidades de ganar el juego. Pero muchos de ellos también se convierten en empate.

  • En caso de que quiera tres seguidos , este es el más fácil. Normalmente voy con la estrategia mencionada anteriormente. Cualquiera puede ganar. Pero el que comienza el juego tiene una ventaja sobre una casilla. Y así, más posibilidad de ganar.

Pero luego te sugiero que te muevas mejor de 5 * 5 Tic Tac Toe y juegues (también uno de mis favoritos) The Ultimate Tic Tac Toe .

(Créditos de imagen: Google)

Es difícil y casi imposible ganar 5 × 5 tic-tac-toe. En 2 × 2 tic-tac toe, el número de celdas es 4 y el número de líneas es 6 y el número de puntos en una línea es 2, por lo que se garantiza tener un ganador. 3 × 3 tiene 9 celdas, 8 líneas y 3 celdas en una línea. Número de celdas dividido por el número de líneas aproximadamente 0.9, por lo que tiene buenas posibilidades de ganar con algunos trucos.

En 5 × 5 tic-tac toe, hay 25 celdas y 12 líneas (5 verticales, 5 horizontales y 2 diagonales) y uno necesita 5 celdas para ganar el juego. Por lo tanto, tiene una proporción baja de líneas a celdas y un mayor número de puntos para ganar. Entonces es imposible ganar. Una vez que el jugador selecciona un punto en una línea, necesita un mínimo de 4 pasos más para completar la línea. Si el oponente no le da esa oportunidad (no quiere perder directamente y pone un punto si 4 están en una línea y el quinto está vacío), entonces no es posible. Para atrapar al oponente, el jugador necesita un mínimo de 7 puntos (3 puntos en dos líneas diferentes y el séptimo uno común a ambos, por lo que forma dos líneas con 4 puntos cada una). Le da al oponente al menos 6 oportunidades de jugar sus pasos. Una celda toca al menos 2 líneas, por lo que es posible cubrir las 12 líneas con 6 puntos (seleccione puntos, de modo que toque nuevas líneas).

Por lo tanto, un jugador puede perder el juego al permitir que otro jugador seleccione una línea, pero el jugador no puede obligar a otro jugador a perder.

3 × 3 tic-tac-toe es un juego interesante.