Asteroids: disparos – algunas mejoras necesarias

Los que probéis un poco la versión 06 del proyecto enseguida os daréis cuenta de una cosa: en ocasiones los disparos borran partes del texto que tenemos a la derecha.

Asteroids - Caracteres borrados

¿Cómo es posible esto si los disparos se desactivan al llegar a los bordes? El problema no está tanto en los disparos que nacen en la zona admitida de la pantalla, y avanzan hacia el texto de la derecha. Estos disparos se desactivan correctamente.

El problema está, más bien, en los disparos que nacen cuando la nave está justo atravesando la zona oculta de la derecha. En estos casos, dado que ahora mismo no tenemos ningún control especial en el momento de la creación del disparo, éste nace, se mueve (borrando alguna letra), y enseguida se desactiva.

El efecto resultante es el ya comentado: algunas letras se borran.

Todavía más, con un poco de habilidad es posible mover la nave justo por la zona superior o inferior de la pantalla, disparar, que el disparo nazca en una posición de memoria inferior o superior a la RAM de vídeo ($0400 – $07e7), y que, al moverse, sobrescriba alguna posición de memoria delicada, haciendo que el programa vuelva a BASIC. Lo que en un PC llamaríamos un “cuelgue”.

Asteroids - Cuelgue

Todo esto tiene fácil solución. Lo más cómodo es verificar en “creaDisparo” que la posición charX, charY en la que nace el disparo está dentro de la zona permitida y, en caso contrario, retornar de la rutina sin llegar a crear el disparo (instrucción “rts”).

De este modo, en la nueva rutina “creaDisparo” aparecen estos controles que ya deberían resultar familiares:

Asteroids - Evitar borrados

Y con ellos, evitamos el problema de que se borren las letras o que la aplicación se cuelgue.

Obsérvese el método de desarrollo incremental. Cuando me puse a diseñar y programar los disparos de ninguna manera podía anticipar que esto ocurriría. Pero, una vez detectado el problema, se corrige con un pequeño “incremento” y listo.

Los cambios pueden verse en la versión 07 del proyecto. Yo con esta versión ya no he conseguido borrar letras ni tirar el ciberespacio 🙂 .


Código del proyecto: Asteroids07

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