JUMPING JA-K para ZX-81

dancresp
Mensajes: 5251
Registrado: 13 Nov 2010 02:08
Agradecido : 90 veces
Agradecimiento recibido: 185 veces

JUMPING JA-K para ZX-81

Mensajepor dancresp » 11 Abr 2016 18:30

Screen_1.gif
Screen_1.gif (59.04 KiB) Visto 1099 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 Ja-K.rar
(494 Bytes) Descargado 44 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_Jack - Comparativo.gif


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
Imagen

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_4.gif
Screen_4.gif (59.05 KiB) Visto 1099 veces

Screen_2.gif
Screen_2.gif (59.85 KiB) Visto 1099 veces

Screen_3.gif
Screen_3.gif (59.89 KiB) Visto 1099 veces
Adjuntos
Jumping Ja-K.gif
Jumping Ja-K.gif (70.79 KiB) Visto 285 veces

Avatar de Usuario
ron
Mensajes: 18116
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1008 veces
Agradecimiento recibido: 1077 veces

Re: JUMPING JA-K para ZX-81

Mensajepor ron » 11 Abr 2016 19:09

Gracias Dani ! como te lo montas con el ZX81 !!!

RUNZX81DANI.png
RUNZX81DANI.png (26.6 KiB) Visto 1094 veces

Avatar de Usuario
ron
Mensajes: 18116
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1008 veces
Agradecimiento recibido: 1077 veces

Re: JUMPING JA-K para ZX-81

Mensajepor ron » 11 Abr 2016 19:31

¿ Por cierto os acordáis de los Sperry que salían en la peli de Woopy Goldberg, Jumpin Jack Flash ?

jumpin-jack-flash.jpg
jumpin-jack-flash.jpg (27.89 KiB) Visto 1086 veces

BlackHole
Mensajes: 905
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 5 veces
Agradecimiento recibido: 116 veces

Re: JUMPING JA-K para ZX-81

Mensajepor BlackHole » 12 Abr 2016 00:58

Yo flipo cómo unas comillas en video inverso se convierten por arte de nuestra infantil imaginación en un bicho con ojos.

Y los críos de hoy en día echando pestes por los foros cuando no tienen millones de polígonos a 140 FPS.

dancresp
Mensajes: 5251
Registrado: 13 Nov 2010 02:08
Agradecido : 90 veces
Agradecimiento recibido: 185 veces

Re: JUMPING JA-K para ZX-81

Mensajepor dancresp » 12 Abr 2016 09:38

ron escribió:¿ Por cierto os acordáis de los Sperry que salían en la peli de Woopy Goldberg, Jumpin Jack Flash ?

¿Los Sperry? ¿Y eso que es? -no

BlackHole escribió:Yo flipo cómo unas comillas en video inverso se convierten por arte de nuestra infantil imaginación en un
bicho con ojos.

Este es uno de los encantos del ZX-81.

Porque si le quieres dar forma a los personajes, parece que les apliques el zoom.
Que se lo pregunten a los del Mazogs...

Mazogs.gif
Mazogs.gif (97.34 KiB) Visto 1045 veces

Avatar de Usuario
Silicebit
Mensajes: 1417
Registrado: 16 May 2011 21:13
Ubicación: La buhardilla del silicio.
Agradecido : 53 veces
Agradecimiento recibido: 138 veces
Contactar:

Re: JUMPING JA-K para ZX-81

Mensajepor Silicebit » 12 Abr 2016 13:17

Hay también una versión para Oric llamada Mad Jump.

MadJump1.png
Mad Jump Oric.
MadJump1.png (19.63 KiB) Visto 1025 veces

MadJump2.png
Mad Jump Oric.
MadJump2.png (19.53 KiB) Visto 1025 veces
El 6809 es el Rolls-Royce de los 8bits, el 6502 es el Mercedes, y el Z80 el SEAT 850. Sorry, but... I think different. :-P -0r1c -m3s3x -t4nd1 -cbmja YouTube

Ben-kenobi
Mensajes: 513
Registrado: 01 May 2014 23:06
Agradecido : 9 veces
Agradecimiento recibido: 32 veces

Re: JUMPING JA-K para ZX-81

Mensajepor Ben-kenobi » 12 Abr 2016 15:11

Fastastico aporte ! Tengo que probarlo!!!

dancresp
Mensajes: 5251
Registrado: 13 Nov 2010 02:08
Agradecido : 90 veces
Agradecimiento recibido: 185 veces

Re: JUMPING JA-K para ZX-81

Mensajepor dancresp » 12 Abr 2016 15:15

Sin olvidar el "Macho Man" de Mattel Aquarius !!!
(Recuerdo haber jugado hace muuuuchos años)

macho_game.jpg

¿Alguien da más?

Avatar de Usuario
ron
Mensajes: 18116
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1008 veces
Agradecimiento recibido: 1077 veces

Re: JUMPING JA-K para ZX-81

Mensajepor ron » 12 Abr 2016 15:32

¿Los Sperry? ¿Y eso que es? -no


sperry-univac.jpeg
sperry-univac.jpeg (10.52 KiB) Visto 1009 veces


¿ ya te suena más ?..¿ va sonando ? -fisch

tranx
Mensajes: 150
Registrado: 10 Mar 2016 17:59
Ubicación: Retrofornia
Agradecimiento recibido: 14 veces

Re: JUMPING JA-K para ZX-81

Mensajepor tranx » 12 Abr 2016 15:35

ron escribió:
¿Los Sperry? ¿Y eso que es? -no


sperry-univac.jpeg


¿ ya te suena más ?..¿ va sonando ? -fisch


Mas datos sobre esto de Sperry por favor -grin

Avatar de Usuario
Chema
Mensajes: 1978
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1185 veces
Agradecimiento recibido: 391 veces
Contactar:

Re: JUMPING JA-K para ZX-81

Mensajepor Chema » 12 Abr 2016 15:59

Tío eso es optimizar en espacio. Yo alucino lo que haces en un par de docenas de líneas de Basic.

dancresp
Mensajes: 5251
Registrado: 13 Nov 2010 02:08
Agradecido : 90 veces
Agradecimiento recibido: 185 veces

Re: JUMPING JA-K para ZX-81

Mensajepor dancresp » 15 Abr 2016 20:44

Chema escribió:Tío eso es optimizar en espacio. Yo alucino lo que haces en un par de docenas de líneas de Basic.

Este es el encanto de este equipito !!!

ron escribió:¿ ya te suena más ?..¿ va sonando ? -fisch

Pues no, pero me he documentado y me pica la curiosidad... Cuenta, cuenta !!!

Imagen

tranx
Mensajes: 150
Registrado: 10 Mar 2016 17:59
Ubicación: Retrofornia
Agradecimiento recibido: 14 veces

Re: JUMPING JA-K para ZX-81

Mensajepor tranx » 15 Abr 2016 21:54

dancresp escribió:
Chema escribió:Tío eso es optimizar en espacio. Yo alucino lo que haces en un par de docenas de líneas de Basic.

Este es el encanto de este equipito !!!

ron escribió:¿ ya te suena más ?..¿ va sonando ? -fisch

Pues no, pero me he documentado y me pica la curiosidad... Cuenta, cuenta !!!

Imagen


Univac...

Justamente ayer estaba viendo una pelicula de los 60 en la que salia lo que parecia una oficina de esta empresa, llena de maquinas de tarjetas y un cartel grande que ponia UNIVAC


Volver a “Lenguajes de Programación y herramientas Dev”

¿Quién está conectado?

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