Bueno, he estado en muchos sitios enseñando cómo resolverlo, pero me preguntaba cómo crearlo. No me interesan demasiado los aspectos de codificación, pero quería saber más sobre los algoritmos que lo respaldan. Por ejemplo, cuando la cuadrícula se genera con 10 minas más o menos, usaría cualquier función aleatoria para distribuirse a través de la cuadrícula, pero nuevamente ¿cómo establezco los números asociados a ella y decido qué casilla abrir? No pude enmarcar ningún algoritmo genérico sobre cómo iba a hacer eso.¿Cuál es el algoritmo detrás de la generación de buscaminas
Respuesta
Tal vez algo en la línea de:
grid = [n,m] // initialize all cells to 0
for k = 1 to number_of_mines
get random mine_x and mine_y where grid(mine_x, mine_y) is not a mine
for x = -1 to 1
for y = -1 to 1
if x = 0 and y = 0 then
grid[mine_x, mine_y] = -number_of_mines // negative value = mine
else
increment grid[mine_x + x, mine_y + y] by 1
Eso es más o menos lo ...
** ** EDITAR
Debido a que este algoritmo podría plomo en la creación de una tablero con algunas minas agrupadas demasiado juntas, o peor muy dispersas (por lo tanto aburrido de resolver), puede agregar validación adicional al generar mine_x
y mine_y
número. Por ejemplo, para asegurar que por lo menos 3 células vecinas no son minas, o incluso tal vez a favor de limitar el número de minas que están demasiado lejos unos de otros, etc.
** ** ACTUALIZACIÓN
I Me he tomado la libertad de jugar un poco con JS bin aquí se le ocurrió un funcional Minesweeper game demo. Esto es simplemente para demostrar el algoritmo descrito en esta respuesta. No optimicé la aleatoriedad de la posición de la mina generada, por lo tanto, algunos juegos podrían ser imposibles o demasiado fáciles. Además, no hay ninguna validación en cuanto a la cantidad de minas que hay en la cuadrícula, por lo que puedes crear una cuadrícula de 2 por 2 con 1000 minas ... pero eso solo conducirá a un ciclo infinito :) ¡Disfruta!
Esto se incrementaría sobre las minas ya colocadas, por lo que querría que las minas estuvieran representadas por un número que fue lo suficientemente negativo como para no aumentarse hasta cero, como el mío = -20. Entonces, cada número negativo es una mina. –
respuesta modificada para ser más preciso –
No tengo problemas para colocar las minas, pero ¿cómo puedo generar esos números que son pistas para identificar las minas? No tengo ni idea en ese – Rahul
Simplemente siembras las minas y luego atraviesas cada celda y cuentas las minas vecinas.
O establece cada contador a 0 y con cada mina con semilla, incrementa todos los contadores de celdas vecinas.
Si desea colocar m
minas en N
cuadrados, y tiene acceso a un generador de números aleatorios, simplemente caminar a través de los cuadrados restantes y para cada cálculo cuadrado (# minas restantes)/(# plazas restantes) y lugar una mina si su número aleatorio es igual o inferior a ese valor.
Ahora, si usted quiere etiquetar cada cuadrado con el número de minas adyacentes, sólo puede hacerlo directamente:
count(x,y) = sum(
for i = -1 to 1
for j = -1 to 1
1 if (x+i,y+j) contains a mine
0 otherwise
)
o si lo prefiere, puede comenzar con una serie de ceros y de incrementar cada por uno en el cuadrado 3x3 que tiene una mina en el centro. (No hace daño numerar los cuadrados con minas.)
Esto produce un juego de buscaminas totalmente aleatorio y correctamente anotado. Sin embargo, algunos juegos aleatorios pueden no ser juegos divertidos; seleccionar juegos aleatorios pero divertidos es una tarea mucho más desafiante.
puedo crear la cuadrícula y usar cualquier función aleatoria para colocar las minas, pero el desafío está por venir, cuando intento asociar los números con esas minas, no tengo ni idea de cómo hacerlas. – Rahul
Proporcioné pseudocódigo (sin comprobación de límites) que hace exactamente eso. (Preste atención a la suma: agrega 9 valores que son 1 o 0 dependiendo de si hay una mina allí). –
- 1. ¿Cuál es el algoritmo detrás de sleep()?
- 2. ¿Cuál es el concepto detrás de R.java?
- 3. ¿Cuál es la magia detrás de Lightstreamer?
- 4. ¿Cuál es el algoritmo de construcción de matriz de sufijo de última generación actual?
- 5. ¿Cuál es el algoritmo de predicción detrás de sitios web como farecast.com (bing travel)?
- 6. ¿Cuál es la teoría detrás del algoritmo de coincidencia de patrones KMP?
- 7. ¿Cuál es el algoritmo detrás de los sitios de recomendación como last.fm, grooveshark, pandora?
- 8. ¿Cuál es el mejor algoritmo de generación de mapas de profundidad?
- 9. ¿Cuál es la lógica detrás del algoritmo de división de Fourier?
- 10. ¿Cuál es el concepto detrás de la compresión zip?
- 11. ¿Cuál es el algoritmo detrás del comando de factor en Linux?
- 12. ¿Mejor algoritmo de generación/simulación de rayos?
- 13. Cuál es la matemática detrás de la rueda de colores
- 14. ¿Cuál es el razonamiento de diseño detrás de HandleScope?
- 15. ¿Cuál es la razón detrás de la elección de tipos específicos de criterios de cobertura cuando se mira un algoritmo?
- 16. ¿Cuál es la diferencia entre el algoritmo de avance hacia atrás y el algoritmo de Viterbi?
- 17. ¿Cuál es el razonamiento detrás de los encabezados?
- 18. ¿Cuál es el concepto general detrás de XSS?
- 19. ¿Cuál es el código detrás de datagridtemplatecolumn, y cómo usarlo?
- 20. ¿Cuál es la tecnología detrás de Windows Azure REST Api?
- 21. ¿Cuál es la razón detrás de Object.clone() está protegido
- 22. ¿Cuál es la mejor práctica de generación de componentes MSI?
- 23. Algoritmo de generación de doble hélice
- 24. ANDROID: ¿Cuál es la idea principal detrás de usar strings.xml?
- 25. ¿Cuál es la idea detrás de 'mango GC Fijado'?
- 26. Optimal algoritmo de generación de laberinto multijugador
- 27. ¿Cuál es el concepto básico detrás de WaitHandle?
- 28. ¿Cuál es el mecanismo detrás de startActivityForResult() en Android?
- 29. ¿Cuál es la razón detrás de cbegin/cend?
- 30. ¿Cuál es el algoritmo que usa opencv para encontrar contornos?
Cada mina debería simplemente incrementar cada celda vecina que no sea una mina. – cthom06
que resuelve para todos los ... pero qué pasa con 3 y 4. ¿Cómo incorporaré esos dígitos? si el modo en que lo analizo solo funciona para los únicos – Rahul
posible duplicado de [algoritmo Buscaminas] (http: // stackoverflow.com/questions/1738128/minesweeper-algorithm) – BoltClock