Si todo lo que quiere hacer es asegurarse de que el mosaico en el que se hizo clic tiene mosaicos abiertos a su alrededor, simplemente crearía una función que verifique los mosaicos a su alrededor. Y luego llame a eso en el mosaico en el que hizo clic.
Puede configurarlo en un bucle (anidado) o simplemente crear sentencias if para él. Entonces, en pseudocódigo:
function IsTileOpen(tile)
if tile NOT open
return false because if the clicked tile isn't open, why check any others
if tile on top row
return false because we're against the top wall
if tile on left column
return false because we're against the left wall
if tile on right column
return false because we're against the right wall
if tile on bottom row
return false because we're against the bottom wall
if top left tile NOT open
return false
if top tile NOT open
return false
if top right tile NOT open
return false
if left tile NOT open
return false
if right tile NOT open
return false
if bottom left tile NOT open
return false
if bottom tile NOT open
return false
if bottom right tile NOT open
return false
return true because all the surrounding tiles were open
end function
Editar según el comentario
Hay dos formas de manejar la situación:
- (Más fácil) Puede reproducir un sonido e indicar que la posición que eligieron no es válida y deben elegir otra opción.
- Use un algoritmo de búsqueda para encontrar un mosaico abierto. Sin embargo, creo que debería haber límites sobre cómo usar esto. Tomemos, por ejemplo, una situación en la que hacen clic en el lado izquierdo del mapa y el único lugar abierto está lejos en el lado derecho. Su algoritmo de búsqueda encuentra ese espacio abierto y coloca el otro urdimbre allí. Esto no parece muy intuitivo y puede ser frustrante. Mi sugerencia en este caso (suponiendo que no desee hacer el n. ° 1, que es mi sugerencia principal), es buscar solo los mosaicos alrededor del mosaico actual (tal vez en un radio n-mosaico). De esta manera, la puerta de urdimbre no aparecerá muy lejos de donde hiciste clic. Para hacer una búsqueda como esta (suponiendo un radio de 1 mosaico), solo necesita llamar a la función anterior en los ocho mosaicos alrededor del actual (suponiendo que el actual no esté disponible). Puede hacer esto en un bucle o, de nuevo, con declaraciones if.