Juego SuperBASIC: Frontón

Subforo oficial del Sinclair QL: realiza aquí las consultas relativas a tu QL.

Moderador: Sir Cilve Sinclair

Juego SuperBASIC: Frontón

Notapor radastan el Mie Ene 14, 2009 7:01 pm

Vamos a empezar con un juego sencillito, programado como si fuese BASIC del Spectrum:

Imagen

Código: Seleccionar todo
100 MODE 8
110 PAPER 0: INK 7: CLS
120 BORDER 4,6
130 LET bx=10: LET by=10: LET rx=1:LET ry=1:LET x=16: LET re=0
140 AT 18,x:PRINT "<-->"
150 IF KEYROW(5)=128 AND x>0 THEN LET x=x-1: AT 18,x:PRINT "<--> "
160 IF KEYROW(4)=32 AND x<32 THEN AT 18,x:PRINT " <-->":LET x=x+1
170 LET re=re+1:IF re<2 THEN GO TO 150
180 LET re=0
190 IF bx=0 THEN LET rx=1
200 IF bx=35 THEN LET rx=-1
210 IF by=0 THEN LET ry=1
220 IF by=18 THEN GO TO 260
230 IF by=17 AND x-2<bx AND bx<x+5 THEN LET ry=-1
240 AT by,bx: PRINT " ": LET bx=bx+rx: LET by=by+ry: AT by,bx:PRINT "o"
250 GO TO 150
260 FOR b=0 TO 7:BORDER 4,b:NEXT b: CLS: GO TO 120


Bien veamos línea por línea cómo funciona:

Código: Seleccionar todo
100 MODE 8
110 PAPER 0: INK 7: CLS
120 BORDER 4,6


La línea 100 indica el modo en que vamos a trabajar, en este caso el 8 (256x256x8 colores).

La línea 110 indica el valor de fondo (paper) y tinta (ink) que queremos, y después borramos la ventana. Como no hemos definido ninguna ventana borrará toda la pantalla. Los colores van del 0 (negro) al 7 (blanco) de forma muy similar a la del ZX Spectrum.

Con la línea 120 trazamos un borde en la ventana, en este caso toda la pantalla. Ojo, no es la misma sentencia que en el ZX Spectrum, aquí realizamos un cuadro en el borde de la ventana activa, y en este caso 4 es el grosor en pixels del borde y 6 el color de ese borde (amarillo).

Código: Seleccionar todo
130 LET bx=10: LET by=10: LET rx=1:LET ry=1:LET x=16: LET re=0
140 AT 18,x:PRINT "<-->"


Con estas dos líneas iniciamos el juego:

- bx y by son la posición x e y de la bola
- rx y ry son el incremento horizontal y vertical de la bola
- x es la posición de la raqueta
- re es una variable para repetir dos veces la lectura del teclado, es para que la raqueta se mueva más rápida que la bola

Con la línea 140 ponemos en posición inicial la raqueta en pantalla.

Código: Seleccionar todo
150 IF KEYROW(5)=128 AND x>0 THEN LET x=x-1: AT 18,x:PRINT "<--> "
160 IF KEYROW(4)=32 AND x<32 THEN AT 18,x:PRINT " <-->":LET x=x+1


La línea 150 lee si hemos pulsado la tecla "o" y si es así, y además la posición de la raqueta no supera el borde izquierdo, disminuye el valor x de la raqueta y dibuja la misma en la nueva posición dejando un espacio para borrar el rastro. La línea 160 es lo mismo pero aplicado a la tecla "p", y en este caso incrementamos el valor x de la raqueta.

Es importante notar lo siguiente, de cara al número de columnas para el PRINT en MODO 8 tenemos disponibles 36, el borde de 4 pixels no cuenta. De igual forma en SuperBASIC el número de filas es de 19, por lo que los valores tope son de 0 a 18 para el valor vertical y de 0 a 35 para el horizntal.

Código: Seleccionar todo
170 LET re=re+1:IF re<2 THEN GO TO 150
180 LET re=0


Con la línea 170 realizamos un bucle de dos ciclos en el control de la raqueta, para que vaya más deprisa su movimiento que el de la bola.
Con la línea 180 ponemos el contador de ciclo a 0 nuevamente.

Y pasamos a la parte del rebote de la bola y cómo detectamos que se ha salido del campo de juego:

Código: Seleccionar todo
190 IF bx=0 THEN LET rx=1
200 IF bx=35 THEN LET rx=-1
210 IF by=0 THEN LET ry=1
220 IF by=18 THEN GO TO 260
230 IF by=17 AND x-2<bx AND bx<x+5 THEN LET ry=-1


En la línea 190 y 200 vemos el valor horizontal de la bola, si llega al borde (0 o 35) invertimos el valor de incremento de la posición horizontal (rebote).
En la línea 210 vemos si la bola toca arriba (0 en vertical) y rebotamos consecuentemente.

En la línea 220 detectamos que la bola se ha salido del campo de juego, ya que no le hemos dado con la raqueta y saltamos a una línea para indicar al jugador tal situación.

La línea 230 comprueba que la raqueta está correctamente situada bajo la pelota y proporciona un rebote vertical si eso pasa. La raqueta ocupa 4 posiciones (desde x a x+3), por lo que la bola debería estar comprendida en dicho rango. Metemos un espacio más de margen debido a que la pelota viene siempre en diagonal, y por lo tanto puede darse el caso que justo debajo de ella no haya raqueta, pero en la siguiente posición si.

Código: Seleccionar todo
240 AT by,bx: PRINT " ": LET bx=bx+rx: LET by=by+ry: AT by,bx:PRINT "o"
250 GO TO 150
260 FOR b=0 TO 7:BORDER 4,b:NEXT b: CLS: GO TO 120


La línea 240 borra la pelota, incrementa los valores vertical y horizontal de la misma, y vuelve a dibujarla en la nueva posición.
La línea 250 cierra el bucle.
La línea 260 realiza un bonito efecto en el borde cambiándolo de color (del 0 al 7), borra la pantalla, y vuelve a empezar.

Y esto es todo, así sería un juego sencillote escrito como si fuera para ZX Spectrum, supongo que ahora vendrán Badaman y AFX a dar la versión correcta para QL empleando como es debido los nuevos comandos del Super BASIC.
Ultima edición por radastan el Jue Ene 15, 2009 11:00 am, editado 1 vez en total
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2174
Registrado: Lun May 07, 2007 5:34 pm

Re: Juego SuperBASIC: Frontón

Notapor badaman el Mie Ene 14, 2009 9:07 pm

El juego con las estructuras de SuperBASIC

Código: Seleccionar todo
100 MODE 8: PAPER 0: INK 7: fin=0
110 :
120 REPeat juego
130   preparar: jugar
140   IF fin THEN EXIT juego
150   fallaste
160 END REPeat juego
170 STOP
180 :
190 DEFine PROCedure preparar
200   CLS: BORDER 4,6
210   bx=10: by=10: rx=1: ry=1: x=16: y=18: re=2
220   AT y,x: PRINT "<-->": AT bx,by: PRINT "o"
230 END DEFine preparar
240 :
250 DEFine PROCedure jugar
260   REPeat accion
270     FOR b=1 TO re
280       IF KEYROW(5)=128 AND x>0 THEN x=x-1: AT y,x: PRINT "<--> "
290       IF KEYROW(4)=32 AND x<32 THEN AT y,x: PRINT " <-->": x=x+1
300       IF KEYROW(6)=8 THEN fin=1: RETurn
310     END FOR b
320     IF by=18 THEN EXIT accion
330     IF by=0 OR (by=17 AND x-2<bx AND bx<x+5) THEN ry=-ry
340     IF bx=0 OR bx=35 THEN rx=-rx
350     AT by,bx: PRINT " ": bx=bx+rx: by=by+ry: AT by,bx: PRINT "o"
360   END REPeat accion
370 END DEFine jugar
380 :
390 DEFine PROCedure fallaste
400   FOR b=0 TO 7: BORDER 4,b
410 END DEFine fallaste


En la línea 300 comprobamos que se ha pulsado la tecla "Q" para salir del juego.

Podríamos haber evitado usar la variable "fin" y quitado la linea 140 para comprobar si debemos abandonar el juego, es decir, quedandolas así:

Código: Seleccionar todo
100 MODE 8: PAPER 0: INK 7
110 :
120 REPeat juego
130   preparar: jugar: fallo
160 END REPeat juego
170 STOP


si hubíesemos sustituido la linea 300 por esta otra:

Código: Seleccionar todo
300       IF KEYROW(6)=8 THEN EXIT juego


La línea:

Código: Seleccionar todo
170 STOP


tampoco necesaria. Al llegar el programa a este punto se termina, pues no hay mas lineas que ejecutar. Los procedures se cargan al inicio y no se ejecutan hasta que se los llama.

todo esto se ha dejado para que se lea mejor el código.
Ultima edición por badaman el Jue Ene 15, 2009 11:55 am, editado 3 veces en total
Sinclair QL, la respuesta profesional de los 80
Avatar de Usuario
badaman
Sabreman
 
Mensajes: 474
Registrado: Mar Ene 29, 2008 11:58 am

Re: Juego SuperBASIC: Frontón

Notapor badaman el Mie Ene 14, 2009 10:31 pm

Más estructurado aún.

Por cierto, creo que hay un problema en la comprobación de la pelota sobre la raqueta que hay que corregir. Línea 230 en tu programa. Prueba a ejecutar tu programa (y los mios) sin mover la raqueta y verás lo que te digo.

P.S. Modificados los programas con la nueva línea recomendada por Radastan más abajo.

Código: Seleccionar todo
100 MODE 8: PAPER 0: INK 7
110 :
120 REPeat juego: preparar: jugar: fallaste
130 :
140 DEFine PROCedure preparar
150   CLS: BORDER 4,6
160   bx=10: by=10: rx=1: ry=1: x=16: y=18: re=2
170   AT y,x: PRINT "<-->": AT bx,by: PRINT "o"
180 END DEFine preparar
190 :
200 DEFine PROCedure jugar
210   REPeat accion: teclado: pelota: IF by=18 THEN EXIT accion
220 END DEFine jugar
230 :
240 DEFine PROCedure teclado
250     FOR b=1 TO re
260       IF KEYROW(5)=128 AND x>0 THEN x=x-1: AT y,x: PRINT "<--> "
270       IF KEYROW(4)=32 AND x<32 THEN AT y,x: PRINT " <-->": x=x+1
280       IF KEYROW(6)=8 THEN EXIT juego
290     END FOR b
300 END DEFine teclado
310 :
320 DEFine PROCedure pelota
330     IF by=0 OR (by=17 AND x-2<bx AND bx<x+5) THEN ry=-ry
340     IF bx=0 OR bx=35 THEN rx=-rx
350     AT by,bx: PRINT " ": bx=bx+rx: by=by+ry: AT by,bx: PRINT "o"
360 END DEFine pelota
370 :
380 DEFine PROCedure fallaste
390   FOR b=0 TO 7: BORDER 4,b
400 END DEFine fallaste
Ultima edición por badaman el Jue Ene 15, 2009 12:16 pm, editado 7 veces en total
Sinclair QL, la respuesta profesional de los 80
Avatar de Usuario
badaman
Sabreman
 
Mensajes: 474
Registrado: Mar Ene 29, 2008 11:58 am

Re: Juego SuperBASIC: Frontón

Notapor radastan el Mie Ene 14, 2009 10:58 pm

En el emulador va de perlas, si no muevo la raqueta bota sin problemas, y llevo unas cuantas pachangas a lo tonto... dime exactamente qué problema ves.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2174
Registrado: Lun May 07, 2007 5:34 pm

Re: Juego SuperBASIC: Frontón

Notapor radastan el Jue Ene 15, 2009 12:44 am

Vale, ya se lo que dices.

Se da el caso, raro pero se da, en que pasa lo siguiente: la bola viene en diagonal por la izquierda y si resulta que justo debajo no hay raqueta... pues la traspasa por la esquina. Eso es debido a que la línea:

230 IF by=17 AND x-1<bx AND bx<x+4 THEN LET ry=-1

no comprueba si la pelota viene en diagonal, lo que en este programa hace siempre.

Eso se resuelve, en teoría, añadiendo:

235 IF by=17 AND rx=1 AND bx=x+1 THEN LET ry=-1

Mañana pruebo si funciona, el emu lo tengo en el curro y en casa aún tengo el PC medio fuera de juego.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2174
Registrado: Lun May 07, 2007 5:34 pm

Re: Juego SuperBASIC: Frontón

Notapor afx el Jue Ene 15, 2009 2:12 am

radastan escribió:Vamos a empezar con un juego sencillito, programado como si fuese BASIC del Spectrum:

Ufff ... siempre me he atragantado al seguir un programa BASIC al "estilo Spectrum" (grrrrr). La versión SuperBasic de badaman es más "humana", se lee mejor ¿no?.

badaman escribió:Más estructurado aún.

Badaman, me gustaba más tu primera versión, la veo más comprensible.

Desde mi punto de vista, ahí van un par de refinamientos tomando como referencia la primera versión de badaman:
Código: Seleccionar todo
MODE 8: PAPER 0: INK 7
110 :
120 REPeat juego
130   preparar
140   IF jugar() = 1 THEN EXIT juego
150   fallaste
160 END REPeat juego
170 STOP
180 :
190 DEFine PROCedure preparar
200   CLS: BORDER 4,6
230 END DEFine preparar
240 :
250 DEFine FUNCtion jugar% ()
252   LOCal bx, by, rx, ry, x, y, re,
255   bx=10: by=10: rx=1: ry=1: x=16: y=18: re=2
257   AT y,x: PRINT "<-->": AT bx,by: PRINT "o"
260   REPeat accion
270     FOR b=1 TO re
280       IF KEYROW(5)=128 AND x>0 THEN x=x-1: AT y,x: PRINT "<--> "
290       IF KEYROW(4)=32 AND x<32 THEN AT y,x: PRINT " <-->": x=x+1
300       IF KEYROW(6)=8 THEN RETurn 1
310     END FOR b
320     IF by=18 THEN EXIT accion
330     IF by=0 OR (by=17 AND x-1<bx AND bx<x+4) THEN ry=-ry
340     IF bx=0 OR bx=35 THEN rx=-rx
350     AT by,bx: PRINT " ": bx=bx+rx: by=by+ry: AT by,bx: PRINT "o"
360   END REPeat accion
365   RETURN 0
370 END DEFine jugar
380 :
390 DEFine PROCedure fallaste
400   FOR b=0 TO 7: BORDER 4,b
410 END DEFine fallaste


(No he probado esta versión, es posible que haya algún error sintáctico y esto no se ejecute).

Algunos cambios y opiniones:

- No usar variables globales (en esta versión no hace falta ninguna), las variables las he puesto como LOCal donde hacen falta.
- Cada prodecimiento o función debe hacer su trabajo (y sólo su trabajo) sin dependecias de variables globales (o las menos posibles). Por ejemplo "preparar" sólo prepara la pantalla y no debe hacer otra cosa, en la versión anterior "Preparar" asumía funciones de la lógica del juego, inicializando variables por ejemplo. De esta forma aumenta también la reutilización de procedimiento o funciones en otros programas. También, cuando la cosa se complica es más simple de depurar el programa.
- A voz de pronto creo que todas las variables podrían ser ser entereas (x%, y%) en lugar de decimales (x, y). Con ello deberíamos ganar en eficiencia.
- "Jugar" es ahora una función (devuelve un valor entero para el control de la secuencia principal).
- Cuando se necesite velocidad, los bucle FOR se deberín sustituir por un REPeat. Los FOR (si mal no recuerdo) necesitan de una variable decimal para el control del bucle, con REPeat podemos hacer los mismo con variables enteras (ganaríamos en eficiencia).
- El PRINT " " se podría sustituir por PRINT "O" otra vez sobre en la posición anterior con OVER 1 (creo). Esto si mal no recuerdo hace un XOR en la pantalla, es decir, dejaría el fondo como al principio.
afx
Sabreman
 
Mensajes: 396
Registrado: Dom Feb 24, 2008 11:56 pm

Re: Juego SuperBASIC: Frontón

Notapor badaman el Jue Ene 15, 2009 2:28 am

Muy buena idea la de usar una FuNtion y variables locales.

Respecto a las variables enteras, no se si hay ventana o no en un programa interpretado. Desde luego no hay duda que si vamos a compilar el programa es la mejor opción hacer las variables enteras.

Por cierto, Radas se quejaba del tamaño del código, así que he retocedido un poco, obviando la programación estructurada, y se lo he dejado en puritito SuperBASIC:

Código: Seleccionar todo
100 MODE 8: PAPER 0: INK 7: fin=0
110 REPeat juego
120   CLS: BORDER 4,6
130   bx=10: by=10: rx=1: ry=1: x=16: y=18: re=2
140   AT y,x: PRINT "<-->": AT bx,by: PRINT "o"
150   REPeat accion
160     FOR b=1 TO re
170       IF KEYROW(5)=128 AND x>0 THEN x=x-1: AT y,x: PRINT "<--> "
180       IF KEYROW(4)=32 AND x<32 THEN AT y,x: PRINT " <-->": x=x+1
190       IF KEYROW(6)=8 THEN EXIT juego
200     END FOR b
210     IF by=18 THEN EXIT accion
220     IF by=0 OR (by=17 AND x-2<bx AND bx<x+5) THEN ry=-ry
230     IF bx=0 OR bx=35 THEN rx=-rx
240     AT by,bx: PRINT " ": bx=bx+rx: by=by+ry: AT by,bx: PRINT "o"
250   END REPeat accion
260   FOR b=0 TO 7: BORDER 4,b
270 END REPeat juego


Sobre la modificación de la linea quedice Radas, mañana lo pruebo.
Ultima edición por badaman el Jue Ene 15, 2009 11:54 am, editado 1 vez en total
Sinclair QL, la respuesta profesional de los 80
Avatar de Usuario
badaman
Sabreman
 
Mensajes: 474
Registrado: Mar Ene 29, 2008 11:58 am

Re: Juego SuperBASIC: Frontón

Notapor radastan el Jue Ene 15, 2009 8:50 am

Mucho mejor la versión de Badaman. A lo largo de la mañana comenzaré a optimizar la cosa, va lento para mi gusto y necesitaremos velocidad para evolucionar a Arkanoid.

Afx, en un juego la programación estructurada es importante para ser altamente legible, pero en un arcade es crucial la velocidad a toda costa (incluso si es necesario que el código sea ilegible), Tenlo en cuenta.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2174
Registrado: Lun May 07, 2007 5:34 pm

Re: Juego SuperBASIC: Frontón

Notapor radastan el Jue Ene 15, 2009 10:59 am

Vale comprobado, la solución al problema es cambiar la línea 230 por:

230 IF by=17 AND x-2<bx AND bx<x+5 THEN LET ry=-1

Asunto resuelto.

Cambio el programa en el primer post.

Si lo hacemos como es correcto en SuperBASIC, usando el ejemplo de Badaman:

Código: Seleccionar todo
100 MODE 8: PAPER 0: INK 7
110 REPeat juego
120   CLS: BORDER 4,6
130   bx=10: by=10: rx=1: ry=1: x=16: y=18: re=2
140   AT y,x: PRINT "<-->": AT bx,by: PRINT "o"
150   REPeat accion
160     FOR b=1 TO re
170       IF KEYROW(5)=128 AND x>0 THEN x=x-1: AT y,x: PRINT "<--> "
180       IF KEYROW(4)=32 AND x<32 THEN AT y,x: PRINT " <-->": x=x+1
190       IF KEYROW(6)=8 THEN EXIT juego
200     END FOR b
210     IF by=18 THEN EXIT accion
220     IF by=0 OR (by=17 AND x-2<bx AND bx<x+5) THEN ry=-ry
230     IF bx=0 OR bx=35 THEN rx=-rx
240     AT by,bx: PRINT " ": bx=bx+rx: by=by+ry: AT by,bx: PRINT "o"
250   END REPeat accion
260   FOR b=0 TO 7: BORDER 4,b
270 END REPeat juego


Y tengo malas noticias, cambiar IF por GOTO es inapreciable en QL, esto es lo que hay en velocidad, no hay más. Me da rabia lo mal optimizado que está el intérprete BASIC, con el procesador que tiene debería ir al doble o más que el BASIC del Spectrum, y sin embargo es más lento.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2174
Registrado: Lun May 07, 2007 5:34 pm

Re: Juego SuperBASIC: Frontón

Notapor badaman el Jue Ene 15, 2009 12:29 pm

radastan escribió:Afx, en un juego la programación estructurada es importante para ser altamente legible, pero en un arcade es crucial la velocidad a toda costa (incluso si es necesario que el código sea ilegible), Tenlo en cuenta.


La diferencia de velocidad a la que aludes no se ve conprometida usando las estruturas de SuperBASIC. El uso de GOTOs o de REPeat tiene exactamente el mismo efecto, ambos son saltos a un apuntador, el primero a un número de línea, el segundo a una etiqueta.

Igualmente ocurre con los GOSUBs y los PROCedures. Y créeme Radas, en cuanto tu programa crezca verás como emplear programación estructurada te ayudará a no perder el hilo de lo que estás haciendo.

radastan escribió:Vale comprobado, la solución al problema es cambiar la línea 230 por:

230 IF by=17 AND x-2<bx AND bx<x+5 THEN LET ry=-1


Vale, parece que se ha solucionado. Habría que probar que ocurre con valores x<0 ó x>35.

Tendrás que añadir además cierta aleatoriedad al rebote, pues ahora las trayectorias son completamente predecibles.

radastan escribió:Y tengo malas noticias, cambiar IF por GOTO es inapreciable en QL, esto es lo que hay en velocidad, no hay más. Me da rabia lo mal optimizado que está el intérprete BASIC, con el procesador que tiene debería ir al doble o más que el BASIC del Spectrum, y sin embargo es más lento.


Usando un emulador me sorprende que saques conclusiones tan rotundas. Desde luego el SuperBASIC no es el Fernando Alonso de los intérpretes, pero hasta que no pruebes un QL real, no lo podrás afirmar.

Si estás usando QLay2 o QL2K comprueba que los valores de retardo de tu emulador están bien configurados. ejecuta el programa ft_bas que viene con el emulador para afinar los parámetros.
Sinclair QL, la respuesta profesional de los 80
Avatar de Usuario
badaman
Sabreman
 
Mensajes: 474
Registrado: Mar Ene 29, 2008 11:58 am

Re: Juego SuperBASIC: Frontón

Notapor radastan el Jue Ene 15, 2009 1:16 pm

badaman escribió:
radastan escribió:Y tengo malas noticias, cambiar IF por GOTO es inapreciable en QL, esto es lo que hay en velocidad, no hay más. Me da rabia lo mal optimizado que está el intérprete BASIC, con el procesador que tiene debería ir al doble o más que el BASIC del Spectrum, y sin embargo es más lento.


Usando un emulador me sorprende que saques conclusiones tan rotundas. Desde luego el SuperBASIC no es el Fernando Alonso de los intérpretes, pero hasta que no pruebes un QL real, no lo podrás afirmar.

Si estás usando QLay2 o QL2K comprueba que los valores de retardo de tu emulador están bien configurados. ejecuta el programa ft_bas que viene con el emulador para afinar los parámetros.


El emulador ya lo tengo ajustado (va como un QL real) y hace un tiempo ya tuve un QL y sentí la misma sensación, el SuperBASIC es lento.

Es más, hice unos "test" realizando bucles y ciertamente es más lento, en lo único que gana el QL es generando gráficos con relleno. Y es esto último su mayor virtud, ya que su flexibilidad gráfica, además de las estructuras de SuperBASIC, lo hacen ideal para juegos de mesa, aventuras conversacionales, y muchos juegos en los que la velocidad no es crucial pero si tienen mucha complejidad a nivel de programación.

No obstante estoy empeñado en sacarle el jugo al QL, a ver que sale.

A por el Arkanoid...
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2174
Registrado: Lun May 07, 2007 5:34 pm

Re: Juego SuperBASIC: Frontón

Notapor badaman el Jue Ene 15, 2009 1:37 pm

Pues entonces siempre te queda la opción de compilar tus programas con Turbo (anteriormente conocido como SuperCharge) o con QLiberator.
Sinclair QL, la respuesta profesional de los 80
Avatar de Usuario
badaman
Sabreman
 
Mensajes: 474
Registrado: Mar Ene 29, 2008 11:58 am

Re: Juego SuperBASIC: Frontón

Notapor radastan el Jue Ene 15, 2009 1:52 pm

Por cierto, esto va por AFX, de momento no voy a hacer el Arkanoid (no es cosa de pisar el proyecto que tienes entre manos) pero como no espabiles le meto mano.

:wink:

Esta tarde me pongo con un sencillo juego de coches, tengo ganas de un BASIC Rally en QL.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2174
Registrado: Lun May 07, 2007 5:34 pm

Re: Juego SuperBASIC: Frontón

Notapor badaman el Jue Ene 15, 2009 2:52 pm

Este es un juego llamado "glub_bas" que hice hace la tira de años, en los 80.

Imagen

El código habría que revisarlo y la idea del juego podría mejorarse, pero os lo dejo aquí tal cual, a modo de ejemplo, para animaros a hacer vuestras propias locuras.

las bolitas van cayendo y tú debes comerlas atrapándolas en su caída. A más comas más alto subirás en la pantalla y más dificil será comerlas.

Cada bola vale un punto, y hay un total de 60 bolas.

Al final sabrás el procentaje de aciertos que has tenido.

El juego se maneja con las teclas del cursor "izquierda" y "derecha".
La tecla "P" es para pausa.
Una vez terminado el juego debemos pulsar cualquier tecla o ESC para salir.
Con CTRL + "Espacio" volvemos a la linea de comandos en cualquier momento.

Código: Seleccionar todo
100 MODE 8
110 REPeat juego
120   PAPER 0: INK 0: CLS
130   PAPER #0,4: INK #0,0: CLS#0
140   STRIP 5
150   FOR i=0 TO 19
160     PRINT " ";: STRIP 255: PRINT FILL$(CHR$(255),11);: STRIP 5: PRINT " ";
170     STRIP 0: PRINT "           ";: STRIP 5
180     PRINT " ";: STRIP 255: PRINT FILL$(CHR$(255),11);: STRIP 5: PRINT " "
190   END FOR i
200   STRIP 0: AT #0,2,14: PRINT #0, "G L U B !"
210   niv=18: p=0: t=60: s=17: b=18: c=0
220   REPeat accion
230     a=INT (RND*11)+13
240     t=t-1: IF t=-1 THEN EXIT accion
250     FOR i=1 TO 19
260       AT i-1,a: PRINT " "
270       AT i,a: INK 6: PRINT "."
280       IF KEYROW(4)=32 THEN PAUSE
290       IF KEYROW(1)=2  THEN b=b-1: s=b+1
300       IF KEYROW(1)=16 THEN b=b+1: s=b-1
310       IF b<=13 THEN b=13: s=14
320       IF b>=23 THEN b=23: s=22
330       AT niv,b: INK 3: PRINT "V"
340       AT niv,s: PRINT " "
350       IF i=niv AND a=b THEN p=p+1: BEEP 3000,39,3,10,-5,13,2,1: EXIT i
360     END FOR i
370     AT i-1,a: PRINT " "
380     AT 3,2: INK 2: PRINT "PUNTOS:";p
390     AT 3,34: PRINT " "
400     AT 3,26: INK 1: PRINT "QUEDAN:";t
410     c=c+1 : IF c=6 THEN AT niv,b: PRINT " ": niv=niv-1: c=0
420   END REPeat accion
430   FOR i=20 TO 1 STEP -1: BEEP 3000,100
440   w=INT ((100*p)/60)
450   INK 7: STRIP 0: AT 10,14: PRINT "GAME OVER"
460   AT #0,1,4: PRINT #0," Porcentaje de aciertos:"!w;"% "
470   AT #0,2,4: PRINT #0," Pulse una tecla para jugar. "
480   REPeat bucle: a$=INKEY$(-1): IF a$<>"" THEN EXIT bucle
490   IF KEYROW(1)=8 THEN STOP
500 END REPeat juego
Sinclair QL, la respuesta profesional de los 80
Avatar de Usuario
badaman
Sabreman
 
Mensajes: 474
Registrado: Mar Ene 29, 2008 11:58 am

Re: Juego SuperBASIC: Frontón

Notapor afx el Jue Ene 15, 2009 10:25 pm

radastan escribió:Por cierto, esto va por AFX, de momento no voy a hacer el Arkanoid (no es cosa de pisar el proyecto que tienes entre manos) pero como no espabiles le meto mano.

Te cedo el testigo ... :D :D

No te preocupes por lo de "pisar proyectos" (aquí nadie tenemos la exclusiva de nada y estamos para pasarlo bien). En estos momentos no tengo mucho tiempo para retomar el juego que comencé. Para que no decaiga el interés es bueno que tú desarrolles lo que te apetezca, los demás seguro que nos divertiremos en el proceso.

Si más adelante decido retomar el jueguillo que empecé ... pues mejor ... habrán dos Arknoid (espero hacerlo, ya que tengo algunas piezas ya montadas, badaman tambíen me pasó algunas pantallas y algunas rutinas). Además si para entonces tú tienes el tuyo mucho mejor (así que me podré copiar tus mejores ideas ... bueno mejor dicho tomaré prestadas tus rutinas).


PD:
Si lo decides hacer en "plan bien", no te olvides de montar esa "DICHOSA" rutina de sprites de modo que la podamos usar los demás.
afx
Sabreman
 
Mensajes: 396
Registrado: Dom Feb 24, 2008 11:56 pm

Siguiente

Volver a Sinclair QL

¿Quién está conectado?

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

cron