2010-01-28 16 views
6

Ésta es una pregunta que me he estado jugando con una semana o así, propuesto por un colega:Algoritmo para un juego de estrategia

imaginar un juego que se juega en un 36x36 grid. El objetivo del juego es crear cuatro esquinas de un cuadrado de cualquier tamaño (por ejemplo, 2x2, 3x3, 4x4, etc.). El primer jugador coloca una pieza de juego en cualquier lugar, excepto los cuatro espacios de la cuadrícula central. Después del primer movimiento, los jugadores pueden colocar su pieza de juego en cualquier lugar de la grilla. Las piezas de juego no se pueden mover después de colocarlas. Y eso es; El juego es simple y divertido.

He estado tratando de encontrar un algoritmo para ganar, o al menos hacerlo bien en este juego. ¿Alguna sugerencia?

+0

Supongo que solo tiene que tener piezas en las esquinas de la escuadra para ganar, y no puede moverse en un espacio donde su oponente ya se ha movido? ¿El cuadrado tiene que estar alineado con los ejes, o un cuadrado inclinado de 45 grados gana el juego? –

+1

1x1 también es un cuadrado que haría el juego bastante fácil de ganar si vas primero :-) – paxdiablo

+1

Para continuar las preguntas de Jason, ¿qué constituye un "cuadrado de cualquier tamaño"? Cuatro esquinas, el contorno de un cuadrado, un azulejo sólido? – John

Respuesta

7

Este es un juego de información perfecta donde los jugadores toman turnos, como el ajedrez, por lo que se aplica el mismo enfoque utilizado en los motores de ajedrez aquí. Utilice un algoritmo minimax (con alpha-beta pruning probablemente) para buscar en el árbol movimientos válidos. Puede usar alguna función de evaluación para guiar su búsqueda, favoreciendo las posiciones que tienen las casillas más casi completadas.

0

ok Estoy leyendo basura en el juego ... como su ambiguo ... Supongo que este juego es similar a "puntos y líneas" donde el espacio de movimiento es conectar 2 puntos adyacentes con una línea. entonces la grilla de 2x2 tendría 9 verticies, 4 posiciones de victoria de 1x1 y 1 posición de victoria de 2x2. Con el juego que termina con una victoria para la persona que completa un cuadrado, y un empate una vez que ambos jugadores hayan agotado las soluciones de Winable.

ya que sus cuadrados de trabajo son un poco lógicos. puede calcular la membresía de cualquier línea en todos los casilleros posibles. entonces en el ejemplo 2x2 un radial tendría membresía en 2 cajas de 1x1 y un lado tendría una membresía en uno 1x1 y uno 2x2. Esta membresía se vuelve importante.

al comienzo del juego, usted genera todas las membresías para todos los segmentos de línea. haz 2 copias ... (como jugar al acorazado) la COPIA ENEMIGADA se iniciará en el número de vueltas que le quede para terminar cada casilla ... así que en el 36x36 habrá 144 movimientos restantes para terminar la caja grande 4 series de 140movimientos para terminar las 4 cajas de 35x35

Durante sus movimientos usted disminuye todas las casillas afectadas en la COPIA ENEMIGA Durante su movimiento, cualquier movimiento que haga invalidará TODAS las casillas que contengan su movimiento. los pones en negativo 1, o infinito o 2 mil millones ... solo algo para saber que estos cuadrados son imposibles.

Ahora crea una COPIA ANTI-ENEMIGO que es el reverso de la copia enemiga ... esta contiene cuántos movimientos se deben completar para completar un cuadrado dado.

Para un movimiento dado ... primer control para una situación de victoria. si puedes moverte y ganar (antienemia con un cuadrado en uno) Luego verifique si se necesita un bloqueo. (Tablero enemigo con cualquier cuadrado en uno)

ahora añadir una función de tipo minimax si su tan inclinado ..

o utilizar la búsqueda para encontrar las posiciones que destruyen tantas casillas acabado de baja como sea posible, o crear una línea eso reduce múltiples cuadrados bajos en el tablero anti-enemigo. Esto debería funcionar de manera razonable, ya que no trata de terminar ningún cuadrado específico, sino un minimax en el que los dos disparos para el puntaje bajo va a ser un mejor escenario.

3

Como FogleBird escribió un algoritmo Minimax que funcionaría mejor. El problema es cómo evaluar el puntaje del tablero actual. El juego es bastante complejo, hay más de mil campos para empezar.En un juego pequeño como el tic tac toe puedes calcular todos los movimientos posibles hasta el final del árbol de búsqueda en minimax, luego le das 1 punto al jugador ganador y un -1 a la perdedora y retrocedes al árbol para encontrar tu mejor jugada. En este juego necesitas algún tipo de heuristic para calcular un puntaje para el tablero después de descender los tres 10 movimientos.

no tengo mucha información sobre el juego por lo que sólo puede adivinar buenas heurística:

  • puntos debido a las plazas completas (si usted puede conseguir más de un cuadrado) esta sería la forma más fácil, porque su heurística está directamente relacionado con los puntos de juego
  • puntos negativos a causa de las plazas completas de tu enemigo
  • número de plazas posibles
  • número de campos de gente a los lados de la junta
  • número de campos propios en vecindarios pequeños

Existen muchas heurísticas posibles y la mayoría de las veces se necesita una combinación de algunas de ellas.

2

¿Necesita llenar el recuadro o simplemente colocarlo en las esquinas?

Por ejemplo, ¿es la siguiente una victoria?

....................... 
.X..X.................. 
....................... 
....................... 
.X..X.................. 
....................... 

o siguiente?

....................... 
.XXXX.................. 
.X..X.................. 
.X..X.................. 
.XXXX.................. 
....................... 

o siguiente?

....................... 
.XXXX.................. 
.XXXX.................. 
.XXXX.................. 
.XXXX.................. 
....................... 
+0

Espero que sí, ya que sería fácil forzar una victoria en el primer –

+0

Cualquiera de esos tres constituiría una victoria – Gideon

Cuestiones relacionadas