Siempre depende del dominio. Pero también hay dos situaciones en las que harías este tipo de búsquedas. La situación de uno es después de un movimiento (un cambio en el campo de juego hecho por el jugador), y el otro sería si/cuando todo el tablero ha cambiado.
En Tetris, no necesitarás escanear toda la placa después de que se suelte una pieza. Tendría que buscar en las filas que toca la pieza.
En un juego de 3 juegos como Bejeweled, donde se intercambian dos piezas adyacentes a la vez, primero se ejecuta una búsqueda localizada en cada dirección alrededor de cada cuadrado que cambia, para ver si alguna pieza se ha activado. Luego, si lo han hecho, el juego arrojará algunas piezas nuevas y aleatorias en el tablero. Ahora bien, podría ejecutar la misma búsqueda localizada alrededor de cada cuadro que se modificó, pero eso podría implicar muchas declaraciones if
y, de hecho, podría ser más lento que escanear todo el tablero desde la esquina superior izquierda a la inferior derecha. Depende de su implementación y requerirá un perfil.
Como dice Adrian, basta con una matriz 2D simple. A menudo, sin embargo, puede agregar un "borde" de píxeles alrededor de esta matriz, para simplificar el aspecto de búsqueda de patrones. Sin borde, tendrías que tener if
enunciados a lo largo de los recuadros del borde que dicen "bueno, si estás en la fila superior, no busques (y salgas de la matriz)".Con un borde a su alrededor, puede buscar de manera segura todo: salvándose a sí mismo if
declaraciones, ahorrándose ramificación, ahorrándose problemas con la tubería, buscando más rápido.
Para Jon: este tipo de cosas realmente importan en configuraciones de alto rendimiento, incluso en máquinas modernas, si está haciendo un algoritmo de búsqueda para jugar/resolver el juego. Si lo es, quiere que su simulación subyacente se ejecute lo más rápido posible para buscar lo más profundo posible en el menor número de ciclos.