BLASTO para Commodore Plus/4 - C16

dancresp
Mensajes: 4993
Registrado: 13 Nov 2010 02:08
Agradecido : 14 veces
Agradecimiento recibido: 83 veces

BLASTO para Commodore Plus/4 - C16

Mensajepor dancresp » 15 Feb 2016 19:38

Imagen

EL JUEGO
Este videojuego para sistemas arcade fue desarrollado en 1977 por la empresa Gremlin.

El objetivo del juego consiste en destruir todas las minas del campo minado antes de que acabe el tiempo. Para ello disponemos de una nave que podemos mover por las zonas vacías de la pantalla, y que pueden destruir todo lo que hay en ella. Hay que ir con cuidado porque al explotar las minas destruyen lo que hay a su alrededor.

Si conseguimos nuestro objetivo conseguiremos una partida gratis.

Controles:
Utiliza las teclas Q-A-O-P para controlar la nave.
Pulsa "Espacio" para disparar.


Descargar el juego:
Blasto.rar
(5.31 KiB) Descargado 35 veces


BLOQUES
Se ha dividido el listado en 10 bloques:

- Declaración de las matrices. Llamada a rutinas principales.
- Control de la nave.
- Control del disparo.
- Final de la partida.
- El disparo ha impactado con algo.
- Destruir una mina.
- Perder una nave.
- Presentación e inicio de la partida.
- Rutinas varias.
- DATA con los UDG del juego y el diseño de la zona de juego.


COMO FUNCIONA
Todo el programa ocupa 91 líneas.

10 - Definimos las matrices del juego.
50 – Salto a la subrutina que lee los gráficos, redefine los caracteres y define variables globales y modo de vídeo.
100 – Mover la nave.
140 – Si hay alguna mina pendiente de explotar se va a la rutina correspondiente 350.
150 – Control del disparo.
190 – Se reduce el tiempo disponible para finalizar la partida.
200 – Si queda tiempo vuelve a 100.
205 – Final de partida donde se controla si se ha superado el récord y si se han destruido todas las minas.
300 – Controla si el disparo ha tocado algo.
350 – Rutina que controla la destrucción de minas en cadena.
400 – Una mina ha explotado cerca y nuestra nave se destruye.
2000 – Pantalla inicial del juego.
2500 – Inicializar variables para la partida y rutina que coloca las minas.
2600 – Posición inicial de nuestra nave.
2700 – Rutina que muestra el laberinto de puntos en pantalla, sin las minas.
3000 – Se ajustan los colores, el volumen del sonido y indicamos la línea a saltar si hay un error en el programa.
3005 - Texto inicial con las instrucciones del juego.
3010 - Lectura de los DATA con el código máquina que permite redefinir los caracteres.
3015 – Lectura de los DATA de los UDG y de la zona de juego.
5000 – Rutina de vuelta al editor BASIC. Recupera los valores por defecto.
5100 – Rutina que muestra el marcador de puntos.
5300 – Rutina de PAUSA. Valor en (I).
5400 – Rutina que muestra el mensaje de fin de partida o partida gratis.
8000 - DATA con el código máquina que permite redefinir los caracteres.
9000 – DATA con los gráficos de los UDG y con las distintas filas que forman la zona de juego.


EL LISTADO

Código: Seleccionar todo

  10 DIMA$(8)
  50 GOSUB3000
  80 GOSUB2700:GOSUB5400:GOSUB2000
  90 DIML(68)

      Lectura del Teclado
 100 GETK$:IFK$="Q"THEN110
 102 IFK$="P"THEN115
 104 IFK$="A"THEN120
 108 IFK$="O"THEN125:ELSE140
      Mover la Nave
 110 IFG<>78THENG=78:GOTO130
 111 IFY>0THENIFPEEK(A-40)=32THENY=Y-1:POKEA,32:A=A-40
 112 GOTO130
 115 IFG<>79THENG=79:GOTO130
 116 IFX<31THENIFPEEK(A+1)=32THENX=X+1:POKEA,32:A=A+1
 117 GOTO130
 120 IFG<>80THENG=80:GOTO130
 121 IFY<23THENIFPEEK(A+40)=32THENY=Y+1:POKEA,32:A=A+40
 122 GOTO130
 125 IFG<>81THENG=81:GOTO130
 126 IFX>0THENIFPEEK(A-1)=32THENX=X-1:POKEA,32:A=A-1
      Mostrar la Nave en la nueva posición
 130 POKEA,G
 
     Controlar si hay Minas pendientes de Explotar
 140 IFM<NTHEN350
 
     Control del Disparo
 150 IFDTHEN160:ELSEIFK$<>" "THEN190
 155 D=1:B=G-77:C=-1
     Mover el Disparo
 160 ONBGOTO165,170,175,180
 165 IFC<>-1THEN167
 166 C=Y:K=A-40:IFC<=0THEND=0:GOTO190:ELSE185
 167 POKEK,32:C=C-1:IFC>0THENK=K-40:GOTO185:ELSED=0:GOTO190
 170 IFC<>-1THEN172
 171 C=31-X:K=A+1:IFC<=0THEND=0:GOTO190:ELSE185
 172 POKEK,32:C=C-1:IFC>0THENK=K+1:GOTO185:ELSED=0:GOTO190
 175 IFC<>-1THEN177
 176 C=23-Y:K=A+40:IFC<=0THEND=0:GOTO190:ELSE185
 177 POKEK,32:C=C-1:IFC>0THENK=K+40:GOTO185:ELSED=0:GOTO190
 180 IFC<>-1THEN182
 181 C=X:K=A-1:IFC<=0THEND=0:GOTO190:ELSE185
 182 POKEK,32:C=C-1:IFC>0THENK=K-1:ELSED=0:GOTO190
     El disparo toca algo?
 185 IFPEEK(K)<>32THEN300:ELSEPOKEK,76
 
     Control del Tiempo y Fin del Bucle Principal
 190 T=T+1:IFT=11THENT=0:TM=TM-1:CHAR1,19,1,"":PRINTUSING"##";TM
 200 IFTMTHEN100
 
      Final de la Partida
 205 IFP>RTHENR=P
 210 IFE=OTHENGOSUB5410:ELSEGOSUB5400
 215 I=5000:GOSUB5300:IFETHENGOSUB2000:GOTO100:ELSEGETKEYK$:GOSUB2500:GOTO100

     Que toca el disparo?
 300 D=0:F=PEEK(K)
 305 IFF=74THENPOKEK,77:SOUND1,990,3:P=P+10:GOSUB5100:POKEK,32:GOTO190
 310 IFF=75THENP=P+50:N=N+1:L(N)=K-41:POKEK,32:GOTO190:ELSE190

     Explosión de una Mina
 350 M=M+1:W=65:FORF=L(M)TOL(M)+80STEP40:FORI=FTOF+2
 355 K=PEEK(I):IFK=74THENP=P+10:ELSEIFK=75THENP=P+50:N=N+1:L(N)=I-41
 360 POKEI,W:W=W+1:SOUND3,W,2:NEXT:NEXT
 370 F=L(M):POKEF,32:POKEF+1,32:POKEF+2,32:POKEF+40,32:POKEF+41,32:POKEF+42,32
 375 POKEF+80,32:POKEF+81,32:POKEF+82,32:E=E-1:GOSUB5100:IFPEEK(A)<>32THEN190

     Destrucción de la Nave
 400 I=150:FORG=81TO77STEP-1:POKEA,G:SOUND1,650-(G*5),2:GOSUB5300:NEXT
 405 POKEA,32:GOSUB2600:GOTO190

     Presentación
2000 GETKEYK$
2005 SCNCLR:CHAR1,14,12,"PRESS START":I=900:GOSUB5300:GETKEYK$
2010 SCNCLR:CHAR1,11,9,"HIT ALL MINES FOR":CHAR1,15,13,"FREE GAME"
2015 GOSUB5300:GETKEYK$

     Poner Minas en la Pantalla e Iniciar Variables
2500 T=0:TM=90:E=68:N=0:M=0:GOSUB2700:FORF=1TOE
2505 I=3072+40*INT(RND(1)*22+1)+INT(RND(1)*30+5):IFPEEK(I)<>74THEN2505
2510 POKEI,75:NEXT

     Posición Inicial de la Nave
2600 X=29:Y=14:A=3665:G=81:POKEA,G:D=0:RETURN

     Mostrar la Zona de Juego
2700 SCNCLR:FORF=1TOLEN(B$):CHAR1,4,F-1,A$(VAL(MID$(B$,F,1))):NEXT:POKE3665,81
2705 CHAR1,18,0,"time":CHAR1,19,1,"90":P=0:GOSUB5100:RETURN

     Inicio del programa, Instrucciones y lectura de gráficos UDG y Laberinto
3000 POKE56,59:POKE52,59:CLR:COLOR0,1:COLOR1,2:COLOR4,1:VOL8:TRAP3300
3005 CHAR1,17,0,"BLASTO":CHAR1,9,5,"CONTROLS: MOVE = QAOP":CHAR1,19,6,"FIRE = SPACE"
3006 CHAR1,10,14,"*PRESS KEY TO START*":CHAR1,9,21,"(c) SCAINET SOFT, 2016"
3007 CHAR1,1,23,"DEDICATED TO JOSEPZIN & COMMODORE MANIA"
3010 FORA=1536TO1570:READB:POKEA,B:NEXT:SYS1536
3015 FORF=15880TO16015:READB:POKEF,B:NEXT:GOSUB3100
3020 FORF=1TO8:READA$(F):NEXT:READB$:F=RND(-TI):GETKEYK$:GOTO80
3100 PRINTCHR$(8):POKE65299,60:POKE65298,PEEK(65298)AND251:RETURN
3200 POKE65299,208:POKE65298,PEEK(65298)OR4:RETURN
3300 GOSUB3200:COLOR0,2:COLOR1,1:COLOR4,7:SCNCLR:PRINTERR$(ER),EL:END

     Rutina: Mostrar el Marcador de Puntos
5100 CHAR1,30,1,RIGHT$("0000"+MID$(STR$(P),2),5):RETURN
     Rutina: Pausa (Valor en "I")
5300 FORF=1TOI:NEXT:RETURN
     Rutina: Mensaje de Game Over
5400 CHAR1,18,10,"GAME":CHAR1,18,13,"OVER"
5405 CHAR1,5,23,"SINGLE PLAYER HIGH SCORE "+RIGHT$("0000"+MID$(STR$(R),2),5):RETURN
5410 CHAR1,16,10,"FREE GAME":CHAR1,15,12,"PRESS START":GOTO5405

     Código Máquina para redefinir UDG
8000 DATA169,0,133,208,169,208,133,209,169,0,133,210,169,60,133,211,162,4,160
8005 DATA0,177,208,145,210,200,208,249,230,209,230,211,202,208,240,96

     Gráficos del Juego (UDG)
9000 DATA0,0,0,0,0,0,0,0,4,4,134,198,204,237,191,156,12,24,56,112,230,204,124,24
9005 DATA3,207,153,60,48,126,236,9,136,193,20,124,249,43,129,156,240,124,15,60
9010 DATA96,48,252,78,31,28,56,56,113,101,76,192,191,172,236,198,195,137,140,128
9015 DATA67,225,240,120,28,12,70,0,0,0,56,40,56,0,0,0,56,108,198,146,198,108,56
9020 DATA0,40,170,170,170,170,170,40,0,136,193,20,124,249,43,129,156,16,16,16
9025 DATA146,254,124,16,0,48,96,96,254,96,96,48,0,16,124,254,146,16,16,16,0,24
9030 DATA12,12,254,12,12,24,0

     Partes y Formato del Laberinto
9100 DATA"JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ","J        JJ          JJ        J"
9110 DATA"JJJJJJ JJJJJJ JJJJ JJJJJJ JJJJJJ","JJJJJJ JJ              JJ JJJJJJ"
9120 DATA"J   JJ JJ JJJJJ  JJJJJ JJ JJ   J","J         JJJJJ  JJJJJ         J"
9130 DATA"J   JJJJJ JJJ      JJJ JJJJJ   J","JJJJJJJJJ              JJJJJJJJJ"
9140 DATA"122333455678876554333221"



APUNTES FINALES
Esta es la tercera versión que programo de este juego, después de las versiones de MSX y ORIC-1.

El código BASIC es una copia casi idéntica de la versión MSX, al que le he tenido que ajustar el puntero a la memoria de vídeo. Posteriormente he tenido que realizar algún cambio ya que detecté, después de volverme loco, que al anidar un IF en una misma línea, el ELSE reacciona de forma distinta. Por otra parte, al modificar el RAMTOP me destruía el tamaño de la matriz "L" y la dejaba en 10 elementos, obligándome a moverla a la línea 90. Con el cambio de los LOCATE/PRINT por CHAR, y la lectura del teclado, el juego funcionó bien.

Para conseguir una velocidad igual a la del juego original he accedido directamente a la memoria de video mediante POKE.

Principales descartes respecto al juego original:
- El juego original permite 2 jugadores simultáneos.
- La pantalla tiene 28 filas y 32 columnas, pero aquí solo 24 filas y 32 columnas.
- En el juego original hay 84 minas y aquí 64, ya que la zona de juego es más pequeña.

Por el resto, la mecánica del juego se ha respetado en su totalidad.

Reacción en cadena
El juego es técnicamente muy sencillo y la única dificultad, resuelta en la versión MSX, consiste en saber como resolver el problema de las explosiones de minas en cadena, ya que fácilmente pueden haber 2 o más minas juntas. Para ello se ha creado una matriz de 68 elementos (uno por mina) con dos punteros: “M“ y “N”.

Cuando nuestro disparo detecta que hemos tocado una mina incrementa el puntero “N”, guarda su posición en la matriz y la borra de la pantalla. A continuación se revisan las posiciones que hay alrededor. Cada vez que se encuentra otra mina se realiza la misma acción.

En la línea 140 miramos si el puntero “M” es inferior a “N” y si es cierto, vamos a la rutina que las hace explotar, incrementando el puntero “M”.


El juego ha sido programado en un Plus/4 real y la imagen del disquete se ha pasado a PC mediante un interface 1541-III.

Os invito a probarlo.

Blasto_System.jpg

Imagen

Imagen

Imagen

Imagen

Imagen

Imagen

Imagen
Adjuntos
Blasto_1.gif
Blasto_1.gif (16.45 KiB) Visto 60 veces
Blasto_6.gif
Blasto_6.gif (25.43 KiB) Visto 60 veces
Blasto_5.gif
Blasto_5.gif (28.22 KiB) Visto 60 veces
Blasto_4.gif
Blasto_4.gif (40.18 KiB) Visto 60 veces
Blasto_3.gif
Blasto_3.gif (6.84 KiB) Visto 60 veces
Blasto_2.gif
Blasto_2.gif (37.91 KiB) Visto 60 veces

Avatar de Usuario
ron
Mensajes: 17180
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 508 veces
Agradecimiento recibido: 532 veces

Re: BLASTO para Commodore Plus/4 - C16

Mensajepor ron » 15 Feb 2016 22:49

Probado y jugado. De hecho hasta se puede compilar.

De nuevo lo has vuelto a hacer. Te congratulo

Avatar de Usuario
jojo073
Mensajes: 3136
Registrado: 14 Nov 2010 20:41
Agradecido : 39 veces
Agradecimiento recibido: 85 veces

Re: BLASTO para Commodore Plus/4 - C16

Mensajepor jojo073 » 16 Feb 2016 10:25

Genial!!!!
gran trabajo!!!

dancresp
Mensajes: 4993
Registrado: 13 Nov 2010 02:08
Agradecido : 14 veces
Agradecimiento recibido: 83 veces

Re: BLASTO para Commodore Plus/4 - C16

Mensajepor dancresp » 20 Feb 2016 11:56

ron escribió:Probado y jugado. De hecho hasta se puede compilar.

¿Compilar?

¿Que nos traes ahora ron?

Avatar de Usuario
ron
Mensajes: 17180
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 508 veces
Agradecimiento recibido: 532 veces

Re: BLASTO para Commodore Plus/4 - C16

Mensajepor ron » 20 Feb 2016 12:46

dancresp escribió:
ron escribió:Probado y jugado. De hecho hasta se puede compilar.

¿Compilar?

¿Que nos traes ahora ron?


¿ quién yoooo ? , nada Wally !
Simplemente y como no te has quejado de la velocidad, he explorado un poco algunas opciones, pero no traigo nada -no

Ahora bien, te lo pongo a huevo, ¿ porqué tiene algún sentido qué lo haga yo y los demás no ?

Ascompiler_16_V1.0.zip
(2.94 KiB) Descargado 30 veces

Austrospeed_Compiler_(english).zip
(16.89 KiB) Descargado 26 veces

c16_tiny_basic_compiler.zip
(5.31 KiB) Descargado 32 veces

micro-basic-compiler_manual_v2.zip
(7.84 KiB) Descargado 46 veces


y hay muchos más....

saludos


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 2 invitados