MANIC PUZZLE para ZX-80
-
- Mensajes: 5669
- Registrado: 13 Nov 2010 02:08
- Agradecido : 343 veces
- Agradecimiento recibido: 470 veces
MANIC PUZZLE para ZX-80
EL JUEGO
El objetivo del juego consiste en intercambiar horizontalmente los gráficos del puzzle de la izquierda hasta conseguir que quede como el dibujo de la derecha.
Movimiento:
El movimiento se compone de una letra, comprendida entre A y H, y un número entre 1 y 5.
Esto provoca que se intercambie el gráfico de la posición indicada con el gráfico que hay a su derecha.
Por ejemplo, “A3” provoca que en esa posición se coloque el gráfico de la posición “A4”, y en “A4” el que hay en “A3”.
Cuando el programa detecta que los dos gráficos son iguales incrementa el nivel de dificultad y el desorden aumenta.
Descargar juego en formato ".o":
BLOQUES
He dividido el listado en 4 bloques:
- Definir el puzzle e inicializar las variables.
- Desordenar el puzzle.
- Mostrar el puzzle en pantalla.
- Introducir y realizar el movimiento.
COMO FUNCIONA
A continuación detallo, línea por línea, el funcionamiento del programa.
Se utilizan las siguientes variables:
A - Puntero a la línea REM.
E - Controla si el gráfico es correcto.
F - Variable para bucles o auxiliar para otras cosas.
I - Variable para bucles o auxiliar para otras cosas.
L - Nivel del juego.
A$ - Movimiento a realizar.
1 - Línea REM usada como buffer de pantalla y que contiene la figura desordenada y la correcta.
2 - Guardamos un 1 en la variable "L", usada como contador de nivel de juego.
3 - Modificamos la generación de números aleatorios.
4 - Guardamos en la variable "A" el puntero al primer carácter después del REM de la línea 1.
5 - Inicio del bucle que controla la posición vertical del duplicado de la figura.
6 - Inicio del bucle que controla la posición horizontal del duplicado de la figura.
7 - Pone el carácter de la posición A+7 en la posición A.
8 - Incrementa en 1 el valor del puntero guardado en la variable "A".
9 - Final del bucle de control horizontal.
10 - Incrementa en 7 el valor del puntero guardado en la variable "A", para saltar de línea.
11 - Final del bucle de control vertical.
15 - Inicio del bucle que desordena la figura de la izquierda.
16 - Guardamos en la variable "I" la posición del gráfico que vamos a mover.
17 - Salta a la subrutina de la línea 90 que intercambia la posición de dos gráficos.
18 - Final del bucle que desordena.
20 - Volvemos a guardar en la variable "A" el puntero al primer carácter después del REM de la línea 1.
21 - Guardamos un 0 en la variable "E".
22 - Borrado de la pantalla.
23 - Inicio del bucle que controla la posición vertical de la impresión en pantalla.
24 - Inicio del bucle que controla la posición horizontal de la impresión en pantalla
25 - Imprime un carácter en pantalla.
26 - Comprueba si ese carácter es igual en los dos gráciso, sino pone un 1 en la variable "E".
27 - Incrementa en 1 el valor del puntero guardado en la variable "A".
28 - Final del bucle de control horizontal.
29 - Salto de línea en pantalla.
30 - Final del bucle de control vertical.
31 - Imprime en pantalla el pie de los gráficos.
32 - Salto de línea en pantalla.
33 - Imprime en pantalla el número del nivel de juego.
34 - Salto de línea en pantalla.
35 - Si los gráficos no son iguales "E=1" y salta a la línea 40.
36 - Incrementa en 1 el valor de la variable "L", que contiene el nivel de juego.
37 - Imprime en pantalla el mensaje de nivel superado.
38 - INPUT para forzar una pausa hasta que se pulsa "Enter".
39 - Saltar a la línea 10.
40 - Imprime en pantalla el formato del movimiento.
41 - Entrar el movimiento en la variable A$.
42 - Guardamos en la variable "F" la fila.
43 - Guardamos en la variable "I" la columna.
44 - Si el movimiento es incorrecto salta a la línesa 41.
45 - Calcula la posición del gráfico a mover y lo guarda en la variable "I".
46 - Salta a la subrutina de la línea 90 que intercambia la posición de dos gráficos.
47 - Saltar a la línea 20.
90 - Usamos la variable "I" como puntero al gráfico del REM de la línea 1.
91 - Guardamos en la variable "A" el gráfico indicado según la posición de "I".
92 - POKE a la posición del gráfico para poner el gráfico siguiente.
93 - POKE a la siguiente posición del gráfico para poner el gráfico guardado en "A".
94 - Final de la subrutina.
EL PROGRAMA
APUNTES FINALES
Nuevo juego tipo puzzle que incorporo a mi colección, junto a otros como el “Mine Field”, “Sudoku”, “Lights Out”, “Solitario” o el “Rush Hour”.
El juego está basado en el juego “Sort-Col” que programé para el NEC PC-8201A, sustituyendo los números por un gráfico del minero Willy del Manic Miner.
Almacenando los puzzles
En la versión original de ZX-81 estaba contemplado disponer de dos gráficos que se debían ir intercambiado, uno para los niveles pares y otro para los impares. Por tema de memoria se tuvo que descartar, y en esta versión tampoco ha sido posible implementarlo.
Mostrando el tablero
Como en otros juegos para el ZX-80, he aprovechado una línea REM para usarla como buffer del contenido de la pantalla, y a su vez para tener el gráfico correcto y el desordenado.
Mediante tres bucles puedo duplicar el gráfico bueno, almacenar el gráfico desordenado y mostrarlo por pantalla. Este último bucle se encarga de revisar si los dos gráficos son iguales.
Introducir el movimiento
La entrada consta de dos caracteres: “Letra de la coordenada vertical” y “Número de la coordenada horizontal”.
Con unas pocas líneas en BASIC puedo calcular las coordenadas de pantalla, intercambiar los dos segmentos afectados y actualizar la pantalla.
A diferencia de la versión del ZX-81, aquí sí he podido verificar que el movimiento introducido es correcto.
Os invito a probarlo…
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 0 invitados