¿Alguna recomendación para Android Buscaminas?
1. Reglas del juego
Buscaminas es un minijuego extremadamente simple. Haz clic en el área donde el jugador cree que no hay minas y marca el área donde están todas las minas. puedes ganar. Cuando haces clic en un bloque que no contiene truenos, puede haber un número debajo o puede ser un bloque en blanco. Cuando haces clic en un bloque que tiene un número, el juego mostrará el número contenido en el bloque en el que se hizo clic actualmente. Cuando haces clic en el bloque en blanco, el mapa se expandirá para formar una figura de tamaño y forma irregulares. El límite de la figura es el bloque numérico. También puedes pensar en la expansión como una figura irregular rodeada de números.
1.1? Reglas de generación de números
En el juego Buscaminas, los números se utilizan para determinar la ubicación de las minas. Entonces, ¿cuáles son las reglas para la generación de números? Suponiendo que solo hay una mina en el juego, la suya estará rodeada por el número 1 y será ignorada si encuentra un límite. Como se muestra en la imagen:
1
1
1
1
Lei
1
1
1
1
雷
1
1
1
Se puede ver que el juego primero genera truenos y luego genera números según la posición del trueno. Veamos la siguiente imagen:
1
1
1
1
Trueno
2
1
2
Trueno
1
1
1
En En la imagen de arriba, hay dos. Un bloque con un número de 2 es el resultado de la superposición de números. Las áreas que rodean la mina se superponen. Cuando se suman los números de los bloques del área superpuesta, el número del bloque se convertirá en el número agregado. .
1.2? Las reglas del barrido de minas en el ejemplo de este blog
Los jugadores deben hacer clic en todos los bloques en blanco y dejar los bloques que el jugador cree que tienen minas. Los bloques restantes y el número de minas son Cuando los números son iguales, el jugador gana. Si se hace clic en un cuadrado con una mina antes de esto, el jugador falla.
2. Algoritmo del juego y estructura de datos
2.1? Algoritmo de expansión de bloques en blanco
La expansión de bloques en blanco es casi el núcleo del juego Buscaminas. Como se mencionó anteriormente, en el juego Buscaminas, cuando haces clic en un bloque en blanco, los bloques del mapa del juego se expandirán. Podemos observar que los bloques en blanco se expanden capa por capa. Por lo tanto, utilizamos la búsqueda en amplitud en el mapa. Algoritmo de expansión. Alguien puede preguntar: ¿Se puede utilizar el algoritmo de búsqueda en profundidad? La respuesta es sí, pero si se usa aquí, la eficiencia será menor que la del algoritmo de búsqueda en amplitud.
2.2 Estructura de datos del Buscaminas
(1) Matriz de direcciones
int[][] dir={
{-1, 1 },//Esquina superior izquierda
{0,1},//Directamente arriba
{1,1},//Esquina superior derecha
{ - 1,0},//derecha izquierda
{1,0},//derecha derecha
{-1,-1},//esquina inferior izquierda
{0,-1},//directamente debajo
{1,-1}//esquina inferior derecha
};
El La matriz de dirección se está expandiendo. Se usa nuevamente cuando se usan bloques en blanco, porque el recorrido en amplitud significa caminar en todas las direcciones del mapa.
(2) Clase Tile
Esta clase representa el "bloque" del juego y le declaramos tres miembros.
valor corto;
bandera booleana;
booleano abierto;
valor almacena el valor del bloque. -1 representa un bloque de mina; 0 representa un bloque en blanco; >0 representa un bloque digital.
flag almacena si la mina está marcada por el jugador (no tiene ningún efecto en este ejemplo y está reservada para una fácil expansión).
open almacena si el usuario ha hecho clic en el bloque.
(3) Matriz de mosaicos
La matriz de mosaicos representa una colección de bloques y el mapa del juego, almacenando los datos principales del juego.
(3) Clase de punto
La clase de punto representa "ubicación", y declarar la clase de punto nos facilita generar minas en ubicaciones aleatorias en el mapa.
La clase Point también necesita anular el código hash y los métodos iguales para poder comparar si la posición y la posición son las mismas.
(4) La clase Mine
encapsula la estructura de datos anterior.
Constructor de minas: Establece los parámetros del mapa del juego, como la posición del dibujo, el tamaño del dibujo, el tamaño del bloque, el número de minas generadas, etc.
Método init(): borra e inicializa el mapa del juego.
Método crear (Punto p): genera aleatoriamente ubicaciones de minas en el mapa y genera números. El parámetro p es la posición donde no se producen truenos. El punto p se puede pasar en la posición cuando el usuario hace clic por primera vez. Una forma más rápida de generar minas en posiciones aleatorias es agregar primero todas las posiciones en el mapa excepto la posición p a la lista vinculada, luego generar un número aleatorio entre 0 y el tamaño de la lista vinculada - 1, y seleccionar el número aleatorio de la lista vinculada en función del elemento de número aleatorio generado, después de recuperar el elemento, elimine la posición de la lista vinculada y establezca el valor de Tile en esa posición en la matriz Tile en -1. Repita las operaciones anteriores hasta que la cantidad de minas generadas cumpla con los requisitos. La forma de generar números: atraviesa la matriz Tile y, cuando encuentres un trueno, suma 1 al valor de las ocho posiciones a su alrededor. Si hay un trueno en las ocho posiciones, o la posición no existe, no se realiza ninguna operación.
método open(Point p,boolean isFirst): p representa el bloque en una determinada posición, que es el índice de la matriz Tile. isFirst indica si es la primera vez que se hace clic en la pantalla. Este método realiza diferentes operaciones dependiendo de si se hace clic en él por primera vez. Cuando el jugador hace clic en el bloque por primera vez, se llama a la función de creación para generar un mapa. De lo contrario, expanda el mapa y otras operaciones.
(5) Clase MainView
Clase View, responsable de dibujar y operar objetos Mine.
3. Ejemplo de código
Mine.java
Detalles