Juego ORDENACION en MATH-MATIC

dancresp
Mensajes: 5091
Registrado: 13 Nov 2010 02:08
Agradecido : 37 veces
Agradecimiento recibido: 105 veces

Juego ORDENACION en MATH-MATIC

Mensajepor dancresp » 04 Jun 2014 17:10

Imagen

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 (27.23 KiB) Visto 1450 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 96 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

Imagen

Imagen
Adjuntos
Reorder_3.gif
Reorder_3.gif (37.69 KiB) Visto 60 veces
Reorder_2.gif
Reorder_2.gif (10.18 KiB) Visto 60 veces
Reorder_1.gif
Reorder_1.gif (13.72 KiB) Visto 60 veces

Avatar de Usuario
ron
Mensajes: 17701
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 697 veces
Agradecimiento recibido: 749 veces

Re: Juego ORDENACION en MATH-MATIC

Mensajepor ron » 04 Jun 2014 18:55

ahí ahí ! , vas soltando trabajos que cuestan mucho tiempo y sobre todo a los que pones mucho cariño. Hace mucho que entraste en el Retro-Hall-Of-Fame, lo importante es ese tesón, esa afición y esa dedicación. Cuando las estrellas llegan al apogeo comienza su declive, Dancresp tu al contrario, vas subiendo el listón y vas progresando y haciendo que los demás sean partícipes y puedan disfrutar entendiendo que es lo que haces, que significa y sobre todo el porque lo haces.

Mis más sinceras felicitaciones por este y todos tus trabajos.

Tolvatar
Mensajes: 445
Registrado: 30 Jun 2012 17:56
Agradecido : 1 vez
Agradecimiento recibido: 1 vez

Re: Juego ORDENACION en MATH-MATIC

Mensajepor Tolvatar » 04 Jun 2014 22:59

Yo ya no se que piropo dedicarte.
Bravo.

Espero ver doscientos millones mas de programas tuyos.

dancresp
Mensajes: 5091
Registrado: 13 Nov 2010 02:08
Agradecido : 37 veces
Agradecimiento recibido: 105 veces

Re: Juego ORDENACION en MATH-MATIC

Mensajepor dancresp » 04 Jun 2014 23:36

Yo... yo solo quería usar mi intérprete... :oops:

Avatar de Usuario
Chema
Mensajes: 1739
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 685 veces
Agradecimiento recibido: 265 veces
Contactar:

Re: Juego ORDENACION en MATH-MATIC

Mensajepor Chema » 05 Jun 2014 00:39

Estoy con Tolvatar, a este ritmo yo me quedo sin palabras.

¿tu llevas una lista? Porque debe ser mayor que la de los reyes Godos... :)

Avatar de Usuario
web8bits
Mensajes: 964
Registrado: 31 Oct 2010 10:34
Ubicación: Vigo
Agradecido : 84 veces
Agradecimiento recibido: 52 veces
Contactar:

Re: Juego ORDENACION en MATH-MATIC

Mensajepor web8bits » 05 Jun 2014 08:24

Una vez más, sin palabras, impresionante, ¿pero tu de donde sacas tiempo? :-) Eres un crack.

dancresp
Mensajes: 5091
Registrado: 13 Nov 2010 02:08
Agradecido : 37 veces
Agradecimiento recibido: 105 veces

Re: Juego ORDENACION en MATH-MATIC

Mensajepor dancresp » 05 Jun 2014 13:48

web8bits escribió: ¿pero tu de donde sacas tiempo? :-)

La culpa la tiene entera el vaivén, del tren... (bueno, entera entera no). -grin


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