Asteroids: presentación de números en decimal – puntos y record #Programación retro del Commodore 64

En primer lugar, los puntos y el record adolecen de un problema: sólo estamos usando un byte para cada uno. Por tanto, dado que cada asteroide destruido nos reporta diez puntos, esto nos da para un máximo de 25 asteroides (255 / 10 = 25,5). Parece poco.

Por tanto, lo primero es ampliar ambas variables para que ocupen dos bytes, el byte "lo" y el byte "hi". Este cambio es bastante rutinario, y básicamente sólo hay que tener en cuenta dos cosas especiales:

  • Al sumar diez puntos por destruir un asteroide en la rutina "animaExplosionAsteroide", hay que acordarse de sumarlos a la parte "lo", y luego sumar el acarreo a la parte "hi".
  • Al comparar los puntos con el record en la rutina "animaExplosionJugador", dado que ahora ambos tienen parte "lo" y parte "hi", hay que empezar por comparar los bytes más significativos (parte "hi") y, en función del resultado de esa comparación, comparar o no las partes menos significativas ("lo").

En segundo lugar, los puntos y el record serían candidatos ideales para la codificación BCD. Sus valores no se almacenan en ningún registro especial (VIC, SID, …), y la aritmética que hacemos con ellos es relativamente sencilla (básicamente sumar puntos de diez en diez). Esta medida facilitaría su presentación en pantalla en formato decimal.

Sin embargo, dado que en la entrada anterior ya hemos desarrollado una rutina que es capaz de convertir números codificados en binario a números codificados en BCD, ni siquiera el uso de BCD es necesario. Podemos seguir usando la codificación y la aritmética binarias, convertir a BCD antes de imprimir, e imprimir en decimal con "pintaBCD".

Aplicando la misma solución que a las coordenadas X e Y (convertir a BCD antes de imprimir), vemos cómo los puntos ya aparecen en decimal, tanto en la pantalla de juego:

Asteroids - Puntos decimal.PNG

como en la pantalla final:

Asteroids - Puntos y record decimal.PNG

Y con esto podemos dar el juego por terminado en su versión 23 aunque, por supuesto, caben muchas mejoras, como comentaremos más adelante.


Código del proyecto: Asteroids23


Editar

Josepzin

No hay comentarios:

Publicar un comentario