BASIC Spectrum: me he quedao flipao

Si tienes alguna duda y crees que alguien podría resolverla, ponla aquí. || If you have any doubt about programming, post it here.

Moderador: CEZ

Responder
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

BASIC Spectrum: me he quedao flipao

Mensaje por na_th_an »

Nada, que estaba mirando cintas antiguas para buscar más programas propios perdidos y he encontrado uno extrañísimo que hice (que ya os pondré cuando pula un poco). No es gran cosa, pero leyendo el listado me encontré con la linea:

Código: Seleccionar todo

8040 IF INKEY$="9" AND forma de subir=1 THEN GOSUB 9090
8050 IF INKEY$="9" AND forma de subir=0 THEN GOSUB 9110
Y yo... ¿EIN? ¿Desde cuando se le puede poner ESPACIOS EN BLANCO a las variables?

Lo probé. En modo inmediato:

Código: Seleccionar todo

LET me pica el ojo izquierdo=7
Se lo traga con papas...

Código: Seleccionar todo

LET mari pili=me pica el ojo izquierdo+2: PRINT mari pili
Total, que me devuelve un 9...

QUÉ COSAS :eek:
Avatar de Usuario
Ivanzx
256 bits
256 bits
Mensajes: 4316
Registrado: 20 Nov 2005 00:50
Ubicación: Frankfurt, Germany
Contactar:

Mensaje por Ivanzx »

Me acuerdo que eso fue lo ultimo que vi yo en el Basic, lo ultimo que empece a probar antes de dejar de programar (como veis no alcance gran nivel :D )

Pero para que veas Nath que siempre hay sorpresas, y siempre se aprende algo, o se re-aprende :)

saludoss
Avatar de Usuario
cht666cht
128 bits
128 bits
Mensajes: 2145
Registrado: 06 Oct 2005 12:20
Ubicación: Barcelona

Mensaje por cht666cht »

En el basic del MSX se pueden escribir todo el código seguido sin espacios, pero esto de poner espacios en las variables nunca lo llegué a probar :?
Avatar de Usuario
cht666cht
128 bits
128 bits
Mensajes: 2145
Registrado: 06 Oct 2005 12:20
Ubicación: Barcelona

Mensaje por cht666cht »

pues he hecho esta prueba ahora mismo con el bluemsx:

Código: Seleccionar todo

10 FORA B=1TO10
20 PRINTAB
30 NEXTA      B
y funciona bien :eek: parece como que le da igual los espacios que pongas en medio de un nombre de variable, los quita y ya está :D
Avatar de Usuario
Black Hole
64 bits
64 bits
Mensajes: 755
Registrado: 25 Ago 2005 00:34
Ubicación: Aluche, Madrid

Mensaje por Black Hole »

Es que lo curioso (que yo tampoco lo sabía, que conste) es que si pones en Spectrum:

Código: Seleccionar todo

10 LET a ver si va=10
20 PRINT a ver si va
30 PRINT aversiva
obtienes en pantalla dos veces un 10 ... o sea, son la misma variable. :eek:
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

Joa joa ¡¡vaya descubrimiento hemos hecho!!

He mirao el manual y no se menciona.
Avatar de Usuario
ZilogZ80
16 bits
16 bits
Mensajes: 74
Registrado: 07 Sep 2006 22:26
Contactar:

Mensaje por ZilogZ80 »

Creo recordar de que los espacios en blanco tambien cuentan como caracteres, es decir "mepicalaoreja=7" es lo mismo que "me pica la oreja =7" la primera variable ocupa siete caracteres y la segunda dieciseis caracteres. :P
Avatar de Usuario
Ivanzx
256 bits
256 bits
Mensajes: 4316
Registrado: 20 Nov 2005 00:50
Ubicación: Frankfurt, Germany
Contactar:

Mensaje por Ivanzx »

na_th_an escribió:Joa joa ¡¡vaya descubrimiento hemos hecho!!

He mirao el manual y no se menciona.
Increible :eek: 20 años despues... :!:
Avatar de Usuario
cht666cht
128 bits
128 bits
Mensajes: 2145
Registrado: 06 Oct 2005 12:20
Ubicación: Barcelona

Mensaje por cht666cht »

y lo útil que me habría sido saberlo hace 15 años :D
Avatar de Usuario
Beyker
128 bits
128 bits
Mensajes: 2204
Registrado: 24 Dic 2004 01:49
Ubicación: La vile du Barcelona
Contactar:

Mensaje por Beyker »

na_th_an escribió:Joa joa ¡¡vaya descubrimiento hemos hecho!!

He mirao el manual y no se menciona.
Lo de los espacios si se menciona (pag 85) ,dice que la variable con espacios y mayusculas se considera la misma que sin ellos.Pero hemos reinventado ruedas tantas y tantas veces que por una mas jejeje ;)
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

Yo es que había mirao el del 48K :oops:

Ya ves, nunca se acuesta uno sin saber algo nuevo :D
e_sedes
8 bits
8 bits
Mensajes: 16
Registrado: 27 Ago 2006 23:23

Mensaje por e_sedes »

Como me intrigaba acabo de consultarlo en el "MSX Guia del programador y manual de referencia" y si que lo indica en la pag.22:
Los espacios en blanco dentro del nombre de una variable se ignorarán.
A A es equivalente a AA.


Y yo tampoco tenía ni idea.
Avatar de Usuario
Konamito
256 bits
256 bits
Mensajes: 6395
Registrado: 01 Jun 2005 17:26
Ubicación: Santa Cruz de Tenerife
Contactar:

Mensaje por Konamito »

Yo tampoco lo sabía, la verdad. Siempre utilicé variables con nombres cortos.

Nunca se deja de aprender cosas.
MSXBlog: MSX en primera persona

https://www.msxblog.es
Avatar de Usuario
Guillian
32 bits
32 bits
Mensajes: 626
Registrado: 02 Ene 2005 02:40

Mensaje por Guillian »

Es mejor usar nombres cortos, porque, si no recuerdo mal, sólo los dos primeros caracteres se tienen en cuenta a la hora de definir un variable (al menos en MSX). Por lo que PANTALLA y PALA es la misma variable.
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

En Spectrum y Amstrad no ocurre eso.
Avatar de Usuario
Beyker
128 bits
128 bits
Mensajes: 2204
Registrado: 24 Dic 2004 01:49
Ubicación: La vile du Barcelona
Contactar:

Mensaje por Beyker »

En manejo de variables numerias y alfanumericas el Spectrum es el 8 bits mas potente.En algo teniamos que destacar no?
Ah y el editor Basic del 128K que no te deja introducir la linea si hay un error de sintaxis.En MSX era el pan nuestro de cada dia jejeje "sintax error...sintax error,jejej.
No ,si hasta resultara que el Spectrum no era tan malo en todo como dicen ;)
Avatar de Usuario
Konamito
256 bits
256 bits
Mensajes: 6395
Registrado: 01 Jun 2005 17:26
Ubicación: Santa Cruz de Tenerife
Contactar:

Mensaje por Konamito »

Beyker escribió:Ah y el editor Basic del 128K que no te deja introducir la linea si hay un error de sintaxis.En MSX era el pan nuestro de cada dia jejeje "sintax error...sintax error,jejej.
Pues eso hubiera sido una gran ayuda en mi MSX en la época que me copiaba todo listado BASIC que caía en mis manos...
MSXBlog: MSX en primera persona

https://www.msxblog.es
Avatar de Usuario
Guillian
32 bits
32 bits
Mensajes: 626
Registrado: 02 Ene 2005 02:40

Mensaje por Guillian »

Beyker escribió:En manejo de variables numerias y alfanumericas el Spectrum es el 8 bits mas potente.En algo teniamos que destacar no?
Bueno, tampoco hay que exagerar :wink:
Esta bien eso de tener variables numéricas con nombres largos. Pero las alfanuméricas sólo pueden tenerlo de una sola letra y hay que definir una variable antes de usarla.

Además, la precisión en los cálculos es menor en el Spectrum:
Print 1/3
Spectrum = 0.33333333
MSX = 0.33333333333333

No quiero que esto derive de nuevo en la típica conversación de que ordenador es mejor. Pero en el caso del BASIC los MSX tienen uno de los más completos (algunos se atreven a decir que el mejor) que existen para ordenadores de 8bits. (^-^)y
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

El MSX-BASIC es algo así como 3/4 de lo mismo que el GW-BASIC de Microsoft de to la vida, la mejor versión del lenguaje con número de líneas.

El Sinclair BASIC es sin embargo una maravilla, porque con un par de medidas inteligentes consigue, con programas mucho más "económicos" en lineas y con muchas menos palabras clave, hacer lo mismo que cualquier otro BASIC más tocho como el de CPC o el de MSX. El único problema del BASIC de Spectrum era la velocidad, problema que deja de serlo en cuanto nos topamos con un buen compilador.

Por ejemplo, Sinclair BASIC no necesita de LEFT$, RIGHT$ o MID$, ya que con el operador () puede hacer lo mismo que esas tres funciones y más, y además de una forma mas cómoda. En vez de poner c$=MID$(a$,l%,1) nos basta con LET c$=a$(l%), por ejemplo. En vez de c$=LEFT$(a$,4) nos vale con LET c$=a$( TO 4)...

Podemos empaquetar mucho las instrucciones. Muchas veces no es necesario construir un enorme IF para imprimir una cosa u otra dependiendo de un resultado:

Código: Seleccionar todo

PRINT "La puerta está "+("abierta" AND f(10)=1)+("cerrada" AND f(10)<>1)
Construcciones como ON x GOTO a,b,c no son necesarias si sabes ordenar un poco el programa:

Código: Seleccionar todo

GOTO 9000+(opcion-1)*10
Y lo mejor es el analizador de expresiones "de regalo" :) Esto es lo que yo más eché en falta cuando me pasé a los BASICs de microsoft...

Código: Seleccionar todo

LET c$="4+7-PI*2-a+b^7"
PRINT c$;"=";VAL(c$)
c$=VAL$(c$):REM compactar y resolver
Tiene muchas cosas buenas :D
Avatar de Usuario
Guillian
32 bits
32 bits
Mensajes: 626
Registrado: 02 Ene 2005 02:40

Mensaje por Guillian »

Esta claro que el BASIC del Spectrum tiene sus cosas buenas. Pero en general, e intentando ser objetivo, es mucho más limitado y menos potente.
na_th_an escribió: El Sinclair BASIC es sin embargo una maravilla, porque con un par de medidas inteligentes consigue, con programas mucho más "económicos" en lineas y con muchas menos palabras clave
Esto creo que sólo ocurre en algunos casos en concreto. Es decir, como harías en menos líneas esto:

Código: Seleccionar todo

FORI=2TO7:A(I)=I:NEXT
o

Código: Seleccionar todo

IFATHEN34ELSECLS
na_th_an escribió: Por ejemplo, Sinclair BASIC no necesita de LEFT$, RIGHT$ o MID$, ya que con el operador () puede hacer lo mismo que esas tres funciones y más, y además de una forma mas cómoda. En vez de poner c$=MID$(a$,l%,1) nos basta con LET c$=a$(l%), por ejemplo. En vez de c$=LEFT$(a$,4) nos vale con LET c$=a$( TO 4)...
Desconozco el BASIC del Spectrum. ¿Cómo se haría el RIGHT$ entonces?
Por ejemplo:

Código: Seleccionar todo

10 inputa$
20 ?right$(a$,2)
na_th_an escribió: Podemos empaquetar mucho las instrucciones. Muchas veces no es necesario construir un enorme IF para imprimir una cosa u otra dependiendo de un resultado:
En el caso del PRINT veo que sí, pero en otros casos más comunes me temo que se necesita más código para hacer lo mismo (incluir por ejemplo un GOTO, fragmentando el programa) al no disponer de ELSE.

Y para los que les guste las cosas retorcidas en MSX se pueden hacer cosas del tipo:

Código: Seleccionar todo

10 A$="!a@-))TZ2":DEFUSR=32777! :IFD2THEN LINE>2COPY0LOADATTR$ELSEA=USR(0)
Con este porgrama puedes elegir el tipo de procesador que quieres usar (Z80, R800 ROM o R800 DRAM)

Insisto en que no quiero que esto acabe en una discusión para ver que maquina es mejor, cual mola más o cual tiene las teclas más bonitas :P
Pero hay que tener en cuenta que el BASIC del MSX evolucionó durante varios años, incluyendo intrucciones para casi cualquier cosa (manejar MIDI, el scroll del VDP, grabar y reproducir sonido, crear unidades virtuales y un largo etcétera)
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Sin entrar en polémica, el RIGHT$, si no recuerdo mal, se haría de la siguiente manera:

Código: Seleccionar todo

10 INPUT A$
20 PRINT A$((LEN A$ - 1) TO)
Este programa imprime los dos últimos caracteres de la cadena (al menos en el Spectaculator ;))

Por cierto, que raro se me hace esto de no poner el ; al final :lol::lol::lol::lol::lol::lol::lol:
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Guillian escribió:Insisto en que no quiero que esto acabe en una discusión para ver que maquina es mejor, cual mola más o cual tiene las teclas más bonitas :P
Las teclas más bonitas las del ZX81, sin duda :P:P:P ;)
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

El RIGHT$ se hace al revés: a$(2 TO), por ejemplo, o a$(LEN a$-2 TO), o como quieras... Hacer un scroller era tan fácil como:

Código: Seleccionar todo

10 LET A$=" Hola pisha, esto es un scroller con un texto tela de largo que ira apareciendo poquito a poco por tu presiosa pantalla limpiada con cristasol y ajerul.  "
20 LET A$=A$(2 TO)+A$(1): PRINT AT 10,1;A$(1 TO 30): IF INKEY$="" THEN GO TO 20
Llevo mucho tiempo probando mil BASICs y el del Spectrum me parece bastante potente, siempre teniendo en cuenta que jugamos con solo 80 palabras clave. Para estar tan comprimido, creo que "se porta" muy bien, y eso que el puto intérprete tiene más bugs que el Windows 3.1 :lol:

La única carencia que he acusado un poco más es la del ELSE. Sin embargo, aún no he encontrado ninguna característica que no haya podido "trabajar" de otro modo, vamos, que lo mismo es:

Código: Seleccionar todo

10 IF a = 3 THEN b = 4 ELSE b = 8
que

Código: Seleccionar todo

10 LET b = 8: IF a = 3 THEN LET b = 4
o, para casos en los que haya que hacer más cosas:

Código: Seleccionar todo

10 IF a = 3 THEN LET b = 4: GOTO 20
15 LET b = 8
20 REM ñeeee
La cosa es la de siempre: El Spectrum no evolucionó casi nada desde que salió... Podrían haber ido revisando el BASIC con cada nuevo modelo, la verdad. Yo he visto muchos tipos de BASICs y el de Sinclair es bastante... "extraño" y "original", creo que por eso me gusta.

Sigo quedándome con la potencia que da el evaluador de expresiones y sigo pensando que, en tema de manejar expresiones lógicas y paranoias, el Sinclair BASIC es de lo mejorcito que he visto. Se puede mover un muñequito a izquierda o a derecha en una sola linea sin IFs:

Código: Seleccionar todo

10 LET X=X+(INKEY$="p" AND X<31)-(INKEY$="o" AND X>0)
También me gusta mucho el tema de poder meter carácteres de control en las cadenas... Te puedes hartar de poner ATs, PAPERs e INKs en una cadena y luego con un simple PRINT a$ lo tienes todo bonito en pantalla. Combinando esto con el evaluador de expresiones puede hacerte rutinillas de "sprites" creados con caracteres gráficos o almacenar tiles usando muy poca memoria y código.

Otra cosa muy chula es poder meter pequeñas rutinas de C/M en lineas REM a las que es muy fácil llamar haciéndose una pequeña rutinilla DEF FN.

Al Cesar lo que es del Cesar, cada dialecto de BASIC tiene sus ventajas :)

Mola este hilo :D vamos a seguir enseñando las gracias de nuestros BASICs, me parece muy interesante.
Avatar de Usuario
Ivanzx
256 bits
256 bits
Mensajes: 4316
Registrado: 20 Nov 2005 00:50
Ubicación: Frankfurt, Germany
Contactar:

Mensaje por Ivanzx »

na_th_an escribió:El RIGHT$ se hace al revés: a$(2 TO), por ejemplo, o a$(LEN a$-2 TO), o como quieras... Hacer un scroller era tan fácil como:

Código: Seleccionar todo

10 LET A$=" Hola pisha, esto es un scroller con un texto tela de largo que ira apareciendo poquito a poco por tu presiosa pantalla limpiada con cristasol y ajerul.  "
20 LET A$=A$(2 TO)+A$(1): PRINT AT 10,1;A$(1 TO 30): IF INKEY$="" THEN GO TO 20
Joder, 5 años programando en Basic y nunca supe hacer eso :shock:
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

¡No se acuesta uno sin aprender algo nuevo! :D A ver si te pones a la tecla y empleas estos truquitos en una nueva supreproducción de PEPSI soft :D
Avatar de Usuario
Guillian
32 bits
32 bits
Mensajes: 626
Registrado: 02 Ene 2005 02:40

Mensaje por Guillian »

na_th_an escribió: Sigo quedándome con la potencia que da el evaluador de expresiones y sigo pensando que, en tema de manejar expresiones lógicas y paranoias, el Sinclair BASIC es de lo mejorcito que he visto. Se puede mover un muñequito a izquierda o a derecha en una sola linea sin IFs:

Código: Seleccionar todo

10 LET X=X+(INKEY$="p" AND X<31)-(INKEY$="o" AND X>0)
Mola! La version MSX sería:

Código: Seleccionar todo

10 LET X=X-(STICK(0)=3 AND X<31)+(STICK(0)=7 AND X>0)
También me gusta mucho el tema de poder meter carácteres de control en las cadenas... Te puedes hartar de poner ATs, PAPERs e INKs en una cadena y luego con un simple PRINT a$ lo tienes todo bonito en pantalla.
Esto también vale para el MSX. Recuerdo algunos juegos en disco que al hacer un FILES mostraba mensajes o dibujitos ASCII al incluir esos carácteres especiales en los nombres de los ficheros.
Otra cosa muy chula es poder meter pequeñas rutinas de C/M en lineas REM a las que es muy fácil llamar haciéndose una pequeña rutinilla DEF FN.
Supongo que esto es común a todos los BASIC. En el caso del MSX habría que llamarlo con un DEFUSR.

También se pueden ampliar las intrucciones mediante los comandos CMD (ej: CMD ESPERA(100) ) o con los CALL (ej: CALL DIGITALIZA())
Otra opción es tener rutinas en CM a las que se le pueden pasar parametros mediante variables, como hace el NestorBASIC.
Ej:

Código: Seleccionar todo

DEFUSR=&ha000:?USR("Lee esto en voz alta")

Código: Seleccionar todo

DEFUSR=&ha000:p(0)=x:p(1)=y:p(2)=dx:p(3)=dy:?usr(0)

Y aprovechando el hard del MSX se pueden usar instrucciones como PUT SPRITE, SET SCROLL, VDP(x), etc. que permiten realizar complejas tareas con una sola instrucción.


Una curiosidad. El juego del Snake (no el Solid :P) en MSX BASIC por Daniel Vik

Código: Seleccionar todo

1 SCREEN1:KEYOFF:FORR=0TO9:COLOR5,1,1:LOCATE8,11:PRINT" s to start":M=32:S=-10
2 IFINKEY$<>"s"THEN2ELSECLS:FORD=0TO737::D=D+(D+1AND2ANDD>MANDD<704)*15:F=6176
3 VPOKED+F,7:NEXT:H=6480:T=H-D:FORC=ATOF:S=S+10:L=F+RND(1)*D:IFVPEEK(L)-MTHEN3
4 Y=Y-10*(S>Y):R=3ANDASC(INKEY$+"C")+R+1:VPOKEL,15:U=M^(RAND1)*(1-(RAND2)):C=0
5 VPOKE2^13,6:VPOKEH-D,U+M:H=H+U:O=VPEEK(H):VPOKEH,9:IFO-MANDO-15THENR=3:NEXTR
6 LOCATE1,0:PRINT"SCORE"S,"HI"Y:IFO=15THEN3ELSEVPOKET+D,M:T=T+VPEEK(T)-M:GOTO4
Echadle un ojo al juego de coches tipo Hyper Rally que hizo en 8 lineas de BASIC:Foro MRC
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

jojoj me encantan esos juegos de una sola linea y cosas así :D Esto me ha recordado algo...

Yo voy mucho a un foro http://forum.qbasicnews.com que empezó siendo de usuarios de QuickBasic, luego vivió el nacimiento de freeBASIC y ahora es una especie de híbrido. Hace un par de años estaba en pleno apogeo, y hacíamos nuestras competiciones del tipo:
  • Efecto gráfico en 9 lineas
  • Juego completo en menos de X caracteres de código fuente, con X normalmente siendo 256, 512 o 1024
  • Juego en 64 lineas
  • etc...
Esto daba mucho juego, sobre todo porque cuando decíamos "9 lineas" no valía hacer trampas y emplear el ":" para meter mil cosas por linea. No, había que currárselo :D muchas veces se podían meter muchas instrucciones por linea si se pensaba un poquito. Esta fue una de mis colaboraciones (se puede ejecutar con el qbasic normal que podéis descargar de mil sitios haciendo una búsqueda en google):

Código: Seleccionar todo

' Convolution Fire by WOPR2k 
' In fact this effects takes 8 lines, but the palette rutines took 3 lines 
' (It looks like crap without the custom palette). 

' NOTE: ** DON'T ** use copy and paste to QB in a DOS box, 'cause there 
' are split lines. Copy to notepad and save it as a .BAS file. 

1 IF c& = 0 THEN SCREEN 13 ELSE IF c& = 1 THEN PAINT (0, 0), 255 ELSE IF c& = 2 THEN DIM Sc%(2049) ELSE IF c& = 3 THEN LINE (128, 136)-(191, 199), 0, BF ELSE IF c& = 4 THEN s% = VARPTR(Sc%(0)) ELSE IF c& = 5 THEN DEF SEG = VARSEG(Sc%(0)) ELSE GET ( _ 
128, 136)-(191, 199), Sc%(0) 
  IF c& < 63 THEN b% = b% + 1 ELSE IF c& < 126 THEN g% = g% + 1 ELSE IF c& < 189 THEN r% = r% + 1 
  IF c& < 256 THEN PALETTE c&, 63 - r% + (63 - g%) * 256! + (63 - b%) * 65536! 
  c& = c& + 1 
2 IF c& > 4 THEN POKE VARPTR(Sc%(0)) + 4 + 62 * 64 + INT(RND * 64), 255 
3 FOR i% = 1 TO 62 
4 FOR j% = 1 TO 62 
5 p% = (PEEK(s% + 4 + 64 * i% + j%) + PEEK(s% + 4 + 64 * (i% - 1) + j%) + PEEK(s% + 5 + 64 * (i% - 1) + j%) + PEEK(s% + 5 + 64 * i% + j%) + PEEK(s% + 4 + 64 * (i% + 1) + j% + 1) + PEEK(s% + 4 + 64 * (i% + 1) + j%) + PEEK(s% + 3 + 64 * (i% + 1) + j%) _ 
+ PEEK(s% + 3 + 64 * i% + j%) + PEEK(s% + 3 + 64 * (i% - 1) + j%)) \ 8 
6 IF p% < 256 THEN PSET (128 + j%, i% + 135), p% ELSE PSET (128 + j%, i% + 135), 255 
7 NEXT j%, i% 
8 IF INKEY$ = "" THEN GOTO 1 

' Unreadable code.
Este fue para otro compo, uno de hacer algo más complejo pero ya en 25 lineas. Este pinta un banner enrollao en pseudo-3D mu grasioso:

Código: Seleccionar todo

message$ = "        I think I have something to tell you right now... But it is this twisted life that makes it difficult... Oh, man, you got me puzzled. BYE!!!        " 
SCREEN 13: post% = 1: DIM banner%(224, 32): DEF SEG = &HFFA6 
OUT &H3C8, 16: FOR i% = 0 TO 15: OUT &H3C9, i% * 4: OUT &H3C9, 30: OUT &H3C9, 30: NEXT: FOR i% = 0 TO 15: OUT &H3C9, i% * 2: OUT &H3C9, i% * 2: OUT &H3C9, i% * 2: NEXT 
DO 
   IF cont% = 0 THEN 
      c$ = MID$(message$, post%, 1) 
      post% = (post% + 1) MOD LEN(message$) 
      FOR y% = 0 TO 7: byte% = PEEK(ASC(c$) * 8 + y% + 14): FOR x% = 0 TO 7 
         bit% = byte% AND 1: byte% = byte% \ 2 
         FOR i% = 0 TO 2: FOR j% = 0 TO 2 
            IF bit% = 1 THEN banner%(200 + y% * 3 + i%, (7 - x%) * 3 + j%) = 1 ELSE banner%(200 + y% * 3 + i%, (7 - x%) * 3 + j%) = 0 
      NEXT j%, i%, x%, y% 
   END IF 
   FOR i% = 1 TO 223: FOR j% = 0 TO 23: banner%(i% - 1, j%) = banner%(i%, j%): NEXT j%, i% 
   cont% = (cont% + 1) MOD 24 
   angulo! = angulo! + .1: IF angulo! > 3.141592653589793# THEN angulo! = 0! 
   angulo2! = angulo2! + .05: IF angulo2! > 2 * 3.141592653589793# THEN angulo2! = 0! 
   FOR i% = 0 TO 199 
      d% = 5 * SIN(4 * 3.141592653589793# * i% / 200 + angulo2!) 
      SELECT CASE INT((i% + ((angulo! * 50) / (3.141592653589793# / 2))) / 50) 
         CASE 0, 2, 4, 6: amplitud! = ABS(32 * SIN(angulo! + i% * 2 * 3.141592653589793# / 200)) 
         CASE 1, 3, 5: amplitud! = ABS(32 * COS(angulo! + i% * 2 * 3.141592653589793# / 200)) 
      END SELECT 
      FOR j% = 0 TO amplitud! - 1 
         IF banner%(i%, 32! * j% / amplitud!) = 0 THEN mcolor% = 32 + amplitud! / 4! + (16 - amplitud! / 2!) * j% / amplitud! ELSE mcolor% = 16 + amplitud! / 4! + (16 - amplitud! / 2!) * j% / amplitud! 
         PSET (d% + j% + 144 + 12 - 16, i%), mcolor% 
      NEXT j% 
      FOR j% = amplitud! + 1 TO 31 
         IF banner%(i%, ((j% - amplitud!) * 32!) / (32 - amplitud!)) = 0 THEN mcolor% = 48 - (32 - amplitud!) / 4 - (16 - (32 - amplitud!) / 2) * (j% - amplitud!) / (32 - amplitud!) ELSE mcolor% = 33 - (32 - amplitud!) / 4 - (16 - (32 - amplitud!) / _ 
 2) * (j% - amplitud!) / (32 - amplitud!) 
         PSET (d% + 144 + 12 - 16 + j% - 1, i%), mcolor% 
      NEXT j% 
      FOR j% = 32 TO 33 
         PSET (d% + 144 + 12 - 16 + j% - 1, i%), 0 
      NEXT j% 
      FOR j% = -4 TO d% 
         PSET (139 + j%, i%), 0 
      NEXT j%, i% 
LOOP WHILE INKEY$ = ""
Podéis ver un montón aquí: http://qbnz.com/pages/downloads/limitedline/9liners.zip

Podríamos hacer algo así, una especie de "desafío" o concurso para ver qué somos capaces de hacer con este tipo de restricciones, pero para máquinas de 8 bits... ¿qué os parece la idea?
Avatar de Usuario
Guillian
32 bits
32 bits
Mensajes: 626
Registrado: 02 Ene 2005 02:40

Mensaje por Guillian »

La idea del desafío está bien. Aunque yo ya estoy mayor para esas cosas. Hace más de 10 años que no "toco" el BASIC :?
Avatar de Usuario
Beyker
128 bits
128 bits
Mensajes: 2204
Registrado: 24 Dic 2004 01:49
Ubicación: La vile du Barcelona
Contactar:

Mensaje por Beyker »

Guillian escribió: No quiero que esto derive de nuevo en la típica conversación de que ordenador es mejor. Pero en el caso del BASIC los MSX tienen uno de los más completos (algunos se atreven a decir que el mejor) que existen para ordenadores de 8bits. (^-^)y
No no por supuesto que no,no caigamos en el error de discutir sobre eso por dios!!.Todo el mundo sabe que el Spectrum era el mejor :lol: :lol: :lol:
Avatar de Usuario
Guillian
32 bits
32 bits
Mensajes: 626
Registrado: 02 Ene 2005 02:40

Mensaje por Guillian »

Beyker escribió: No no por supuesto que no,no caigamos en el error de discutir sobre eso por dios!!.Todo el mundo sabe que el Spectrum era el mejor :lol: :lol: :lol:
Así me gusta, que no falte el sentido del humor XDDD
Responder