4 en línea - Condición de victoria

La siguiente página detalla algunas ayudas para elaborar el obtener_ganador.

Está escrita de tal forma que se entienda con facilidad si ya intentaste pensar la función por tu cuenta. Si todavía no encaraste una posible implementación del código, te recomendamos que intentes hacerla antes de seguir con lo indicado en la página.

El procedimiento para encontrar un 4 en línea es el mismo para cualquier dirección. Lo que se busca es iterar cada uno de los casilleros, y ver si sus 3 próximos vecinos son iguales (y distintos al valor de casillero vacío). Para cada una de las direcciones, hay tres distintos vecinos a revisar:

  • Condición de victoria horizontal: revisar los casilleros que se encuentran uno a la derecha del actual, dos a la derecha del actual, y tres a la derecha del actual.
  • Condición de victoria vertical: revisar los casilleros que se encuentran uno abajo del actual, dos abajo del actual, y tres abajo del actual.
  • Condición de victoria diagonal: revisar los casilleros que se encuentran uno abajo y a la derecha del actual, dos abajo y a la derecha del actual, y tres abajo y a la derecha del actual.
  • Condición de victoria diagonal inversa: revisar los casilleros que se encuentran uno abajo y a la izquierda del actual, dos abajo y a la izquierda del actual, y tres abajo y a la izquierda del actual.

De forma gráfica, tendría este estilo:

coordenadas

Con esto definido, primero nos fijamos en una de las cuatro direcciones, y luego:

  1. Iteramos cada casillero por índice fil, col, donde:
    • Evaluamos los casilleros vecinos a fil, col, sumando los índices (*) correspondientes a dicha dirección.
    • Si los casilleros vecinos tienen el mismo contenido que los vecinos y no están vacíos, hay un ganador en esta dirección.
  2. Si no encontramos ganadores en esta dirección, repetimos (1) con otra dirección. Si ya probamos (1) con todas las direcciones, no hay ganador.

(*) Suponiendo que nuestras variables de iteración son fil y col, si estuviéramos probando por ejemplo en dirección horizontal, las posiciones relativas de los vecinos en [(0, 1), (0, 2), (0, 3)], lo cuál se traduce a las tres coordenadas vecinas [(fil, col + 1), (fil, col + 2), (fil, col + 3)].