Jumping Ja-K para ZX-81

Foro dedicado a la programación en todo tipo de sistemas clásicos.
dancresp
Amiga 1200
Amiga 1200
Mensajes: 1379
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias recibidas: 14 veces

Jumping Ja-K para ZX-81

Mensajepor dancresp » 11 Abr 2016, 23:20

Screen_1.gif
Screen_1.gif (5.22 KiB) Visto 1093 veces


EL JUEGO
El objetivo del juego consiste en subir por las plataformas a través de los agujeros que hay.
Todos los agujeros se desplazan hacia la izquierda en un orden aleatorio, y el personaje salta siempre hacia la derecha.

Cada plataforma que subamos nos proporciona 1 punto, y al llegar a la zona superior recibiremos 10 puntos extras.

Perderemos nuestra única vida si chocamos con una plataforma superior o caemos por el agujero de la plataforma donde estamos.

Movimiento:
El personaje se desplaza horizontalmente con las teclas "1" y "3", y salta con la tecla "9".

Descargar juego en formato ".P":
Jumping_Jack - Comparativo.gif
Jumping_Jack - Comparativo.gif (13.83 KiB) Visto 1093 veces


La versión original de este juego la programó la firma Imagine Software en el año 1983, y fue adaptada posteriormente a múltiples plataformas.

Jumping Ja-K.rar
(496 Bytes) Descargado 35 veces


BLOQUES
He dividido el listado en 3 bloques:
- Inicializar las variables y mostrar la zona de juego.
- Mover los agujeros.
- Mover al personaje.


COMO FUNCIONA
A continuación detallo el funcionamiento de las 28 líneas del programa.

Se utilizan las siguientes variables:
X - Posición horizontal del personaje.
Y – Posición vertical del personaje.
U – Variable numérica que contiene el valor 1.
P – Puntero a la zona de memoria del buffer de la impresora.
F - Variable para bucles y otras funciones.

2 - Guardamos en la variable "P" el valor de memoria que apunta al buffer de la impresora.
4 - Definimos la variable “U” con el valor 1.
10 - Inicio del bucle que pone las plataformas en la pantalla.
11 - Poner la plataforma en la posición correcta.
12 - Guardar en el buffer de impresora la posición del agujero en cada plataforma.
13 - Final del bucle.
15 - Inicializamos la posición vertical del personaje en "Y".
16 - Inicializamos la posición horizontal del personaje en "X".
17 - Si los puntos son diferentes de 0 se incrementan en 10. Usado al llegar a la zona superior de la pantalla.
18 - Mostramos el personaje en su posición de la pantalla.
20 - Se guarda en "F" la posición del puntero en memoria del agujero de la plataforma a mover.
21 - Modificamos la posición del agujero.
22 - Mostramos la nueva posición del agujero.
23 - Si el agujero a llegado al límite izquierdo se posiciona en la derecha.
25 - Se calcula si el personaje está encima de un agujero.
26 - Guardamos en "F" el código de la tecla pulsada.
27 - Si no se ha pulsado ninguna tecla se salta a la línea 20.
30 - Se borra el personaje de la pantalla.
32 - Se salta a la línea correspondiente según la tecla pulsada.
33 - Si el personaje ha llegado a la plataforma superior salta a la línea 15, sino salta a la línea 18.
58 - Subrutina que mueve el personaje a la izquierda.
59 - Fin de la subrutina.
62 - Subrutina que mueve el personaje a la derecha.
63 - Fin de la subrutina.
74 - Si saltamos y el agujero no está encima, se muestran los puntos y fin de la partida.
75 - Se cambia de posición vertical al personaje.
76 - Se incrementa el contador de puntos en 1.
77 - Saltamos a la subrutina de la línea 62, que mueve el personaje a la derecha.


EL PROGRAMA
Jumping Ja-K.gif
Jumping Ja-K.gif (10 KiB) Visto 1093 veces


APUNTES FINALES
Después de programar varios juegos tipo "puzzle" y otros programas tipo "programación", me he atrevido, unos 28 años después, con un juego de acción.

En una temporada en la que mi tiempo retro escasea, le estuve dando a la cabeza un juego que pudiera tirar bien, y este es el resultado: una versión 1K de un clásico del ZX-Spectrum.
Para aprovechar mi escaso tiempo he vuelto a usar el emulador “EightyOne” durante los viajes al trabajo en tren, y una vez más, la mayor parte del juego estaba hecha en menos de una hora, pero acabarlo de encajar sacrificando algunas cosas me ha llevado unas tres horas más.

Para conseguir una velocidad más que decente he aprovechado para poner en práctica varias técnicas que me han sido muy útiles.

1. Buffer de impresora como matriz numérica
Inicialmente la posición de los 7 agujeros se almacenaban en una matriz numérica, pero entre la definición y el espacio en memoria me ocupaba unos 70 bytes. Por otro lado, en distintas zonas del programa se hacía referencia a la matriz, y entre el nombre y el índice más los paréntesis ocupaban demasiado espacio.

En un equipo con 1024 bytes en el que en BASIC solo puedes disponer de unos 600 bytes, suponen un lujo que al final no me he podido permitir ya que me obligaban a reducir el ancho de las plataformas y el número de ellas. Por este motivo, he decidido usar 8 bytes de los 33 bytes del buffer de impresora.

Este método es ligeramente más lento que el acceso a las matrices, aunque no lo parezca, pero el resultado es totalmente satisfactorio, y encima el código BASIC para manejarlo se ha reducido considerablemente.

De esta forma, el primer byte se ha usado para almacenar la puntuación y los 7 siguientes almacenan la posición de cada uno de los agujeros.

A destacar que si alguien supera los 255 puntos le dará la vuelta al marcador !!!


2. Simulación de ON INKEY$ GOTO
Teniendo en cuenta que solo podemos pulsar una tecla a la vez, y para evitar poner 3 "IF INKEY$=" consecutivos cuando posiblemente no se está pulsando ninguna tecla, he optado por poner un trozo de código en las líneas 26, 27 y 32 que almacena en la variable "F" el código de la tecla pulsada. Si no se pulsa ninguna tecla sigue con la ejecución del programa, y si se pulsa una tecla salta a una subrutina almacenada en la línea con número del doble del código de la tecla pulsada.

Así, la tecla "1" tiene un código "29", y el código BASIC correspondiente está en la línea 58.

Esto nos limita a un par de líneas de código BASIC por tecla, pero cambiando el factor de multiplicación de la línea 32 podemos hacerlo más grande.

Y tal y como está el programa ahora mismo, pulsando "A" saltaremos a la mitad de la subrutina de salto. Justo a la línea donde se incrementa la puntuación... ideal para los tramposos.


Y para terminar
Debido a temas de memoria, la zona de juego es más estrecha que en el juego original, pero como los gráficos también son más pequeños... la proporción es más o menos igual. De todas formas, teniendo en cuenta que es un juego para un sistema con un 1K, la zona de juego es bastante grande de lo habitual ya que ocupa 16x16 caracteres, lo que ocupa la nada despreciable cantidad de 281 bytes. El código BASIC se ha quedado en algo más de 400 bytes.

En este punto he tenido que ajustar bastante el código BASIC porque en un principio la memoria de video ocupa la mitad de su supuesto tamaño máximo, pero a medida que el personaje asciende por las plataformas la memoria de video se expande en función de su posición horizontal. Así que para evitar problemas, he verificado que si el personaje siempre subiera por el lado más a la derecha, el programa no dará el clásico error 4.

Y como se puede comprobar, los agujeros siempre se desplazan hacia la izquierda, el personaje siempre salta hacia la derecha y no aparecen enemigos en las plataformas.

Con todo, el juego es entretenido, y difícil ya que la aleatoriedad en el agujero a mover hace que un agujero pueda realizar varios movimientos consecutivos. Así que hay que ser bastante rápido al realizar el salto, y hay que tener en cuenta los agujeros superiores para no quedar atrapado.


Os invito a probarlo…


Screen_3.gif
Screen_3.gif (5.34 KiB) Visto 1093 veces
Screen_2.gif
Screen_2.gif (5.46 KiB) Visto 1093 veces
Screen_4.gif
Screen_4.gif (5.23 KiB) Visto 1093 veces
Buscando la IP de la W.O.P.R.

Avatar de Usuario
mon
Amiga 1200
Amiga 1200
Mensajes: 1318
Registrado: 21 Jun 2006, 17:01
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo SNES
Gracias dadas: 1 vez
Contactar:

Re: Jumping Ja-K para ZX-81

Mensajepor mon » 12 Abr 2016, 09:24

¡Qué recuerdos!
El primer juego que compré para mi spectrum 16k.
"Jumping jack is quick and bold,
with skill his story will unfold".

Tiene muy buena pinta.
:-)

Por cierto, era un juego muy adictivo.

dancresp
Amiga 1200
Amiga 1200
Mensajes: 1379
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias recibidas: 14 veces

Re: Jumping Ja-K para ZX-81

Mensajepor dancresp » 12 Abr 2016, 11:26

mon escribió:¡Qué recuerdos!
El primer juego que compré para mi spectrum 16k.

Por cierto, era un juego muy adictivo.

Hombre, todo un clásico de los 16K.
Anda que no lo jugué yo también !!!

:gamers:

Y si, incluso con esta versión es fácil picarse, porque es chunguilla... ](*,)
Buscando la IP de la W.O.P.R.

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

Re: Jumping Ja-K para ZX-81

Mensajepor Ivanzx » 24 Sep 2016, 21:00

Muy buenas!

Dancresp, podrías colgar de nuevo el juego? Me lo bajo pero al descomprimir da un error bastante raro. Si lo hicieras me harías un gran favor, hay ganas de probarlo :)

Saludos y gracias!

dancresp
Amiga 1200
Amiga 1200
Mensajes: 1379
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias recibidas: 14 veces

Re: Jumping Ja-K para ZX-81

Mensajepor dancresp » 27 Sep 2016, 13:13

Ivanzx escribió:Dancresp, podrías colgar de nuevo el juego? Me lo bajo pero al descomprimir da un error bastante raro. Si lo hicieras me harías un gran favor, hay ganas de probarlo :)

Como ya he dicho en otras ocasiones, todos mis contenidos en ZdP se han corrompido, por lo visto debido a una mala descarga por FTP.

Las últimas veces que he intentado subir alguna imagen, no lo he conseguido.

Así que, como he dicho en otras ocasiones, busca estos posts en Retrowiki, ya que allí están en perfecto estado.
Buscando la IP de la W.O.P.R.

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

Re: Jumping Ja-K para ZX-81

Mensajepor Ivanzx » 27 Sep 2016, 14:44

dancresp escribió:
Ivanzx escribió:Dancresp, podrías colgar de nuevo el juego? Me lo bajo pero al descomprimir da un error bastante raro. Si lo hicieras me harías un gran favor, hay ganas de probarlo :)

Como ya he dicho en otras ocasiones, todos mis contenidos en ZdP se han corrompido, por lo visto debido a una mala descarga por FTP.

Las últimas veces que he intentado subir alguna imagen, no lo he conseguido.

Así que, como he dicho en otras ocasiones, busca estos posts en Retrowiki, ya que allí están en perfecto estado.


Muy buenas, dancresp

La verdad no había visto el problema que mencionas, no había leído nada al respecto, perdona por volver a preguntar :)
Me pasaré entonces por Retrowiki a ver si puedo encontrarlos allí ;)
Por cierto, te mando un Mensaje Privado por unas cosillas pronto.

Saludos!

dancresp
Amiga 1200
Amiga 1200
Mensajes: 1379
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias recibidas: 14 veces

Re: Jumping Ja-K para ZX-81

Mensajepor dancresp » 27 Sep 2016, 16:36

Ivanzx escribió:La verdad no había visto el problema que mencionas, no había leído nada al respecto, perdona por volver a preguntar :)
Por cierto, te mando un Mensaje Privado por unas cosillas pronto.

Nada hombre, faltaría.

Y espero el mensaje...
Buscando la IP de la W.O.P.R.


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado