REORDER para ZX-80

dancresp
Mensajes: 5641
Registrado: 13 Nov 2010 02:08
Agradecido : 320 veces
Agradecimiento recibido: 450 veces

REORDER para ZX-80

Mensajepor dancresp » 26 Jun 2020 00:52

Reorder_Screen.png
Reorder_Screen.png (2.25 KiB) Visto 174 veces


EL JUEGO
La mecánica de este juego es muy simple:
Se muestra un número de 9 cifras distintas y debemos ordenarlo mediante la rotación de cuatro de sus cifras hasta que queden ordenadas de menor a mayor valor.

Hay 4 tipos de movimientos que actúan de la siguiente forma:

Grafico.jpg
Grafico.jpg (27.23 KiB) Visto 174 veces


Cada nivel que superamos mostrará una desordenación mayor de las 9 cifras.

Descargar el juego en formato ".o":
Reorder.rar
(554 Bytes) Descargado 2 veces


BLOQUES
He dividido el listado en 3 bloques:
- Posición y desordenación de las 9 cifras.
- Mostrar las 9 cifras.
- Introducir el movimiento, comprobar si es correcto y realizar el movimiento correspondiente.


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

Se utilizan las siguientes variables:
C - Variable usada para mostrar las cifras en pantalla.
D - Puntero a la primera posición después del 9 en inverso del REM de la línea 1.
E - Variable usada para detectar si las cifras están ordenadas.
F - Variable usada para diversas acciones.
I - Variable usada para diversas acciones.
L – Nivel del juego.
N - Variable usada para diversas acciones.
N(9) – Matriz donde guardamos la posición de las nueve cifras.
A$ - Usada por el INPUT al pasar de nivel


1 – Línea REM que contiene las 2 tiras de pixels superiores de las 9 cifras.
2 – Línea REM que contiene las 2 tiras de pixels centrales de las 9 cifras.
3 – Línea REM que contiene las 2 tiras de pixels inferiores de las 9 cifras.
4 – Definimos la matriz donde guardamos la posición de las 9 cifras.
5 – Alterar el orden de los números aleatorios.
6 – Guardamos en la variable “L” el valor 1.
7 – Inicio del bucle que colocar las 9 cifras ordenadas de menor a mayor en la matriz N().
8 – Colocamos en cada posición de la matriz el número correspondiente.
9 - Final del bucle de colocación de las cifras.
10 – Inicio del bucle que desordena las cifras en función del nivel “L”.
11 – Guardamos en la variable “I” el movimiento aleatorio a realizar.
12 – Salto a la subrutina que cambia el orden de las cifras en función del movimiento indicado por “I”.
13 – Final del bucle de desordenación.
16 – Guardamos en la variable “E” el valor 0.
17 – Guardamos en la variable “D” el puntero al primer carácter después del REM de la línea 1.
18 - Borrado de pantalla.
19 – Salto de línea en pantalla.
20 – Inicio del bucle controla las 3 filas que muestran las cifras en pantalla.
21 – Inicio del bucle que muestra una de las tiras de las 9 cifras en pantalla.
22 – Guardamos en la variable “C” el puntero a la posición de la cifra correspondiente de las líneas REM.
23 – Inicio del bucle que muestra los 3 caracteres de la cifra correspondientes.
24 – Se muestra en pantalla el carácter correspondiente.
25 – Final del bucle que muestra una tira de caracteres de una cifra.
26 – Variable que controla que las cifras están ordenadas, poniendo “E” a 1 si no lo está.
27 – Final del bucle que muestra una de las tiras de las 9 cifras.
28 – Salto de línea en pantalla.
29 – Se incrementa la variable “D” para que apunte a los caracteres de la siguiente línea REM.
30 – Final del bucle que controla la impresión de las tres filas de caracteres de las cifras.
31 – Salto de línea en pantalla.
32 – Muestra las cifras afectadas por los movimientos 1 y 4.
33 – Salto de línea en pantalla.
34 – Muestra las cifras afectadas por los movimientos 2 y 3.
36 – Salto de línea en pantalla.
37 – Salto de línea en pantalla.
38 – Muestra el nivel del juego.
39 – Salto de línea en pantalla.
40 – Si las cifras no están ordenadas (E=1) salta a la línea 49.
41 – Muestra el mensaje de nivel superado.
42 – Hace un INPUT A$ como pausa antes de pasar al siguiente nivel.
43 – Se incrementa el nivel del juego “L” en 1.
44 – Salta a la línea 7.
49 – Muestra el mensaje que indica los posibles movimientos.
50 – Entrada en la variable “I” del movimiento a realizar.
51 – Si el movimiento es menos de 1 o mayor de 4 salta a la línea 50.
52 – Salto a la subrutina que cambia el orden de las cifras en función del movimiento indicado por “I”.
53 – Salta a la línea 16 para mostrar las cifras en pantalla y calcular si están ordenadas.
90 – Si el movimiento es mayor de 2, suma 2 al movimiento indicado por la variable “I”.
91 – Guarda en la variable “D” la cifra de la primera casilla a rotar.
92 – Pone en la primera casilla a rotar la cifra que hay en la cuarta casilla a rotar.
93 – Pone en la cuarta casilla a rotar la cifra que hay en la variable “D”.
94 – Guarda en la variable “D” la cifra de la segunda casilla a rotar.
95 – Pone en la segunda casilla a rotar la cifra que hay en la tercera casilla a rotar.
96 – Pone en la tercera casilla a rotar la cifra que hay en la variable “D”.
97 – Final de la subrutina.


EL PROGRAMA
Reorder_list.png
Reorder_list.png (11.39 KiB) Visto 174 veces


APUNTES FINALES
Este juego es otra adaptación de un juego que ya he publicado previamente para los ordenadores Wang 3300, en lenguaje Math-Matic para UNIVAC, el pocket computer PSION Organiser y la calculadora programable CASIO FX-6300G.

A diferencia de las otras versiones, en esta muestro los números en tamaño XXL, que ha sido la principal complicación en la programación en este sistema, ya que el resto del juego es muy simple.

Mostrando caracteres gigantes en un ZX-80
Esta ha sido la parte más compleja del programa. Para poder mostrar en pantallas las cifras con un tamaño de 3x3 caracteres, he introducido cada una de las 3 tiras de cada cifra en una línea REM, una al lado de la otra. Como el teclado no permite introducir ciertos caracteres gráficos, he tenido que POKEar las posiciones correspondientes. Cada una de las líneas REM contiene 27 caracteres gráficos o espacios en blanco.

Con un triple bucle puedo controlar la impresión de cada una de las tiras de las cifras, el segmento en la línea REM de la parte correspondiente a la cifra a mostrar y la impresión de los caracteres horizontalmente.

Ignoro si se podría haber simplificado, pero con muy pocas líneas lo hace bien, rápido, y encima controla que el orden sea el correcto.

Al final, el resultado en el ZX-80 es bastante espectacular.


Os invito a probarlo…
Buscando la IP de la W.O.P.R. he encontrado mi índice

Avatar de Usuario
Chema
Mensajes: 2416
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 2335 veces
Agradecimiento recibido: 718 veces
Contactar:

Re: REORDER para ZX-80

Mensajepor Chema » 26 Jun 2020 02:08

Macho, lo que haces es magia...

dancresp
Mensajes: 5641
Registrado: 13 Nov 2010 02:08
Agradecido : 320 veces
Agradecimiento recibido: 450 veces

Re: REORDER para ZX-80

Mensajepor dancresp » 26 Jun 2020 11:53

Chema escribió:Macho, lo que haces es magia...

Esto no es nada.

Ya veréis lo que estoy preparando en un Spectrum 16K. -thumbup
Buscando la IP de la W.O.P.R. he encontrado mi índice

Avatar de Usuario
wilco2009
Mensajes: 1992
Registrado: 07 Ene 2013 16:48
Ubicación: Valencia
Agradecido : 144 veces
Agradecimiento recibido: 218 veces

Re: REORDER para ZX-80

Mensajepor wilco2009 » 26 Jun 2020 12:20

dancresp escribió:
Chema escribió:Macho, lo que haces es magia...

Esto no es nada.

Ya veréis lo que estoy preparando en un Spectrum 16K. -thumbup


¿16K? ¿Para qué tanta memoria? Seguro que te sobra espacio por todas partes. -507
"Nada viaja a mayor velocidad que luz con la posible excepción de las malas noticias las cuales obedecen a sus propias leyes."

Douglas Adams. Guía de autoestopista galáctico.

dancresp
Mensajes: 5641
Registrado: 13 Nov 2010 02:08
Agradecido : 320 veces
Agradecimiento recibido: 450 veces

Re: REORDER para ZX-80

Mensajepor dancresp » 26 Jun 2020 12:34

wilco2009 escribió:¿16K? ¿Para qué tanta memoria? Seguro que te sobra espacio por todas partes. -507

Sobrar no sobrará, que ya me encargaré de embutirla hasta el final, pero desde siempre he tenido claro que esos 8,5 KB libres daban para mucho más de lo que ofrecen los típicos juegos de 16 KB, salvo honrosas excepciones tipo "Jet Set Willy 16K" y algunos juegos de plataformas similares recientes.

Ahora toca llevarlos al límite. -shock
Buscando la IP de la W.O.P.R. he encontrado mi índice


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