Dado un conjunto de mosaicos en una cuadrícula, quiero determinar:
- Si los azulejos hacen una figura cerrada
- Si las fichas forman una figura cerrada cuando cuenta los lados del tablero como un borde de la figura
- Si alguna de las dos afirmaciones anteriores es verdadera, qué fichas adicionales se encuentran dentro de la figura adjunta se forman las fichas iniciales.
El jugador comenzará presionando hacia abajo una ficha, luego arrastrará su dedo hacia otras fichas para crear una cadena de fichas del mismo color. Comprobaré a medida que avance para ver si el siguiente mosaico es válido. Ex. Si el jugador comienza en una ficha roja, su único movimiento válido siguiente es una ficha roja adyacente (las diagonales sí cuentan). Cuando el usuario levanta el dedo, necesito poder verificar los 3 elementos anteriores.
Así que mi pensamiento inicial fue que, dado que estaba comprobando la validez de la cadena cada vez que iba, cuando el jugador levantaba el dedo, podía comprobar si la primera y la última ficha eran adyacentes. (Ya sé que son del mismo color). Si fueran adyacentes, tenía el presentimiento de que había hecho una figura cerrada, y que iba a venir aquí para tratar de ver si me faltaba algo grande y algún tipo de prueba lógica / matemática de que mi presentimiento era correcto (o un ejemplo que demuestra que es incorrecto)
Pero fue entonces cuando pensé en el elemento número 2: también tengo que tener en cuenta las cadenas que usan un borde del tablero como un lado de la figura adjunta. En ese caso, el primer y el último elemento de la cadena no serían adyacentes, pero aún tendría una figura cerrada. Así que ahora estoy de vuelta al punto de partida, un poco.
¿Qué puedo hacer con esta cadena de coordenadas de cuadrícula para determinar si forman una figura cerrada o no? Y una vez que no sé que tengo una figura cerrada, ¿cuál es la mejor manera de obtener una lista adicional de todas las fichas que caen dentro de sus límites?
Arriba he dibujado imágenes de lo que espero que puedan ser los 4 resultados posibles de esta prueba.
La cadena no hace una figura cerrada.
La cadena hace una figura cerrada.
Si cuenta los lados del tablero como un borde (o más de un borde) de la figura, la cadena forma una figura cerrada.
La cadena forma una figura cerrada, pero hay puntos de datos adicionales (seleccionados válidamente por el usuario como parte de la cadena) que no forman parte de la figura que se crea.
El caso 4 es el más complicado, porque tendrías que extraer los eslabones de la cadena "extra" para encontrar la figura adjunta y las piezas que caen dentro de ella (pero no alrededor del área "no cerrada").
Entonces ... ¿Alguien tiene una idea de una buena manera de resolver esto, o simplemente un punto de partida para mí? Estoy yendo en círculos en este punto y podría usar otro par de ojos.