Programando MINED-OUT para AQUARIUS

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

Programando MINED-OUT para AQUARIUS

Mensajepor dancresp » 01 Nov 2012, 00:30

EL JUEGO
EL juego original fue publicado por la compañía QUICKSILVA en el año 1983 para el ordenador DRAGON-32.

El objetivo del juego consiste en ayudar a un gusano a atravesar un campo minado, cruzando desde la parte inferior a la parte superior.

Las minas están ocultas bajo el suelo, pero al movernos nos avisa si hay alguna mina cerca del gusano, para ir con cuidado y tratar de sortearla. Las filas que están junto a la salida y la llegada no tienen minas. Son zonas seguras.

Cada nivel superado supondrá cruzar un nuevo campo con más minas, consiguiendo puntos de BONUS extra si lo hacemos en el menor tiempo posible.

DSC_0551.jpg
DSC_0551.jpg (63.66 KiB) Visto 11464 veces


BLOQUES
He dividido el listado en 8 bloques:

- Mostrar la pantalla de presentación.
- Nudo principal de desarrollo.
- Final de juego.
- Pasar Nivel.
- Pantalla de presentación.
- Pantalla de juego.
- Poner las minas en la zona de juego.
- Rutinas varias.


COMO FUNCIONA
Todo el programa ocupa 53 líneas.

A continuación indico el principio de las distintas partes del programa:

10 – Muestra la presentación del juego.
14 – Leemos el teclado y movemos la posición del gusano, si podemos.
170 – Si ha llegado arriba va a 600 y pasa de nivel.
180 – Comprueba si el gusano está encima de una mina. En caso afirmativo salta a 500 y acaba el juego.
190 – Mira si tiene minas a derecha, izquierda y debajo cuando estamos por encima de la zona de seguridad.
195 – Mira si hay una mina encima cuando estamos por debajo de la zona de seguridad.
200 – Si no hay minas (M=0) muestra el mensaje “SAFE”.
210 – Si hay minas indica cuantas hay (M).
220 – Cuando avanzamos nos da 5 puntos (P).
230 – Descuenta el tiempo que se usa para calcular los puntos del BONUS (B).
500 – Rutina de muerte. Hace un sonido, muestra la posición de las minas, imprime el gusano muerto y espera que pulsemos una tecla.
600 – Rutina de pasar nivel. Hace un sonido, una pausa, suma los puntos del bonus, aumenta el número de minas (L) y vuelve a jugar.
1000 – Borra la pantalla y muestra la presentación. Inicializa los puntos (P) y número de minas extras (L).
2000 – Dibuja los bordes de la zona de juego.
2040 – Pone los bordes inferiores pokeando directamente en la memoria de video para evitar el SCROLL automático del sistema.
2050 – Dibuja la zona minada.
3000 –Rutina que coloca las minas en la zona de juego.
3010 – Dibuja las puertas de entrada y salida.
3020 – Inicializa la matriz de las minas.
3030 – Bucle que coloca las minas en la zona de juego.
3040 – Se calcula una posición aleatoria.
3050 – Si esta libre (=0) marca la posición como ocupada (=1), sino busca una nueva posición.
3080 – Inicializa la posición horizontal (X) y vertical (Y) del gusano, altura máxima alcanzada (T), cantidad de Bonus (B) y el Flip-Flop del tiempo (C).


EL LISTADO

Código: Seleccionar todo

10 GOSUB60
14 A$=INKEY$:IFA$=""THEN34
15 C=13:G=32:P=Y*40+X:GOSUB98
16 IFA$="q"AND(Y>2OR(Y=2AND(X=19ORX=20)))THENY=Y-1
17 IFA$="a"ANDY<22THENY=Y+1
18 IFA$="o"ANDX>1ANDY<23THENX=X-1
19 IFA$="p"ANDX<38ANDY<23THENX=X+1
20 P=Y*40+X:F=12288+P:IFPEEK(F)=14THEN40
22 G=19:C=178:GOSUB98
24 IFY=1THEN50
26 M=ABS((PEEK(F-1)=14)+(PEEK(F+1)=14)+(PEEK(F-40)=14)+(PEEK(F+40)=14))
28 P=2:IFM<>0THENT$=STR$(M)+" MINES  ":GOSUB99:SOUND(20,100)
30 IFM=0THENT$="<<<SAFE>>>":GOSUB99:SOUND(10,50)
32 IFT>YTHENT=Y:S=S+5:P=34:T$=STR$(S):GOSUB99
34 C=-C:IFC=1ANDB>0THENB=B-5
36 GOTO14
40 G=209:C=6:GOSUB98:P=2:T$="GAME OVER   ":GOSUB99
41 FORF=30TO50:SOUND(9,F):NEXT
42 FORF=13432TO14192
43 IFPEEK(F)=102THENPOKEF,6
44 NEXT
46 IFINKEY$=""THEN46
48 GOTO10
50 P=2:T$="YOU DID IT!":GOSUB99
52 FORF=100TO0STEP-20:SOUND(20,F):NEXT
54 FORF=1TO3000:NEXT
56 S=S+B:IFL<160THENL=L+20
58 GOSUB80:GOTO14
60 GOSUB97:P=15:T$="MINED-OUT":GOSUB99
62 PRINT:PRINT"Your mission is to rescue Bill the"
64 PRINT"Worm by breaking down the door of his"
66 PRINT"enclosure which is on then final"
68 PRINT"minefield.":PRINT:PRINT"You begin each level at the bottom of"
70 PRINT"the screen.":PRINT:PRINT"Move using the 'QAOP' keys."
72 PRINTTAB(202);"PRESS ANY KEY"
74 PRINTTAB(198);"(C)Scainet Soft, 2012"
76 IFINKEY$=""THEN76
78 S=0:L=0
80 GOSUB97:C=126:G=216:FORF=40TO79:P=F:GOSUB98:P=F+880:GOSUB98:NEXT
81 FORF=80TO880STEP40:P=F:GOSUB98:P=F+39:GOSUB98:NEXT
82 P=28:T$="SCORE:"+STR$(S):GOSUB99
84 P=2:T$="MINE LAYING...":GOSUB99:P=59:T$="  ":GOSUB99:P=939:GOSUB99
86 C=102:G=14:POKE12369,32
88 FORF=1TO50+L
90 P=INT(RND(1)*760)+120:IFPEEK(12288+P)<>32THEN90
92 GOSUB98
93 NEXT
94 P=940:G=19:C=178:GOSUB98
95 X=20:Y=23:T=Y:B=1000+L*100:C=1
96 P=2:T$="GO...         ":GOSUB99:RETURN
97 PRINTCHR$(11):RETURN
98 POKE13312+P,C:POKE12288+P,G:RETURN
99 I=12288+P:FORF=1TOLEN(T$):POKEI,ASC(MID$(T$,F,1)):I=I+1:NEXT:RETURN


APUNTES FINALES
Por fin me he lanzado a programar en el AQUARIUS. Puedo asegurar que es un ordenador desconcertante. ¿Es tan malo como su fama? Personalmente creo que no, e incluso en algunos aspectos es superior a ordenadores con mejor fama.

Tenemos un ordenador con aspecto de juguete, un teclado incómodo pero fiable, una pantalla de 40x25, 16 colores, sonido más que decente, un juego de caracteres muy completo y un buen BASIC que encima, es rápido.

¿Que le falla?
Solo 4 KB de RAM (ampliables), de los que 2 KB están reservados por la memoria de vídeo y para BASIC solo quedan 1,7 KB disponibles.
Falta de EDITOR en BASIC. Increíblemente cualquier error en una línea de programa obliga a teclearla de nuevo entera. Cada línea admite un máximo de 72 caracteres. Si la línea que entras ocupa dos líneas en pantalla tampoco puedes hacer un "Backspace" de la parte de la primera.
Falta de LOCATE y COLOR. Parece que para el intérprete BASIC se han basado más en el MBASIC que en el GW-BASIC. Así, no hay comandos para hacer un PRINT en una posición determinada de la pantalla, ni en un color determinado. Se tiene que POKEar directamente en la memoria de video.
Cassette demasiado sensible. Si no das con el punto de volumen exacto no cargas absolutamente nada, y aún y así, a veces dice que ha cargado bien pero ha modificado algún carácter del programa y falla.
El teclado es fiable, pero el aspecto, tamaño y disposición de las teclas no es cómodo. Eso si, muchos comandos BASIC se entran directamente con la pulsación de "CTRL" y una letra.

Pues con este panorama me he decidido a adaptar el juego "MINED-OUT" programado para el LASER 200.

Lo primero que hice fue programarme 3 sencillas rutinas que me han facilitado mucho las cosas. Se asigna el valor a las variables correspondientes y se hace un GOSUB.

GOSUB 97: CLS - Borra la pantalla.
GOSUB 98: GRAFICO - Pone un carácter (G) con un color (C) en una posición absoluta (P) de la pantalla.
GOSUB 99: LOCATE - Pone un texto (T$) en una posición absoluta (P) de la pantalla.

La posición absoluta funciona igual que el PRINT@ del DRAGON y el LASER. Se calcula con la siguiente fórmula: vertical*40+horizontal. Siendo 0 la primera fila y columna.

La pantalla es de 40x25 caracteres, pero desde PRINT solo podemos usar 38x24. La primera fila, y la primera y última columna son inaccesibles si no es mediante POKEs. Con esta rutina nos saltamos esta limitación.

En esta versión me he ahorrado la matriz donde guardaba la posición de las distintas minas. He optado por colocarlas en pantalla con igual color de tinta y fondo. No se ve pero está allí. Al moverme, borro el personaje de la posición actual, y antes de ponerlo en la nueva miro si en esa posición de la memoria de pantalla hay una mina. En caso afirmativo pongo el carácter de la explosión y visualizo las minas cambiando solo su atributo de color, sino pongo el protagonista en la nueva posición.

El AQUARIUS no tiene auto-repetición en las teclas, con lo que no he tenido que evitarlo.

Para terminar, me han sobrado poco más de 100 bytes. Al final me aparecía el mensaje de error OM (Out of Memory) y he tenido que eliminar algún texto de la presentación y algún sonido. Como en los tiempos del ZX-81, vamos.

Os invito a probarlo.

DSC_0553.jpg
DSC_0553.jpg (102.04 KiB) Visto 11464 veces

DSC_0550.jpg
DSC_0550.jpg (83.3 KiB) Visto 11464 veces
Buscando la IP de la W.O.P.R.

Avatar de Usuario
zitror
Amiga 2500
Amiga 2500
Mensajes: 5349
Registrado: 02 Jul 2006, 00:16
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
Ubicación: El interior de un Z80
Gracias dadas: 248 veces
Gracias recibidas: 104 veces
Contactar:

Re: Programando MINED-OUT para AQUARIUS

Mensajepor zitror » 01 Nov 2012, 08:15

Un trabajo fantástico =D> y una descripción estupenda de este micro que seguro que es desconocido para muchos de nuestros amigos.

Como dices es un micro muy peculiar con muy poco soft de calidad así que tu juego nos viene genial para desempolvar nuestros Aquarius, el mio hace la tira que no lo conecto :? Como solo lo he probado con el cartucho que tengo ya no tengo excusa para probar la carga via cassette, menos mal que has explicado los problemas de carga que si no me vuelvo loco seguro.

Has elegido un juego muy entretenido con el que pasé muy buenos ratos en mi Spectrum.

Salu2 ;)
(C) 1.982 Sinclair Research Ltd

La buhardilla de Zitror

Avatar de Usuario
alt
Amiga 2500
Amiga 2500
Mensajes: 4416
Registrado: 07 Sep 2004, 21:52
Ubicación: madrid
Gracias dadas: 1251 veces
Gracias recibidas: 2246 veces
Contactar:

Re: Programando MINED-OUT para AQUARIUS

Mensajepor alt » 01 Nov 2012, 20:19

¡Muchas gracias! Este finde me voy fuera, pero el siguiente intentaré probarlo. Lo mismo me lo llevo a Parla, y propongo el personal que lo tecleemos mientras estemos en el stand :-D

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: Programando MINED-OUT para AQUARIUS

Mensajepor dancresp » 01 Nov 2012, 23:46

Suelo adjuntar el WAV con estos programas, pero lamentablemente el del AQUARIUS es imposible de cargar.

Como digo, su rutina de cassette es desastrosa.

Y celebro os guste.
Buscando la IP de la W.O.P.R.

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Programando MINED-OUT para AQUARIUS

Mensajepor radastan » 03 Nov 2012, 11:15

Todo un logro haber conseguido sacar algo para este ordenador, con tesón todo se consigue.

Dirás lo que quieras pero el Aquarius es el ordenador menos amigable que conozco. Ya no es sólo que no se puedan modificar líneas, es que tienes que pokear en pantalla si o si para poder hacer gráficos desde BASIC, y lo de que es un BASIC rápido mejor lo dejamos para otro hilo (no trates de hacer ciertas cosas). En este caso el juego tiene rutinas sencillas y que no se ejecutan todo el tiempo de modo cíclico (enemigos que se mueven, por ejemlo), en ese caso sería un infierno.

Y para remate lo peor de todos: la carga desde casette, que yo ya dí por imposible en su día y que te fuerza a usar cartuchos o teclear listados. Una pena porque si al menos se pudiesen usar WAVS sería otra cosa (pocos juegos me cargaron por WAV, me fallaban la mayoría).
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

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: Programando MINED-OUT para AQUARIUS

Mensajepor dancresp » 03 Nov 2012, 16:14

radastan escribió:Todo un logro haber conseguido sacar algo para este ordenador, con tesón todo se consigue.

Soy muy cabezón... #-o

radastan escribió:Dirás lo que quieras pero el Aquarius es el ordenador menos amigable que conozco. Ya no es sólo que no se puedan modificar líneas, es que tienes que pokear en pantalla si o si para poder hacer gráficos desde BASIC, y lo de que es un BASIC rápido mejor lo dejamos para otro hilo (no trates de hacer ciertas cosas). En este caso el juego tiene rutinas sencillas y que no se ejecutan todo el tiempo de modo cíclico (enemigos que se mueven, por ejemlo), en ese caso sería un infierno.

No, si no digo que sea amigable, que no lo es. Como explico, tiene fallos demasiado importantes, aunque cierto es que tiene cosas buenas.

Respecto a la velocidad, he subido un hilo con sencillas pruebas en BASIC en 21 equipos que realice y en el ejemplo 2, que contiene PRINT, GOTO, IF y cálculos matemáticos, el MATTEL AQUARIUS es el tercer equipo más rápido, solo por detrás del BBC Micro y el ATARI ST. Insisto que es bastante más rápido de lo que parece. Al poco de tocarlo ya lo aprecié, a pesar de todo lo malo que tiene, que creo que en la ficha ha quedado bien explicado.

radastan escribió:Y para remate lo peor de todos: la carga desde casette, que yo ya dí por imposible en su día y que te fuerza a usar cartuchos o teclear listados. Una pena porque si al menos se pudiesen usar WAVS sería otra cosa (pocos juegos me cargaron por WAV, me fallaban la mayoría).

Para mi es el peor fallo de todos, ya que el resto he mostrado como capearlo (LOCATE, CLS y PRINT).
Pero es que, o encuentras el punto exacto de volumen, o no cargas nada.

Más aquí: http://www.zonadepruebas.com/viewtopic.php?f=15&t=2148
Buscando la IP de la W.O.P.R.

jepalza

Re: Programando MINED-OUT para AQUARIUS

Mensajepor jepalza » 03 Nov 2012, 16:48

Yo antes, tengo que comprar el Aquarius ](*,)

Avatar de Usuario
xgipe
Atari 1040 STf
Atari 1040 STf
Mensajes: 941
Registrado: 26 May 2010, 15:59
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: Sega Master System
Primera consola: Videopac
Ubicación: Ankh-Morpork
Gracias dadas: 88 veces
Gracias recibidas: 69 veces

Re: Programando MINED-OUT para AQUARIUS

Mensajepor xgipe » 03 Nov 2012, 17:29

Dani,
a ver qué día le das una alegría al Alphatronic PC... ;)
Si eres capaz de hacer virguerías con el Aquarius, el Triumph Adler está "chupao" (que tiene un BASIC Microsoft) :-({|=

@Jepalza: Yo también... :lol:
BLOAD "CAS:",R
Found: WIN3.11

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: Programando MINED-OUT para AQUARIUS

Mensajepor dancresp » 03 Nov 2012, 17:36

xgipe escribió:Dani,
a ver qué día le das una alegría al Alphatronic PC... ;)

Ai si tu supieras...
Buscando la IP de la W.O.P.R.

Avatar de Usuario
xgipe
Atari 1040 STf
Atari 1040 STf
Mensajes: 941
Registrado: 26 May 2010, 15:59
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: Sega Master System
Primera consola: Videopac
Ubicación: Ankh-Morpork
Gracias dadas: 88 veces
Gracias recibidas: 69 veces

Re: Programando MINED-OUT para AQUARIUS

Mensajepor xgipe » 03 Nov 2012, 17:42

Voy a desenpolvar el Alpha y a cambiarle el condensador que "saltó" de la fuente de alimentación, que esto promete... :)
BLOAD "CAS:",R
Found: WIN3.11


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados