Autor Tema: Tweetcarts de BASIC  (Leído 490 veces)

javierglez

  • Commodore Master
  • *****
  • Mensajes: 465
  • terminator not seen
    • Ver Perfil
Tweetcarts de BASIC
« en: Diciembre 24, 2022, 02:33:40 »
Durante una temporada salieron unos bots en Twitter que interpretaban programas en BASIC que cupieran en un tweet. El más activo fue el de BBC Micro. También me consta que hubo de QBASIC+GWBASIC (de MSDOS) y del BASIC de ZX SPECTRUM. Cuando el motor estimaba que se había alcanzado un resultados hacía una captura de pantalla o un GIF de la animación (el BBC Micro es especialmente adecuado para hacer animaciones con efectos de color cycling).

Os pongo aquí un ejemplo de programa de BBC Micro adaptado para BASIC 3.5. El listado de BBC Micro:

Código: [Seleccionar]
10 MODE2
20 FORI=0TO30
30 X=840:Y=0:L=200:A=PI/2
40 FORJ=0TO10
50 U=L*COSA:V=L*SINA:MOVEX-V/8,Y+U/8:PLOT1,V/4,-U/4: PLOT81,U-V/4,V+U/4:PLOT81,V/4,-U/4:X=X+U:Y=Y+V:L=L*5/6
60 A=A+(RND(2)-1.5)*.7
70 NEXT,
80 K=0:M=0
90 FORY=0TO1024STEP4
100 FORX=0TO1280STEP8
110 I=.755*X+.57*Y:I=I-INT(I)
120 IFK>0GOTO150
130 M=0
140 IFPOINT(X+M,Y)=7:M=M+8:K=M:GOTO140
150 IFK>0ANDY>450ANDI>.9GCOL0,2:MOVEX,Y-4:PLOT1,0,-32
160 IFK>0F=3*(M-K)/M:C$="0137":K=K-8:GOTO180
170 F=3*Y/1024:C$="2046"
180 GCOL0,ASC(MID$(C$,INTF-(F-INTF>I)+1))-48
190 PLOT69,X,Y
200 NEXT,

* snipet1bbc.jpg (177.6 kB . 640x512 - visto 226 veces)
Aquí una adaptación que he hecho para C16:

Código: [Seleccionar]
10graphic3,1
12color0,10,1:color1,1:color3,16,2
14box1,0,0,159,199,,1
20fori=0to30
30x=105:y=200:l=50:a=3.1416/2
40forj=0to10
50u=l*cos(a):v=l*sin(a):locatex-v/16,y-u/8:draw0tox+v/16,y+u/8
52draw0tox+u/2+v/16,y-v+u/8:draw0tox+u/2-v/16,y-v-u/8
54draw0tox-v/16,y-u/8:ifj<8thenpaint0,x+u/4,y-v/2
56x=x+u/2:y=y-v:l=l*5/6
60a=a+(int(2*rnd(1))-0.5)*.7
70nextj,i
80k=0:m=0
90fory=0to199
100forx=0to159
110i=3.02*x+2.28*y:i=i-int(i)
120ifk>0then150
130m=0
140locatex+m,199-y:ifrdot(2)=0thenm=m+1:ifx+m<160thenk=m:goto140
150ifk>0andy>90andi>.9thendraw3,x,200-ytox,207-y
160ifk>0thenk=k-1:goto200
170f=3*y/200:c$="@4>7":l$="5432"
180b=1+((f-int(f))<i):c=int(f)+b+1
182g=asc(mid$(c$,c))-48:h=asc(mid$(l$,c))-48
184p=1+b:if(fand1)=1thenp=2-b
186colorp,g,h
190drawp,x,199-y
200nextx,y

* snipet1c16.jpg (135.19 kB . 799x688 - visto 211 veces)
Y la versión BASIC 3.5 para C64, que es igual pero cambiando los códigos de los colores. Cambian las líneas:
Código: [Seleccionar]
12color0,10:color1,1:color3,6
170f=3*y/200:c$="4289"
182g=asc(mid$(c$,c))-48
186colorp,g

* snipet1c64.jpg (194.16 kB . 977x823 - visto 175 veces)
El BASIC de 3.5 lo podéis obtener en cdsb: https://csdb.dk/release/?id=189017

javierglez

  • Commodore Master
  • *****
  • Mensajes: 465
  • terminator not seen
    • Ver Perfil
Re:Tweetcarts de BASIC
« Respuesta #1 en: Febrero 05, 2023, 21:39:18 »
Aqui os pongo otro de estos basic bot tweets de BBC Micro adaptado a CBM BASIC 3.5.
Código: [Seleccionar]
10 MODE1
20 PRINT"/-"
30 FORU=0TO1279STEP4
40 s=U/1280-.5:t=.7
50 x=s*0.9-t*0.4:y=s*0.4+t*0.9
60 I=8:J=-6:i=SGNx
70 S=1/ABSx
80 T=1/ABSy
90 s=0.5*S
100 t=T
110 MOVEU,0:C=0
120 REPEAT
130 d=s>t
140 IFd H=t:t=t+T:J=J+1 ELSEH=s:s=s+S:I=I+i
150 P=POINT(I*4,1023+J*4)
160 a=-180/H
170 GCOL0,C:C=3EORC
180 DRAWU,512+a*4
190 UNTILP
200 b=240/H
210 FORk=INTa TOINTb
220 u=31AND(I+x*H+J+y*H)*32
230 v=7AND((k-a)/(b-a))*32
240 IFv>3u=u+4
250 C=1-((3ANDv)=0OR(7ANDu)=0)
260 IFd C=3-C
270 GCOL0,C
280 DRAWU,512+k*4
290 NEXT,


* descarga.png (34.52 kB . 640x512 - visto 151 veces)

El listado en CBM BASIC 3.5 para C16
Código: [Seleccionar]
10 color0,1:color1,2:color2,3:color3,8
20 graphic 3,1
30 char1,0,0,"/-"
40 foru1=0to159
50 s=u1/128-0.5:t=0.7
60 x=s*.9-t*.4:y=s*.4+t*.9
70 i1=8:j1=-6:i=sgn(x)
80 s1=1/abs(x)
90 t1=1/abs(y)
100 s=0.5*s1
110 t=t1
120 c=0:a0=100
130 do
140 d=s>t
150 ifdthenh1=t:t=t+t1:j1=j1+1:elseh1=s:s=s+s1:i1=i1+i
160 ifj1>0thenp=1:elselocatei1/2,(-j1):p=rdot(2)
170 a=140/h1
180 drawc,u1,99+a0tou1,99+a:a0=a
190 c=1-c
200 loopuntilp
210 b=-172/h1
220 fork=int(a)toint(b)step-1
230 u=31and(i1+x*h1+j1+y*h1)*32
240 v=7and((k-a)/(b-a))*32
250 ifv>3thenu=u+4
260 c=2-((3andv)=0or(7andu)=0)
270 ifdthenc=5-c
280 drawc,u1,99+a0tou1,99+k:a0=k
300 next
310 next


* vice-screen-20230205212723169688.png (3.32 kB . 384x288 - visto 150 veces)
Y cambiando la primera línea que define los códigos de los colores, la versión para C64 con CBM BASIC 3.5 .
Código: [Seleccionar]
10 color0,1:color1,2:color2,3:color3,8

* vice-screen-20230205212711232127.png (3.27 kB . 384x272 - visto 143 veces)

El BASIC de 3.5 lo podéis obtener en cdsb: https://csdb.dk/release/?id=189017
« última modificación: Febrero 05, 2023, 21:45:15 por javierglez »

javierglez

  • Commodore Master
  • *****
  • Mensajes: 465
  • terminator not seen
    • Ver Perfil
Re:Tweetcarts de BASIC
« Respuesta #2 en: Agosto 20, 2023, 00:05:44 »
Aqui pongo otro del dibujo de una galaxia.

* origbbcmicro.png (137.91 kB . 640x512 - visto 79 veces)
El codigo para BBC Micro es:
Código: [Seleccionar]
10 REM01377764
20 REM #bbcmicrobot =
30 MODE2
40 B=HIMEM
50 H=300
60 FORi=0TO7
70 VDU5,19,i,i?(PAGE+5)-48;0;
80 NEXT
90 FORi=0TOH
100 B!RND(B*2)=1285
110 NEXT
120 FORj=0TOB
130 X=RND(1):Y=RND(1)
140 IFRND(9)>5THENC=-RND(2):Y=-(Y^4)ELSEC=1:Y=-LN(Y^.3)
150 A=.2:S=4
160 FORk%=0TO2
170 X=X+FNN(X+Y*3)+FNN(Y)
180 Y=Y+FNN(Y+X*3)+FNN(X)
190 S=S+S
200 A=A/2
210 NEXT
220 Y=Y+.5
230 X=X*PI*2
240 s=650+SINX*Y*H
250 t=650+COSX*Y*H-s/4
260 GCOL0,C+POINT(s,t)AND7


270 PLOT69,s,t
280 NEXT
290 FORj=0TOH
300 X=RND(1):Y=RND(1)
310 IFRND(9)>5THENY=-(Y^4)ELSEY=-LN(Y^.3)
320 A=.2:S=4
330 FORk%=0TO2
340 X=X+FNN(X+Y*3)+FNN(Y)
350 Y=Y+FNN(Y+X*3)+FNN(X)
360 S=S+S
370 A=A/2
380 NEXT
390 X=RND(6)/6:Y=Y/3
400 X=X*PI*2
410 s=650+SINX*Y*H
420 t=650+COSX*Y*H-s/4
430 GCOL0,4
440 PLOT69,s,t
450 NEXT
460 REPEATUNTIL0
470 DEFFNN(x)
480 x=x*S
490 f=x-INTx
500 i=99*INTx
510 a=SINi
520 b=SIN(i+99)
530 =((a-INTa)*(1-f)+(b-INTb)*f)*A
Para C16:

* pan3zb.png (10.87 kB . 384x288 - visto 81 veces)
El listado en CBM BASIC 3.5:
Código: [Seleccionar]
10 graphic3,1:color0,1:color3,2:rem colores negro y blanco
20 c$=”743837”:l$=”463734”:remazul,cyan,rojo,amarillo,rojo,azul
30 ba=10000:ha=300
40 fori=0to250
45 xi=rnd(1)*160:yi=rnd(1)*200
50 draw3,xi,yitoxi,yi+1:next
60 forj=99toba
70 xa=rnd(1):ya=rnd(1)
80 ifrnd(1)>0.555thenzo=1:pi=1+int(rnd(1)*2):ya=-(ya^4):elsezo=3:pi=1:ya=-log(ya^.3)
85 ifzo=3andya<0.2thenzo=5
90 gosub220
100 ya=ya+0.5
110 gosub410
120 next
130 pi=3:zo=1
140 forj=0toha
150 xa=rnd(1):ya=rnd(1)
160 ifrnd(1)>0.555thenya=-(ya^4):elseya=-log(ya^.3)
170 gosub220
180 xa=int(1+rnd(1)*6)/6:ya=ya/3
190 gosub410
200 next
210 end:do:loopwhile1
220 remdefproccalc
230 aa=.2:sa=4
240 fork8=0to2
250 par=xa+ya*3
260 gosub500
270 xa=xa+re
280 par=ya
290 gosub500
300 xa=xa+re
310 par=ya+xa*3
320 gosub500
330 ya=ya+re
340 par=xa
350 gosub500
360 ya=ya+re
370 sa=sa+sa
380 aa=aa/2
390 next
400 return
410 remdefprocpunto
420 xa=xa*6.2832
430 s=80+sin(xa)*ya*ha/8
440 t=60+cos(xa)*ya*ha/4+s/2
450 g0=asc(mid$(c$,zo))-48:h0=asc(mid$(l$,zo))-48
460 g1=asc(mid$(c$,zo+1))-48:h1=asc(mid$(l$,zo+1))-48
470 color1,g0,h0:color2,g1,h1
475 ifzo=3orpi=2thenlocates,t:ifrdot(2)=pithenpi=3-pi
480 drawpi,s,t
490 return
500 remdeffnfunci
510 par=par*sa
520 f=par-int(par)
530 i=99*int(par)
540 a=sin(i)
550 b=sin(i+99)
560 re=((a-int(a))*(1-f)+(b-int(b))*f)*aa
570 return
Recordar que se puede copiar y pegar en VICE tal cual, por eso lo pongo en minusculas, menos la linea 20, que las comillas se escoñan y hay que volver a escribir o editar esa línea
Para C64:

* pan3zb64.png (10.63 kB . 384x272 - visto 79 veces)
Respecto del listado anterior, en CBM BASIC 3.5 en la edición C64, solo hay que hacer los cambios para cargarse la luminancia. Es cambiar las siguientes lineas:
Código: [Seleccionar]
20 c$=”743837”:remazul,cyan,rojo,amarillo,rojo,azul
450 g0=asc(mid$(c$,zo))-48
460 g1=asc(mid$(c$,zo+1))-48
470 color1,g0:color2,g1
Recordar que en C64 es necesario cargar el CBM BASIC3.5 antes de entrar este programa

PS1 Recordar también que no son iguales porque el sistema de gráficos es diferente y para este tipo de gráficos está mejor adaptado el BBC Micro.

PS2 Este dibujo es mas lento que un caracol incluso en Warp mode. En la maquina real debe tardar bastantes horas.
« última modificación: Agosto 20, 2023, 00:08:30 por javierglez »