¿Hay una lógica detrás de cómo se creó el juego 2048? Si es así, ¿qué es?

almacene el campo en una matriz bidimensional llamada tablero que es 4 × 4.

1. [2] [0] [8] [2] [2] [4] [8] [4]
2. [0] [4] [0] [2] presione [4] [8] [4] [4]
3. [4] [0] [2] [2] tecla arriba [0] [0] [0] [0]
4. [0] [8] [2] [2] [0] [0] [0] [0]

Pase esta matriz a una función que deslice todo el valor hacia la izquierda, así:

1. [2,0,4,0] => [2,4,0,0]
2. [0,4,0,8] => [4,8,0,0]
3. [8,0,2,2] => [8,4,0,0]
4. [2,2,2,2] => [4,4,0,0]

El algoritmo puede usar el tablero [x] para apuntar a una columna y trabajar directamente en eso. En pseudocódigo, esto es lo que hace el algoritmo:

  • – caminar sobre la matriz desde el primer hasta el último número
  • – para cada número original en la matriz que no es cero
  • – mire hacia atrás para una posición de destino que no contiene un cero (a menos que sea la posición cero)
  • – si la posición de destino no contiene el número original, use la siguiente posición
  • – si la posición de destino es diferente de la posición original
  • – agregue el número al número en la posición de destino
  • – reemplace el número original por cero

El algoritmo anterior ejecutado hará todas las transformaciones, hará lo siguiente:

[2,2,2,2] => [4,4,0,0]
[0,8,2,2] => [8,4,0,0]
Pero hay un problema, también hará esto:

[2,2,4,4] => [8,4,0,0]

Los dos se fusionan en un cuatro y luego los primeros cuatro se fusionan en un ocho. Esto está mal. Debería estar haciendo esto:

[2,2,4,4] => [4,8,0,0]

Esto se evita agregando una variable de “detención” que se establecerá inicialmente en cero, pero cuando se haya realizado una fusión, se establecerá en la posición de fusión más uno. Esto asegurará que cualquier próxima diapositiva se detendrá antes de fusionarse nuevamente con este número, ya que no se permiten las dobles fusiones.

Para evitar la programación compleja, uso una función rotateBoard que gira la placa 90 grados en sentido antihorario. Esto permite que el moveLeft (tablero) se implemente como:

rotateBoard (tablero);
moveUp (tablero);
rotateBoard (tablero);
rotateBoard (tablero);
rotateBoard (tablero);

Siempre que gire cuatro veces en total, todo funciona como se espera. Este método no es muy eficiente, pero reduce la complejidad del código.

2048 se basa en la progresión geométrica, con cada número un múltiplo de 2. La única complejidad son los 4 aleatorios, de lo contrario será más fácil. En un tablero de 4 × 4, la progresión geométrica de 2 puede llegar a 65.536. Entonces, 2048 no es tan difícil de lograr.

More Interesting

¿Cuál es la función de paso de unidad en la red neuronal artificial?

¿Alguien puede compartir su experiencia con la técnica de aprendizaje semi supervisada de Label Propagation? ¿Cómo funciona ese método en la naturaleza?

¿Cuál es la diferencia y similitud de la inteligencia artificial con IR?

¿Cuándo sería posible que los algoritmos de aprendizaje por refuerzo (RL) pudieran aprender ingeniería de software a través de MOOC (cursos en línea abiertos masivos)?

¿Cómo es hacer un trabajo por contrato para MIRI?

¿Cuáles son los documentos de lectura obligatoria en AI / ML que trazan los principales desarrollos en el campo en los últimos 50 años?

¿Por qué las IA en los videojuegos RTS apestan tanto en los mapas de agua?

¿Cómo funciona Deep Blue?

¿Quora es un experimento para recopilar datos naturales y verdaderos de la mente humana para educar a la IA en su proceso de aprendizaje profundo?

Después del curso de ML de Andrew Ng, ¿debo hacer el curso de red neuronal de Geoffrey Hinton antes de hacer un aprendizaje profundo? ¿Cuánto conocimiento de redes neuronales es lo suficientemente bueno como para comenzar a hacer un aprendizaje profundo?

¿Por qué algunas personas solo juegan contra la IA y no contra jugadores reales en los videojuegos?

¿Cómo explicarías las redes neuronales recurrentes a un niño?

Al sintonizar una red neuronal, ¿cuánto tiempo suele esperar mientras entrena antes de cambiar los hiperparámetros y probar otra configuración?

¿Qué 5 trabajos muy específicos serán asumidos en último lugar por la inteligencia artificial?

¿Es necesario que una inteligencia artificial use una base de datos para ser una inteligencia artificial?