Juego multipartida

Ahora que ya somos capaces de detectar el final de partida, el siguiente paso es que el juego sea multipartida, es decir que el jugador pueda jugar varias partidas seguidas antes de terminar el juego o apagar el C64.

De paso, suele ser habitual llevar cuenta de la puntuación máxima (recordemos que hace un par de entradas empezamos a controlar líneas y puntos). No es algo tan completo como llevar un ranking de jugadores y puntuaciones, pero algo es algo.

Para conseguir lo anterior, los cambios se focalizan en el programa principal, es decir, en tetris_main.c. No obstante, también hay algún pequeño retoque en tetris_tablero.c.

Fichero tetris_tablero.c:

En este fichero complementamos las variables líneas y puntos con una nueva variable max_puntos:

Ya dijimos en algún apartado anterior que estas variables las reubicaremos más adelante.

Por otro lado, también modificamos la función tablero_pinta_puntos() para que, además de pintar las líneas y los puntos, también pinte el máximo de puntos:

Por último, en la función tablero_filas_llenas(), que sirve para detectar las filas llenas y colapsarlas, si la puntuación actual supera el máximo, tenemos que actualizar el máximo:

Esto también podría hacerse al final de cada partida, pero casi está mejor hacerlo sobre la marcha.

Fichero tetris_main.c:

Los cambios fuertes están en este segundo fichero. Para empezar, dejamos de tener una inicialización única (función inicializa()) para tener una inicialización del juego (nueva función inicializa_juego()) y una inicialización de la partida (nueva función inicializa_partida()).

La primera función inicializa todo aquello que tiene que inicializarse una única vez:

  • Carga el driver del joystick.
  • Cambia los colores del fondo y del borde.
  • Y pone max_puntos a cero.

La segunda, por su lado, inicializa todo aquello que hay que inicializar en cada partida (recordemos que ahora vamos a tener varias partidas):

  • Borra la pantalla.
  • Inicializa el tablero vacío y lo pinta.
  • Inicializa los puntos y los pinta.
  • Inicializa la ficha.

Por otro lado, el cambio principal está en el bucle de juego. Si antes era así:

Ahora pasa a ser así:

Es decir, ahora tenemos:

  • Un bucle interior que es propiamente el bucle de juego.
  • Y un bucle exterior que es el bucle de las diferentes partidas.

Si nos fijamos en el bucle exterior, que es el nuevo:

  • Inicializa la partida con inicializa_partida().
  • Con joystick_empezar() espera a que el jugador pulse el disparo para empezar la partida.
  • Tiene lugar la partida, es decir, el bucle de juego.
  • Cuando termina la partida, con joystick_continuar() espera a que el jugador pulse el disparo para continuar con otra partida.

Las funciones joystick_empezar() y joystick_continuar() son nuevas, y básicamente muestran un mensaje, que es diferente en cada función, esperan a que el jugador pulse el disparo, y borran el mensaje:

Resultado:

El resultado es que ahora ya es posible jugar varias partidas seguidas. Antes de cada partida, el jugador tiene que pulsar el disparo, y al terminar la partida también, para así continuar con otra partida.


Código de ejemplo: tetris11.zip

Deja un comentario