RYG: condiciones de fin de partida

El C64 ya es capaz de generar el árbol de juego y decidir la jugada que más le interesa. De hecho, el humano y el C64 ya pueden jugar de forma continuada, alternando turnos.

Por tanto, el siguiente paso es detectar si la partida ha terminado o no, si han ganado el ratón o los gatos. En principio, la partida termina:

  • Cuando el ratón llega a la fila cero. En este caso gana el ratón.
  • Cuando los gatos acorralan al ratón. En este caso ganan los gatos.

Ahora bien, hay otra situación que, aunque improbable, interesa considerar. Supongamos que el ratón rebasa a los gatos, de modo que estos ya no pueden acorralarlo. Lo lógico sería que el ratón continuara directo hasta la fila cero para ganar la partida. Pero si el ratón es juguetón, y se dedica a dar un paso adelante y otro atrás, puede acabar ocurriendo que los gatos, que sólo pueden avanzar, se queden sin capacidad de moverse. En este caso, se considera que también gana el ratón porque ha escapado de los gatos.

Por tanto, son tres las condiciones de fin de partida:

  • Si el ratón ha llegado a la fila cero, gana el ratón.
  • Si los gatos no pueden moverse, también gana el ratón.
  • Si el ratón no puede moverse, ganan los gatos.

Las dos primeras condiciones las valoraremos justo después de mover el ratón. La última condición la valoraremos justo después de mover los gatos.

El ratón ha llegado a la fila cero:

Tras mover el ratón, es decir, tras solicitar al usuario el movimiento que desea, aplicarlo y pintar el tablero, llamamos a la rutina “verificaRatonFila0”:

Rutina verificaRatonFila0 - llamada

La rutina “verificaRatonFila0” verifica en qué fila se encuentra el ratón y, en caso de estar en la fila cero, lo señaliza con el valor $00 en el flag “vrf0”:

Rutina verificaRatonFila0

Al final, si el ratón está en la fila cero se acaba ejecutando “ganaRaton2”, que hace esto:

Rutina ganaRaton2

Es decir, pinta una felicitación, pide la pulsación de una tecla, espera a que se pulse, y termina, tras lo cual vuelve a inicializarse el juego.

Los gatos no pueden moverse:

Si el ratón no ha llegado a la fila cero, entonces llamamos a la rutina “verificaGatos0Jugs”:

Rutina verificaGatos0Jugs - llamada

La rutina “verificaGatos0Jugs” va obteniendo el número de jugadas posibles del ratón 0, el ratón 1, el ratón 2 y el ratón 3. Para ello utiliza la nueva rutina “cuentaJugadasGato”, que cuenta las jugadas del gato indicado (0, 1, 2 o 3).

Si en algún caso el número de jugadas es superior a cero, entonces directamente devuelve falso ($ff en el flag “vg0j”). Si el número de jugadas es cero en todos los casos, entonces devuelve cierto ($00 en el flag “vg0j”):

Rutina verificaGatos0Jugs

Rutina verificaGatos0Jugs - parte2

Al final, igual que cuando el ratón estaba en la fila cero, si el número de movimientos de los gatos es cero se acaba ejecutando “ganaRaton2”, que lógicamente hace lo ya mencionado (felicita al ratón, pide una tecla, e inicializa el juego).

El ratón no puede moverse:

Esta condición es similar a la anterior, pero aplicada al ratón. Si el ratón no ha ganado, el C64 desarrolla y evalúa el árbol de jugadas, decide la jugada que más le interesa, la aplica, pinta el tablero, y llama a “verificaRaton0Jugs”:

Rutina verificaRaton0Jugs - llamada

La rutina “verificaRaton0Jugs” es muy parecida a “verificaGatos0Jugs”, siendo la principal diferencia que sólo hay un ratón frente a cuatro gatos:

Rutina verificaRaton0Jugs

Usando la nueva rutina “cuentaJugadasRaton” contamos el número de jugadas del ratón y, caso de ser cero, lo señalizamos con $00 en el flag “vr0j”.

Al final, si el número de jugadas del ratón es cero se ejecuta “gananGatos2”:

Rutina gananGatos2

Esta rutina, de forma análoga a “ganaRaton2”, pinta un mensaje (ahora es un lamento en vez de una felicitación 😦 ), pide una tecla, espera a que se pulse, y vuelve a inicializar el juego.

Resultado:

El resultado es que se permite el juego continuado de ratón y gatos y, además, ya se detectan las condiciones de final de partida. Por ejemplo, en este caso ha ganado el ratón:

Gana ratón


Código del proyecto: RYG15

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s