Galaxy Wars para ZX-Spectrum
-
- Amiga 1200
- Mensajes: 1393
- Registrado: 23 Dic 2008, 17:53
- Sistema Favorito: MSX
- primer_sistema: ZX81
- Primera consola: Atari 2600
- Gracias dadas: 3 veces
- Gracias recibidas: 20 veces
Galaxy Wars para ZX-Spectrum
EL JUEGO
Este videojuego arcade fue desarrollado por Universal y manufacturado por Taito en 1979.
El objetivo del juego consiste en destruir la flotilla de invasores que hay en la zona superior de la pantalla. Para ello controlamos una plataforma con un misil. Al disparar el misil debe esquivar los asteroides y los disparos enemigos e impactar en un invasor.
Controles:
Pulsa Z o X para mover la plataforma y el misil a izquierda o derecha.
Pulsa RETURN para disparar el misil.
Descargar el juego en formato ".WAV":
Galaxy Wars - Spectrum
Descargar el juego en formato ".TAP":
BLOQUES
Se ha dividido el listado en 10 bloques:
- Declaración de las matrices. Llamada a rutinas principales.
- Controlar nuestra plataforma o misil.
- Control de los invasores y asteroides.
- Control de los disparos enemigos.
- Detección de impacto del misil. Toca asteroide, invasor o disparo enemigo.
- Perder una vida.
- Pantalla de Presentación.
- Inicio de la partida.
- Rutinas varias.
- DATA con los gráficos del juego.
COMO FUNCIONA
Todo el programa ocupa 82 líneas.
A continuación indico el principio de las distintas partes del programa:
10 - Definimos las matrices del juego.
30 – Inicializamos el récord (R) y vamos a la rutina que redefine los gráficos.
50 – Vamos a la presentación del juego.
100 - Movemos la plataforma o misil en la dirección indicada.
130 - Si se ha disparado el misil (T=2) salta a 160.
140 – Si se pulsa RETURN disparamos el misil y borramos la plataforma.
160 – Borramos el misil y modificamos la posición vertical (Y).
170 – Si la punta del misil toca algo saltamos a 400.
180 – Ponemos el misil en la nueva posición.
200 – Movemos una de las 6 filas de enemigo o asteroides en la dirección correspondiente. (B=1: Derecha, B=-1:Izquierda).
220 – Imprimimos la fila del enemigo.
250 – Miramos si esta activa una de las 6 bombas enemigas.
260 – Si no lo está, miramos si en una posición de la pantalla hay un invasor para activar su disparo.
270 – Si el disparo toca la plataforma o misil salta a 500.
400 – Si la posición Y es mayor de 5 es que hemos impactado con un asteroide o disparo y salta a 500.
410 – Calculamos la posición del invasor destruido.
420 – Ponemos la explosión, suena un sonido y calculamos los puntos (50, 100 o 150).
430 – Borramos el invasor de la fila y restamos un invasor a los restantes (Q).
440 – Mostramos los puntos y hacemos una pausa (5200) y actualizamos el marcador.
500 – Ponemos una explosión en la posición del misil.
530 – Actualizamos el marcador de vidas.
550 – Si no hay más vidas finaliza la partida.
2000 – Pantalla de presentación del juego.
2050 – Espera que pulsemos una tecla.
2500 – Montamos las tiras de los invasores.
2510 – Rutina que genera aleatoriamente las tiras de los asteroides. Más llenas en niveles avanzados.
2570 – Inicialización de las variables principales de la partida.
5000 – Inicio de rutina para redefinir el juego de caracteres.
5020 – Cargamos la posición vertical de las tiras y su color.
5100 – Rutina de borrado de pantalla.
5200 – Rutina de PAUSA. Valor en (J).
5300 – Borra las bombas de los invasores.
9000 – Línea DATA con los gráficos del juego.
EL LISTADO
APUNTES FINALES
Este juego es una adaptación de la versión programada para el COMMODORE-16, casi línea a línea.
Descartes respecto al original de TAITO:
- Esta versión es un poco más ancha y bastante menos alta ya que en el juego original la pantalla es vertical.
- Hay alguna fila de asteroides menos, debido al tamaño vertical.
- Durante el ascenso del misil podemos controlarlo horizontalmente, pero no controlamos la velocidad.
- Los invasores no aceleran cuando solo quedan un par de ellos.
- Los asteroides no descienden al llegar a los extremos.
- Las puntuaciones están limitas a 50, 100 y 150 puntos.
- No hay animaciones en los enemigos.
Hacía unos 25 años que no programaba nada en BASIC para el SPECTRUM y he aprovechado este juego para reprogramarlo en mi ZX-SPECTRUM 128, que casi no había usado.
La verdad es que la experiencia ha sido bastante decepcionante:
- El teclado deja bastante que desear, ya sea por la forma de las teclas, la fiabilidad al pulsarlo o que al escribir rápido muchas letras “se quedan por el camino”.
- La edición en modo 24 filas x 32 columnas se queda pequeña a día de hoy.
- El SPECTRUM 128 permite introducir el programa en modo letra por letra o un comando por tecla. He optado por el primer método. El editor es bastante cómodo y separa las instrucciones en distintas líneas cuando detecta que usas los dos puntos “:”. Esto facilita la lectura del programa, pero al moverte por el listado puede ser lento al acceder a líneas que están fuera de la pantalla.
- Programar en verano con este equipo es poner a prueba el calor que puede soportar tu mano derecha, porque es increíble lo que se llega a calentar su aparatoso disipador de calor externo.
- Durante la programación el teclado numérico ayuda a la hora de moverse por las líneas del listado. Puedes ir al final de una línea pulsando una tecla.
Como el programa no tiene muchos gráficos no he necesitado crear ninguna rutina que me permita redefinir más de los 21 gráficos que permite por defecto.
La versión del COMMODORE-16 usa 25 filas (inferior a la versión original), pero aquí solo se pueden usar 22 ya que las dos últimas son un engorro usar desde el BASIC. Esto le da un aspecto todavía más achatado respecto a la versión original.
El control de los enemigos es muy simple. Hay 6 tiras con los enemigos en su posición correspondiente. Las filas pares rotan a la izquierda y las impares a la derecha. Con (n TO m) muevo un carácter de un extremo al otro e imprimo la fila con el color correspondiente.
El bloque principal del programa solo ocupa 21 líneas. En cada pasada muevo una fila de enemigos y controlo un disparo enemigo. El contador es común en los dos casos (A).
Para ganar velocidad he prescindido de las animaciones de los enemigos. He optado por usar los gráficos de los enemigos intercalados.
En las colisiones solo reviso si la cabecera del misil toca algo, pero no la parte baja. Respecto a las bombas enemigas solo la activa revisa si toca algo. Esto hace que el juego sea más rápido pero se puede dar el caso que toquemos algo y no nos pase nada. Como el proceso es rápido, tiene su riesgo... y mejor no jugársela.
Para detectar las colisiones uso los comandos SCREEN$ y ATTR. El problema de SCREEN$ es que no detecta un UDG concreto y simplemente devuelve un valor NULL (CODE 0). Entonces uso un ATTR (=4) para verificar el color y darla por buena.
Este equipo, en modo 128K activa las mayúsculas por defecto, pero en modo 48K se activan las minúsculas. Esto da problemas con el INKEY$.
El enigma de la velocidad del BASIC
Durante la programación pude comprobar que este BASIC es más lento de lo que recordaba. Esto me obligó a hacer que los enemigos no dispararan porque el juego no tiraba. Me decepcionó bastante porque quedaba una versión más pobre y fácil.
Conecté la ZX-PRINTER para poder listar el programa y me encontré que no funciona bien en este equipo, e incluso afectaba a la señal de video.
Entonces conecté un ZX-SPECTRUM+ 48K para listar el programa desde él y me encontré que en este equipo funcionaba más rápido. Volví a conectar el 128 y seguía funcionando más lento pero al teclear “SPECTRUM” y entrar en el modo 48K el programa funcionaba más rápido. ¿Hay dos intérpretes de BASIC distintos en el SPECTRUM 128?
En resumen, para mover las 6 filas de enemigos 20 veces, sin disparos enemigos, el COMMODORE-16 necesita unos 13 segundos, el SPECTRUM 128 necesita unos 18 segundos y el SPECTRUM 48 unos 15 segundos. Parece poco, pero el usar el modo 48K me ha permitido hacer que los enemigos disparen.
Como he dicho antes, el programa ha sido listado con la ayuda de una ZX-PRINTER conectada a un ZX-SPECTRUM+ y dejo un agradable olor a churrasco al finalizar.
Pues nada más, solo me queda esperar que os guste.
Os invito a probarlo.
Última edición por dancresp el 03 Ene 2014, 13:35, editado 1 vez en total.
Buscando la IP de la W.O.P.R.
- Jaimen
- Amiga 1200
- Mensajes: 1656
- Registrado: 17 Mar 2009, 13:39
- Sistema Favorito: Amstrad CPC
- primer_sistema: Amstrad CPC
- Ubicación: Madrid
- Gracias dadas: 159 veces
- Gracias recibidas: 19 veces
Re: Galaxy Wars para ZX-Spectrum
Fenomenal trabajo, como siempre, muchas gracias por compartirlo...
Lástima que no tenga aquí en Madrid mi +2 gris, ya lo probaré más adelante...
Lástima que no tenga aquí en Madrid mi +2 gris, ya lo probaré más adelante...

Mi galeria de fotos en 500px.com
- na_th_an
- Amiga 1200
- Mensajes: 1273
- Registrado: 10 Oct 2012, 11:17
- Sistema Favorito: (Otro)
- primer_sistema: Spectrum +2
- consola_favorita: Sony PlayStation 1
- Primera consola: Sega Master System
- Gracias dadas: 18 veces
- Gracias recibidas: 15 veces
Re: Galaxy Wars para ZX-Spectrum
dancresp escribió:Este equipo, en modo 128K activa las mayúsculas por defecto, pero en modo 48K se activan las minúsculas. Esto da problemas con el INKEY$.
Hay dos soluciones:
1.- Forzar lo que necesites. POKE 23658,0 fuerza minúsculas, POKE 23658,8 fuerza mayúsculas.
2.- Leer el teclado directamente usando los puertos de E/S. Es más indicado para juegos porque así puedes detectar pulsaciones simultaneas y, además, es más rápido. Léete esto para saber cómo hacerlo.
¿Hay dos intérpretes de BASIC distintos en el SPECTRUM 128?
En realidad no, pero supongo que la ISR de BASIC necesita hacer más cosas en modo 128. ¿Es un 128 español de primera generación? En los +2 y los +2A, por ejemplo, no se notaba una velocidad inferior en modo 128.
- Ivanzx
- Amiga 1200
- Mensajes: 1620
- Registrado: 05 Abr 2007, 19:39
- Gracias recibidas: 22 veces
- Contactar:
Re: Galaxy Wars para ZX-Spectrum
Mola
, la verdad que viendo el listado BASIC tan comprimido y sin haber utilizado codigo maquina tiene su merito. Luego lo probare cuando no este en el trabajo
Te importaria si se sube a WoS?


Te importaria si se sube a WoS?
-
- Amiga 1200
- Mensajes: 1393
- Registrado: 23 Dic 2008, 17:53
- Sistema Favorito: MSX
- primer_sistema: ZX81
- Primera consola: Atari 2600
- Gracias dadas: 3 veces
- Gracias recibidas: 20 veces
Re: Galaxy Wars para ZX-Spectrum
na_th_an, gracias por la información.
La verdad es que siempre he sido de programar el SPECTRUM en ensamblador, pero está bien saber como hacer ciertas cosillas desde el BASIC.
Tu mismo. Gracias.
La verdad es que siempre he sido de programar el SPECTRUM en ensamblador, pero está bien saber como hacer ciertas cosillas desde el BASIC.
Ivanzx escribió:Mola, la verdad que viendo el listado BASIC tan comprimido y sin haber utilizado codigo maquina tiene su merito. Luego lo probare cuando no este en el trabajo
![]()
Te importaria si se sube a WoS?
Tu mismo. Gracias.
Buscando la IP de la W.O.P.R.
- alboran70
- MSX Turbo R
- Mensajes: 342
- Registrado: 08 Jun 2009, 19:47
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Videopac
- Primera consola: Sony PlayStation 2
- Ubicación: Castilleja de la Cuesta - Sevilla
- Gracias dadas: 26 veces
- Gracias recibidas: 44 veces
Re: Galaxy Wars para ZX-Spectrum
qué envidia cuando veo a gente hacer estas cosas como si pareciera sumamente fácil




- Hark0
- Amiga 1200
- Mensajes: 1695
- Registrado: 11 Jul 2012, 23:44
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: (Otro)
- Primera consola: (Otro)
- Ubicación: Cornellà de Llobregat - Barcelona
- Contactar:
Re: Galaxy Wars para ZX-Spectrum
Bravo por el post!
Y curioso lo que comentas de la velocidad en los distintos modos para los 128 k...
Y curioso lo que comentas de la velocidad en los distintos modos para los 128 k...

- Lex Sparrow
- Amiga 2500
- Mensajes: 2776
- Registrado: 28 Dic 2005, 12:26
- Sistema Favorito: Amstrad CPC
- primer_sistema: Amstrad CPC
- consola_favorita: Nintendo NES/Clónica
- Primera consola: TV Games/Pong Clone
- Gracias dadas: 187 veces
- Gracias recibidas: 45 veces
- Contactar:
Re: Galaxy Wars para ZX-Spectrum
MUchas gracias por compartirlo. Es curioso que de un listado tan relativamente pequeño salga algo jugable y vistoso.
Alejandro - Lex Sparrow | M |
- Hark0
- Amiga 1200
- Mensajes: 1695
- Registrado: 11 Jul 2012, 23:44
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: (Otro)
- Primera consola: (Otro)
- Ubicación: Cornellà de Llobregat - Barcelona
- Contactar:
Re: Galaxy Wars para ZX-Spectrum
LexSparrow escribió:MUchas gracias por compartirlo. Es curioso que de un listado tan relativamente pequeño salga algo jugable y vistoso.
Además de verdad.... ;D
- NeilParsons
- Amiga 1200
- Mensajes: 1281
- Registrado: 02 Ago 2007, 16:47
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: C64
- consola_favorita: Sony PlayStation 1
- Ubicación: Digamos que del sur, en frente del peñón.
- Gracias dadas: 3 veces
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados