Asteroids es un clásico de los arcades para recreativas de los años 80. Su planteamiento es muy sencillo, el jugador controla una nave que puede moverse libremente en un campo de asteroides, disparando hasta destruirlos para conseguir puntos. Además debe evitar chocar contra ellos. Hoy hemos querido traeros nuestra particular versión de este juego Asteroids NXT programada por completo en NXT-G.
El juego fue concebido por Lyle Rains, programado y diseñado por Ed Logg. Para su implementación se utilizó el hardware desarrollado por Howard Delman (la pantalla vectorial o generadora de vectores). Para jugar, se hacía uso de un joystick y un botón de disparo.
Su lanzamiento supuso un tremendo éxito en los Estados Unidos, tanto que se convirtió en el juego más vendido en toda la historia de Atari.
Como curiosidad sobre este juego, el record establecido en 1982 por Scott Safran de 15 años, tardaría 27 años en superarse. En concreto, hubo que esperar hasta el 3 de abril de 2010. El jugador en cuestión fue John McAllister, que inició una partida de 3 días de duración tras la cual lograría batir dicho record (41,336,440 puntos) con una puntuación de 41.338.740, es decir, un 0′006% por encima de la anterior puntuación.
El sistema que utilizó consistía en conseguir suficientes vidas extras y, en ese momento, aprovechar para comer un bocadillo o algo rápido mientras vigilaba no perder ninguna de esas vidas. De hecho, una anécdota al respecto fue que una vez le falló el cálculo y cuando volvió del cuarto de baño sólo le quedaban 2 vidas, pudiendo continuar con la partida por poco.
Este es el aspecto del juego en la versión de 1982
Nuestra versión está algo simplificada, aunque no descartamos ampliarla en un futuro. En este caso nuestro objetivo será esquivar los asteroides, obteniendo 10 puntos por cada uno que evitemos. Si el asteroide impacta contra nosotros perderemos 1 vida, hasta quedarnos sin las 3 disponibles, lo que supondrá el final de la partida.
Este es el programa completo
Como se puede comprobar, y es habitual en los programas largos, lo hemos dividido en diferentes bloques personalizados.
- Bloque Presentación:
Muestra en pantalla el nombre del programa, lo que serían los créditos iniciales.
- Bloque Var_Ini
Inicializa las variables principales del juego, que se usan en el resto de los bloques.
- Bloque Ship
Este bloque controla los movimientos de la nave por la pantalla, en esta versión sólo puede desplazarse hacia los lados, no en vertical. Para ello, utilizamos la variable Counter inicializada a 50, a la cual restamos o sumamos en función de si el usuario nos presiona la flecha izquierda o derecha respectivamente.
A continuación comprobamos si el valor de Counter está dentro de los límites de la pantalla, en caso contrario, los corregimos.
Este bloque controla también si la nave ha chocado con el asteroide, por medio del bloque IsOver, del que hablaremos un poco más abajo.
- Bloque Ast
Controla los movimientos del asteroide por la pantalla. Los asteroides bajan (disminuye el valor de Y) por la pantalla en línea recta, Y-1 cada vez hasta llegar al límite inferior que viene marcado por la recta del marcador (Y=10).
La posición X inicial viene dada por un bloque aleatoria dentro del intervalo 0 – 99, mientras que la Y inicial es 64 (para que aparezca desde arriba).Este bloque controla también la puntuación, ya que cada vez que llegamos el final de la pantalla, si no hemos chocado con la nave, sumamos 10 a la puntuación actual.
- Bloque IsOver
Este bloque comprueba si el asteroide y la nave ocupan el mismo espacio en pantalla, es decir, si nos hemos chocado. Si es así restamos 1 a las vidas disponibles, mostrando el dato en pantalla.
Si nos quedan 0 vidas, indicamos el final del juego GameOver=true, lo que interrumpe la ejecución de los bloques Ast y Ship, devolviendo el control al programa principal.
Hay que destacar 2 variables creadas adrede para interactuar con otros bloques del programa, se trata de :
- Variable Reset (tipo: lógica):Indica al bloque Ship que debe situar la nave en posición inicial, ya que se ha perdido una vida.
- Variable Pause (tipo: lógica):Al cambiar su estado a True, indica al bloque Ast que debe interrumpir los movimientos del asterisco por la pantalla, hasta que vuelve a cambiar su estado a False. Además, reinicia la posición del asterisco en pantalla.
- Bloque End
Muestra el final del juego y espera que presionemos el botón Intro.
Podéis descargaros el código desde este enlace:
Se trata de un fichero zip que contiene un archivo con extensión .rbtx, creado con la herramienta “Pack and Go” incluida en el propio software NXT-G. Esta herramienta nos permite crear un paquete que contiene toda la información necesaria para abrir ese programa desde cualquier otro ordenador: los bloques personalizados, las imágenes y los sonidos.
Para los que no sepáis cómo hacerlo, os dejo esta captura de pantalla
En breve colgaremos un vídeo para que lo veáis funcionando.
Esperamos que os haya gustado, si alguien se anima a continuarlo y mejorarlo, estaremos encantados de comentarlo en el foro.
Información adicional:
- Pantalla vectorial: Un monitor o pantalla vectorial es un tipo de CRT (Tubo de Rayos Catódicos, del inglés Cathode Ray Tube), similar al osciloscopio, pero que presente información en pantalla usando deflexión magnética (en lugar de electrostática). Aquí el haz trazaba líneas entre puntos arbitrarios, repitiendo el movimiento lo más rápidamente posible.
Las pantallas vectoriales se emplearon en la mayoría de los monitores de ordenador desde finales de los años 70 hasta mediados de los 80.
La visualización vectorial para ordenador no sufre de aliasing ni pixelización, pero está limitada ya que sólo puede definir los contornos de las formas, y una escasa cantidad de texto, preferiblemente de un tamaño grande. Esto es así porque la velocidad de visualización es inversamente proporcional al número de vectores que deben dibujarse y “rellenar” una zona utilizando muchos vectores es imposible, así como escribir una gran cantidad de texto.
Algunos monitores vectoriales eran capaces de mostrar varios colores, a menudo utilizando dos o tres capas de fósforo. En estos monitores, controlando la fuerza del haz de electrones, se controla la capa alcanzada y en consecuencia el color mostrado, que generalmente era verde, naranja o rojo. - Atari Inc.: Fundada en los Estados Unidos en 1972 por Nolan Bushnell y Ted Dabney, Atari puede ser considerada la fundadora de la industria del videojuego, gracias al PONG. La versión casera de PONG, que se conectaba a una televisión, fue una de las primeras consolas de videojuegos. También ha estado presente desde los primeros días de las máquinas de arcade, Atari fue creador de las consolas caseras, como la Atari 2600 (llamada originalmente VCS “Video Computer System” — Sistema Informático de Vídeo); produjo una serie de computadores de 8 bits (Atari 400/800 y la serie XL/XE); tomó parte en el mercado de los 16 bits con el Atari ST; creó la consola Atari Jaguar de 64 bits, revolucionaria para su época; y lanzó una cónsola portátil, la Atari Lynx.