Página 1 de 1

MISSILE DODGE - Juego BASIC para CoCo-2 en una línea

Publicado: 08 Nov 2012, 22:28
por dancresp
A raíz del juego "Missile Dodge - un juego en BASIC para TRS-80 BASIC en una sola línea" me quedé perplejo porque la verdad es que nunca se me había ocurrido hacer algo parecido: un programa en una única línea.

El funcionamiento del juego es muy simple: Introducimos el nivel de dificultad, pulsamos ENTER y con las teclas cursoras controlamos un asterisco con el que esquivamos los signos de admiración que suben por la pantalla. Al chocar con uno acaba el juego. Todo en una única línea de código.

Visto que es posible, me planteé adaptarlo a otros sistemas y aquí es donde deduje que el BASIC de los candidatos han de cumplir dos condiciones básicas:

1) El comando IF deben soportar el ELSE.
2) El sistema debe permitir líneas de un mínimo de 255 bytes (aprox).

Con éstas condiciones, sistemas como el SPECTRUM, COMMODORE 64 y VIC-20, ORIC-1/ATMOS, entre otros, quedan descartados.

En cambio otros sistemas como el DRAGON/COCO, COMMODORE 16, MSX, ACORN o AMSTRAD CPC lo permiten.

Mi primer planteamiento fue adaptar el programa al ORIC, pero la longitud máxima de la línea BASIC es demasiado corta (80 caracteres, creo recordar), así que opté por el DRAGON, pero como ya he hecho alguna cosilla y en cambio en el Radio Shack TRS-80 CoCo-2 no había hecho nada...

En este sistema, el tamaño de las líneas pueden ser de hasta 255 caracteres, y cambiando alguna dirección de memoria o valor en la lectura del teclado el programa ha funcionado perfectamente.

Aquí tenéis la adaptación:
1 IFI=0THENCLS:PRINT"MISSILE DODGE: LEFT,RIGHT":INPUT"DIFFICULTY";D:CLS:I=1:GOTO1 ELSE FORX=1TOD:
PRINT@479+RND(32),"­!";:NEXT:PRINT:P=P+(PEEK(343)=247ANDP>0)-
(PEEK(344)=247ANDP<31):IFPEEK(1024+P)=97THENPRINT"SCORE";S ELSE PRINT@P,"*";:S=S+1:GOTO1


DSC_0555.jpg
DSC_0555.jpg (84.78 KiB) Visto 9229 veces

DSC_0563.jpg
DSC_0563.jpg (81.35 KiB) Visto 9229 veces

DSC_0564.jpg
DSC_0564.jpg (67.63 KiB) Visto 9229 veces

DSC_0562.jpg
DSC_0562.jpg (64.06 KiB) Visto 9229 veces

Re: MISSILE DODGE - Juego BASIC para CoCo-2 en una línea

Publicado: 08 Nov 2012, 22:42
por zup
dancresp escribió:Con éstas condiciones, sistemas como el SPECTRUM, COMMODORE 64 y VIC-20, ORIC-1/ATMOS, entre otros, quedan descartados.


Para este programa en concreto, quizás. Recuerdo haber visto un programa publicado en Microhobby de una sola línea y creo también que hay por ahí algún concurso para estas cosas.

Re: MISSILE DODGE - Juego BASIC para CoCo-2 en una línea

Publicado: 09 Nov 2012, 12:09
por radastan
¿No te vale un juego con scroll y todo en 5 líneas?

http://microhobby.speccy.cz/mhf/198/MH198_16.jpg

Abajo a la derecha.

Realmente se puede reducir a 3 líneas.

Re: MISSILE DODGE - Juego BASIC para CoCo-2 en una línea

Publicado: 09 Nov 2012, 13:25
por zitror
¡Vaya dos! :lol:

Re: MISSILE DODGE - Juego BASIC para CoCo-2 en una línea

Publicado: 09 Nov 2012, 15:04
por xgipe
Para todos los que se quieran animar, el MSX Resource Center (MSX.ORG) ha organizado un concurso de programas en un máximo de 10 líneas de BASIC... ;) (Ya sé que los "fieras" que corren por aquí son capaces de hacerlo en mucho menos...) \:D/
Más información en este enlace.

Saludos,
Xgipe

Re: MISSILE DODGE - Juego BASIC para CoCo-2 en una línea

Publicado: 12 Dic 2012, 14:24
por na_th_an
33 juegos de una sola linea para ZX Spectrum, de un hilo de WOS hace unos años bastante interesante:

http://www.worldofspectrum.org/infoseek ... id=0017912

El hilo:

http://worldofspectrum.org/forums/showt ... t=oneliner

Re: MISSILE DODGE - Juego BASIC para CoCo-2 en una línea

Publicado: 12 Dic 2012, 14:40
por na_th_an
radastan escribió:¿No te vale un juego con scroll y todo en 5 líneas?

http://microhobby.speccy.cz/mhf/198/MH198_16.jpg

Abajo a la derecha.

Realmente se puede reducir a 3 líneas.


Realmente se puede reducir a 1 linea, reordenando y haciendo un par de truquillos... Como el del NEXT n para iterar. De esta forma no necesitamos ningún IF y no es un problema que no haya ELSE:

Código: Seleccionar todo

10 FOR a=0 TO 7: READ b: POKE USR "a"+a,b: NEXT a: LET na=5: LET pu=0: CLS : FOR n=0 TO 1: PRINT AT 20,RND*31;"*": PRINT AT 20,RND*31;"*": PRINT : POKE 23692,-1: PRINT : LET pu=pu+1: LET na=na-(INKEY$="z" AND na>0)+(INKEY$="m" AND na<31): PRINT AT 0,na;"\a": LET n=(SCREEN$ (1,na)="*"): NEXT n: PRINT AT 0,0; FLASH 1;"PUNTOS ";pu: FOR a=0 TO 50: BEEP .01,RND*40: NEXT a: RUN : DATA 36,189,255,165,165,189,189,24


(pegar en BasIn. Si lo váis a teclear, el \a del PRINT es "A" en modo gráfico)

¿Os animáis a hacer un concursillo de "one liners" para todos los sistemas en el foro? ¿qué os parece? Es bastante entretenido.

Re: MISSILE DODGE - Juego BASIC para CoCo-2 en una línea

Publicado: 12 Dic 2012, 17:26
por na_th_an
Para seguir con la tontunez, este juego de plataformas. Hay que coger todos los asteriscos... Tampoco es que tenga demasiado interés. Además, tiene el problema de que la linea ocupa más de lo que cabe en la pantalla, con lo que introducirla en un Spectrum real es muy tedioso (cada caracter de más no aparece, y además el ordenador va lentísimo). 6 izquierda 7 derecha y 0 salto. No se pueden pulsar a la vez.

Código: Seleccionar todo

10 CLS : LET p$="OOOO": LET q$=p$+p$+p$+p$: PRINT AT 21,0;q$;q$;AT 20,5;p$: PRINT AT 18,10;p$;AT 15,20;q$;AT 9,26;q$;p$;AT 5,8;p$: LET t=0: FOR i=1 TO 24: LET x=INT (RND*32): LET y=INT (RND*15)+5: LET tt=SCREEN$ (y,x)=" ": PRINT AT y,x;("*" AND tt): LET t=t+tt: NEXT i: LET x=16: LET y=20: LET nu=10: LET sal=0: LET cx=x: LET cy=y: LET s=0: FOR n=0 TO 1: LET lc=SCREEN$ (y,x-1)<>"O": LET rc=SCREEN$ (y,x+1)<>"O": LET lf=INKEY$="6" AND x>0 AND lc: LET rt=INKEY$="7" AND x<31 AND rc: LET x=x-lf+rt: LET uc=SCREEN$ (y-1,x)<>"O": LET dc=SCREEN$ (y+1,x)<>"O": LET dw=sal=0 AND dc: LET up=sal=1 AND uc: LET nu=(0 AND sal=0)+(nu+1 AND sal=1): LET sal=(INKEY$="0" AND NOT dw) OR (sal=1 AND nu<7): LET y=y-up+dw: LET ss=SCREEN$ (y,x)="*": LET s=s+ss: PRINT AT y,x;"\a";AT cy,cx;(" " AND (y<>cy OR x<>cx));AT 0,0;s: LET cx=x: LET cy=y: LET n=(t=s): NEXT n: PRINT AT 11,12;"BIEN HECHO"