Final de la partida

Ya nos vamos acercando al final. Tanto, que el siguiente paso es detectar el final de la partida.

Hay dos formas de hacerlo. O bien detectar que las filas acumuladas han llegado hasta arriba, hasta la fila cero, o bien intentar sacar una ficha nueva y no poder hacerlo, porque colisiona con otra ya existente en el tablero.

Optaremos por la segunda variante, aunque es un poco más compleja, porque nos permite situaciones como que haya una torre de fichas hasta arriba y seguir jugando, porque hay otras zonas del tablero despejadas.

Ficheros tetris_ficha.h y tetris_ficha.c:

Aquí lo que aparece es una nueva función ficha_verifica_nueva(). Esta función es similar a las otras funciones ficha_verifica_*() ya comentadas anteriormente.:

El objetivo de esta función es detectar si una ficha nueva, una ficha recién activada, ya no cabe en el tablero, bien por salirse por encima o bien por pisar otra ficha (o restos).

Fichero tetris_main.c:

A la nueva función ficha_verifica_nueva() la llamaremos desde el bucle de juego:

Tras activar una ficha nueva, verificaremos si cabe y, en caso contrario, saldremos del bucle de juego con un break.

De momento, como se trata de verificar si esto funciona bien, tras salir del bucle de juego pintaremos los datos del tablero con tablero_pinta_datos(). Lógicamente, más adelante habrá que cambiar esto.

Resultado:

Si jugamos una partida apilando las fichas, buscando el final, vemos algo así:

Como se puede observar, la fila 0, que es la de más arriba, tiene estos datos:

999992333399999

Es decir, la fila 0 tiene cinco bloques vacíos (9), un bloque morado (2), cuatro bloques verdes (3), y otros cinco bloques vacíos (9). Sobre esta fila, y sobre el tablero en general, ha aparecido una ficha nueva, que hemos llegado a pintar, que tiene forma de ángulo recto y es de color naranja.

Lógicamente, esta ficha nueva pisa restos de otras fichas, concretamente, un bloque verde (3) en la fila 0 y otro morado (2) en la fila 1, y, por tanto, es el final de la partida.


Código de ejemplo: tetris10.zip

Deja un comentario