jueves, 29 de junio de 2017

Como escribir un juego(¿cutre?) de Spectrum. (III) Diseñando el juego.

Otras entregas de esta serie:
Como escribir un juego(¿cutre?) de Spectrum. (I) Introducción.
Como escribir un juego(¿cutre?) de Spectrum. (II) Eligiendo nuestro framework.
Como escribir un juego(¿cutre?) de Spectrum. (IV) Implementación y resultados.
 
Bueno, por fin llega la chicha. Una parte importante, como elegir el framework, ha quedado atrás, y hay que recordar que el Spectrum solo tenía 48 kilobytes de RAM, por lo que tampoco se puede plantear una cosa muy complicada.

La idea para el juego nace de un dibujo tonto que hice hace algún tiempo:

La prueba definitiva de que me falta un tornillo
La idea es sencilla. El dibujo es el primer paso de la dinámica del juego: La producción de gas. El gas se eleva por la atmósfera donde puede ser detonado usando un láser. La detonación puede destruir naves alienígenas que vienen a invadir el planeta Tierra.

El cálculo de la trayectoria del gas puede hacerse de distintas formas. La idea es que sigan una trayectoria parabólica:



Se me olvidaba mencionar que prefiero trabajar en papel antes de empezar a escribir código. En todo caso lo que aparece en la página es un esquema de las coordenadas de pantalla y la trayectoria de las parábolas. Tenemos dos puntos de la misma: El punto de origen y el mas alejado, que trasladado a las coordenadas de pantalla serían (1,1) y (26,18). Como la forma canónica de una parábola es y=ax²+bx+c, nos hace falta una tercera ecuación para calcular los coeficientes a,b y c. Sabemos que en su punto mas bajo la primera derivada vale cero, de forma que y'=2ax+b=0 para x=26. Resolviendo obtenemos:




El resto es obtener las ecuaciones de movimiento con respecto al tiempo. Para una velocidad horizontal de 1, obtenemos una aceleración vertical de (aproximadamente) 0,0544, cuya mitad es 0,0272 (sy=1/2 * at²).  En el código se observa así:

    'incrementar movimiento
    LET t(j)=t(j)+1
    LET x=26 - vx(j)*t(j)
    LET y=18-0.0272*t(j)*t(j)


Donde Vx es un valor entre cero y uno. Las naves alienígenas se mueven en el eje transversal a la pantalla, es decir, que se irán acercando. El efecto se consigue incrementando el tamaño de las mismas.

El decorado de la pantalla lo dibujaremos fuera de la trayectoria del gas, el láser lo dibujamos con plot-draw, usando las teclas del 1 al 7 para apuntar a las distintas areas. Las explosiones las haré usando gráficos de bloques. Para leer el teclado emplearemos la orden IN,  de forma similiar a lo que se hacía para leer el joystick Kempston (Podríamos usar INKEY$, pero esto debería funcionar mejor). Los dibujos los haremos usando UDG's (User defined graphics) creados usando Melbourne Draw.



El resultado es bastante jugable:


Queda añadir una pantalla de presentación, sonido, instrucciones y el menú. En la próxima entrega habré pulido un poco (tampoco mucho) el código y completado el programa.

No hay comentarios:

Publicar un comentario