Galaxy Wars para ZX-Spectrum

Foro dedicado a la programación en todo tipo de sistemas clásicos.
dancresp
Amiga 1200
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

Mensajepor dancresp » 27 Jun 2013, 13:28

doble_pantalla.gif
doble_pantalla.gif (26.87 KiB) Visto 8587 veces


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":
Galaxy Wars.rar
(4.44 KiB) Descargado 349 veces


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
GalaxyWars_Listado.jpg
GalaxyWars_Listado.jpg (219.2 KiB) Visto 8587 veces


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.

DSC_1195.JPG
DSC_1195.JPG (92.51 KiB) Visto 8587 veces

DSC_1198.JPG
DSC_1198.JPG (83.5 KiB) Visto 8587 veces

DSC_1201.JPG
DSC_1201.JPG (81.15 KiB) Visto 8587 veces

DSC_1203.JPG
DSC_1203.JPG (91.92 KiB) Visto 8587 veces

DSC_1208.JPG
DSC_1208.JPG (64.74 KiB) Visto 8587 veces

ScreenShot.jpg
ScreenShot.jpg (50.93 KiB) Visto 8587 veces
Ú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.

Avatar de Usuario
Jaimen
Amiga 1200
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

Mensajepor Jaimen » 27 Jun 2013, 14:16

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... :D
Mi galeria de fotos en 500px.com

Avatar de Usuario
na_th_an
Amiga 1200
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

Mensajepor na_th_an » 27 Jun 2013, 14:19

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.

Avatar de Usuario
Ivanzx
Amiga 1200
Amiga 1200
Mensajes: 1620
Registrado: 05 Abr 2007, 19:39
Gracias recibidas: 22 veces
Contactar:

Re: Galaxy Wars para ZX-Spectrum

Mensajepor Ivanzx » 27 Jun 2013, 14:30

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?

dancresp
Amiga 1200
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

Mensajepor dancresp » 27 Jun 2013, 14:49

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.

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.

Avatar de Usuario
alboran70
MSX Turbo R
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

Mensajepor alboran70 » 27 Jun 2013, 22:05

qué envidia cuando veo a gente hacer estas cosas como si pareciera sumamente fácil :popcorn:
=D> =D>

Avatar de Usuario
Hark0
Amiga 1200
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

Mensajepor Hark0 » 28 Jun 2013, 07:28

Bravo por el post!

Y curioso lo que comentas de la velocidad en los distintos modos para los 128 k... ;)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
Lex Sparrow
Amiga 2500
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

Mensajepor Lex Sparrow » 28 Jun 2013, 12:03

MUchas gracias por compartirlo. Es curioso que de un listado tan relativamente pequeño salga algo jugable y vistoso.
Alejandro - Lex Sparrow | M |

Avatar de Usuario
Hark0
Amiga 1200
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

Mensajepor Hark0 » 28 Jun 2013, 12:08

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
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
NeilParsons
Amiga 1200
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

Re: Galaxy Wars para ZX-Spectrum

Mensajepor NeilParsons » 28 Jun 2013, 13:42

Gracias dancresp. Me lo descargo y lo pruebo. :)


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados