Juego ORDENACION en MATH-MATIC

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

Juego ORDENACION en MATH-MATIC

Mensajepor dancresp » 04 Jun 2014, 17:13

Reorder_1.gif
Reorder_1.gif (2.64 KiB) Visto 3808 veces


EL PROGRAMA
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 sus cifras hasta que queden ordenadas de menor a mayor valor.

Hay 4 tipos de movimientos que actúan de la siguiente forma:
Grafico.gif
Grafico.gif (2.55 KiB) Visto 3808 veces

Al ejecutar el programa se debe introducir un número entre 1 y 25 (puede ser mayor) que se usa para desordenar las cifras.

A continuación se muestran las 9 cifras y empieza el juego con la introducción de los movimientos.

Descargar juego e intérprete de MATH-MATIC:
Reorder.rar
(50.7 KiB) Descargado 220 veces


COMO FUNCIONA
El programa ocupa 31 líneas de código y se divide en 4 bloques:

1º - Inicializar y desordenar las cifras.
2º - Introducir el movimiento a realizar.
3º - Rotar las cifras según el movimiento.
4º - Mostrar y comprobar el resultado.


LISTADO DEL PROGRAMA

Código: Seleccionar todo

* Montar el fichero REORDER.MMD en la unidad de cinta 2
SERVO 2 REORDER READ
* Dejar la cinta por defecto en la unidad 2 (sin uso)
SERVO 3 TAPE-OUT WRITE

     * Inicializar la matriz DIGIT
(10) VARY F 1 (1) 9 SENTENCE 12 .
(12) DIGIT(F) = F .

     * Desordenar la matriz
(14) TYPE-IN LEVEL .
(16) CONT = 0 .
(18) READ MOV IF SENTINEL REWIND AND JUMP TO SENTENCE 22 .
(20) EXECUTE SENTENCE 36 THRU 60 .
(22) CONT = CONT+1 .
(24) IF CONT < LEVEL JUMP TO SENTENCE 18 .
(26) PLAY = 1 .

     * Ejecuta el bloque que muestra el número desordenado
(28) EXECUTE SENTENCE 70 THRU 78 .

     * Ejecuta la línea que muestra el número de intentos
(30) EXECUTE SENTENCE 90 .

     * Entrar el movimiento (valor entre 1 y 4)
(32) TYPE-IN MOV .
(34) IF MOV < 1 JUMP TO SENTENCE 32 IF MOV > 4 JUMP TO SENTENCE 32 .
     * Si el movimiento es menor de 3 salta a la línea 50
(36) IF MOV < 3 JUMP TO SENTENCE 50 .
     * Sino, suma 2 a la variable MOV
(38) MOV = MOV+2 .

     * Proceso de rotación de 4 dígitos
(50) SWAP = DIGIT(MOV+3) .
(52) DIGIT(MOV+3) = DIGIT(MOV) .
(54) DIGIT(MOV) = SWAP .
(56) SWAP = DIGIT(MOV+2) .
(58) DIGIT(MOV+2) = DIGIT(MOV+1) .
(60) DIGIT(MOV+1) = SWAP .

     * Proceso que junta los 9 dígitos en una número de 9 cifras
(70) STATUS = 0 .
(72) ZEROS = 100000000 .
(74) VARY F 1 (1) 9 SENTENCE 76 THRU 78 .
(76) STATUS = STATUS+DIGIT(F)*ZEROS .
(78) ZEROS = ZEROS/10 .

     * Si el resultado es el correcto salta a la línea 90
(80) IF STATUS = 123456789 JUMP TO SENTENCE 90 .
     * Sino incrementa el número de intentos y salta a 30
(82) PLAY = PLAY+1 .
(84) JUMP TO SENTENCE 30 .

     * Mostrar el resultado y número de intentos, y acaba la ejecución
(90) PRINT-OUT STATUS PLAY .
(92) STOP .


Nota:
El código fuente original “REORDER.MMP ” no puede llevar comentarios ni líneas en blanco.


EJEMPLO
Para usar el programa hay que hacer lo siguiente:

MMATIC (Entrar en el Intérprete de MATH-MATIC)
LOAD REORDER (Cargamos el programa)

EXEC (Se inicia el programa)

? 6 (Inicio del número aleatorio)
432189567 (Nos muestra el número desordenado)
1 (Muestra el número de intento)
? 1 (Introducimos la rotación 1)
123489567 (Se ha cambiado el orden de las primeras 4 cifras)
2
? 4 (Introducimos la rotación 4)
123487659 (Se ha cambiado el orden de las últimas 4 cifras)
3
? 3 (Introducimos la rotación 3)
123456789 (Se ha cambiado el orden de las cifras 5, 6, 7 y 8)
3 (Aparece el número de intentos)

Introducir EXEC para volver a ejecutar el programa.


APUNTES FINALES
La comunidad MATH-MATIC no se muestra muy activa últimamente. Bueno, realmente creo que esa comunidad la formo únicamente yo...

Bromas aparte, desde que desarrollé el intérprete de MATH-MATIC y recuperé la posibilidad de programar en este lenguaje tenía ganas de desarrollar algún juego con él. Este es el resultado.

MATH-MATIC se presento en el año 1958 para los sistemas UNIVAC y está orientado básicamente a los cálculos matemáticos, al igual que el lenguaje FORTRAN que se presentó poco tiempo antes. Es uno de los primeros lenguajes compilados de la historia.

Anteriormente ya programé versiones de este juego en los sistemas PSION ORGANISER y CASIO FX-6300G.

Programando en MATH-MATIC
Este juego ha sido desarrollado en mi intérprete y me ha servido para localizar un par de “bugs” menores que he aprovechado para corregir. Por el resto, el intérprete ha funcionado perfectamente. La nueva versión del intérprete la distribuyo junto con el código fuente del juego.

El lenguaje MATH-MATIC tiene muy pocas instrucciones pero son bastante potentes y algunas nos permiten una gran flexibilidad a la hora de reutilizar código desde distintas partes del programa.

Consiguiendo la desordenación inicial
La única dificultad ha consistido en que MATH-MATIC no tiene ninguna función que genere números aleatorios, algo necesario para la desordenación inicial del número. Lo he conseguido de la siguiente forma:

- He generado un fichero llamado “REORDER.MMD” que contiene una secuencia de 25 números comprendidos entre 1 y 4.
- Genero una matriz “DIGIT()” de 9 elementos que contienen los números del 1 al 9 ordenados (líneas 10 a 12).
- Pido la introducción de un número que guardo en la variable “LEVEL” que se usará como tope del bucle (línea 14).
- Las líneas 16 a 24 forman un bucle que se encarga de leer tantos valores del fichero “REORDER.MMD” como se ha introducido en la variable “LEVEL”, usando la variable “CONT” como contador. Los valores que se leen del fichero se almacenan en la variable “MOV” (línea 18). Si se llega al final del fichero se “rebobina” y se posiciona al principio.
- La línea 20 ejecuta el rango de instrucciones de las líneas 36 a 60, que se encargan de rotar las cifras en función del valor de la variable “MOV”.
- La línea 28 ejecutar las líneas 70 a 78, que se encargan de montar un número de 9 cifras a partir de los números de la matriz.

Y por el resto...
Como se puede apreciar, el código fuente es bastante comprensible, ya que básicamente se dedica a definir variables, a hacer cálculos, algún bucle (VARY) y algún IF que se limita a enviarnos a una línea concreta.

Todas las líneas deben acabar con un punto, y el programa debe acabar con un STOP.

Las dos primeras líneas del listado, que indican los ficheros de entrada y salida, las genera automáticamente el intérprete. La primera se debe cambiar para usar el fichero indicado y no el que se define por defecto.

Y puestos a destacar algo:
- La instrucción IF no permite preguntar si el valor es distinto de algo, pero permite encadenar condiciones.
- La instrucción EXECUTE es muy potente ya que nos permite ejecutar un rango de líneas desde cualquier parte del programa. Algo mucho más flexible que las subrutinas habituales, y más parecido a los “Procedures” de otros lenguajes.

Respecto al intérprete, el programa me ha permitido encontrar un “bug” en el EXECUTE de la línea 30, y otro en el cálculo del valor “STATUS” del bloque de líneas 70 a 78 que afectaba al tamaño del resultado. Ambos han sido corregidos.


Pues nada más, solo me queda…

Invitaros a probarlo

Reorder_2.gif
Reorder_2.gif (2.04 KiB) Visto 3808 veces

Reorder_3.gif
Reorder_3.gif (6.58 KiB) Visto 3808 veces
Buscando la IP de la W.O.P.R.

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: Juego ORDENACION en MATH-MATIC

Mensajepor Hark0 » 07 Jun 2014, 07:58

:shock: De piedra "me quedao"... ni idea tenia de lo que estabas contando... muchas gracias por la info... es muy interesante ver que "otros" lenguajes de programación existen. ;)

Acerca de la Casio que comentas... yo tengo una igual, me costó 18.000 ptas de la epoca... programe un laberinto para ella en su momento... y me entretenia torturando a mis hermanos para que lo jugaran.

Lo dicho, otro excelente post!
=D>
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

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: Juego ORDENACION en MATH-MATIC

Mensajepor dancresp » 08 Jun 2014, 09:37

Hark0 escribió::shock: De piedra "me quedao"... ni idea tenia de lo que estabas contando... muchas gracias por la info... es muy interesante ver que "otros" lenguajes de programación existen. ;)

Estaba convencido que en su día subí el post del Intérprete de MATH-MATC pero por lo visto se me paso... :?

Pero bueno, lo acabo de subir y está aquí: MATH-MATIC Interpreter.

Respecto a este lenguaje de programación, hay que decir que fue el tercer lenguaje compilado de la historia, después del FLOW-MATIC y del FORTRAN.

El post del FLOW-MATIC está aquí: FLOW-MATIC Interpreter.

Tanto un post como el otro son unos ladrillo de mucho cuidado... :-ss
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 17 invitados