Hemos dicho que tenemos que empezar a detectar el final de las partidas, es decir, tenemos que identificar que las vidas del jugador han llegado a cero y actuar en consecuencia (presentar la pantalla de fin).
El lugar idóneo para hacer esto es cuando se decrementan las vidas, es decir, cuando se detecta una colisión nave – asteroide y se anima una explosión. Si recordáis, el final de la explosión había este código (ver final de la rutina “animaExplosionJugador”):
Ahora hay que mejorar es código para, además de decrementar las vidas, detectar si éstas han llegado a cero. Esto lo hacemos en la versión 20 del proyecto:
Como se puede observar, ahora, además de decrementar las vidas e inicializar la animación para el futuro:
- Analizamos si las vidas han llegado a cero (“lda jugadorVidas” y “bneFinAnimacion2”).
- En caso negativo, seguimos jugando la partida (“rts”).
- Y en caso afirmativo, comparamos si los puntos (“jugadorPuntos”) superan el record (“jugadorMaxPuntos”), para quedarnos en ese caso con el nuevo record, y volvemos a la pantalla inicial / final con “jsr menuInit”.
En esta pantalla inicial / final, dado que los puntos no serán cero, pintaremos la puntuación y el record. Y volveremos a esperar a que el usuario pulse el espacio para jugar otra partida o decida apagar el C64.
En definitiva, ya estamos identificando el final de la partida y, además, estamos gestionando el record de la sesión de partidas. Este record se podría grabar en un fichero y cargarlo en futuras sesiones de partidas.
Código del proyecto: Asteroids20