| Volcan polícromo
| Adaptacion del programa SimpleParticle (Yabasic). Galileo (2016)
^r4/lib/gui.txt
|numero de particulas, posicion de origen, aceleracion, tempo
#nParts 1000 #xo 500 #yo 400 #a 10.0 #t 0.05
#vx #vy #xp #yp #colorin | campos del registro
#Parts )( 20000 | 1000 * 20
:int 16 >> ;
:ccolor | b g r --
8 << or 8 << or ;
:ran | n -- n
rnd swap mod abs ;
:dot | c x y
0 <? ( 3drop ; ) sh >=? ( 3drop ; )
swap 0 <? ( 3drop ; ) sw >=? ( 3drop ; ) swap
setxy px!+ ;
:leereg | d -- d'
dup 'vx !
4 + dup 'vy !
4 + dup 'xp !
4 + dup 'yp !
4 + dup 'colorin !
4 +
;
:nuevaPart |
40 ran 20 - 16 << vx !
80 ran neg 16 << vy !
xo 16 << xp !
yo 16 << yp !
256 ran | b
256 ran | g
256 ran | r
ccolor colorin !
;
:evalua
swap sh 16 << >? ( 3drop nuevaPart )( swap
>r 2dup colorin @ rot int rot int dot yp ! xp ! r> vy ! )
;
:volcan
'Parts 1 ( nParts <=? )( swap
leereg
vx @ t *. xp @ + | xn
vy @ t *. yp @ + | yn
a t *. vy @ + | vyn
$000000 xp @ int yp @ int dot | borra pixel de antigua posicion
evalua
swap 1+ ) 2drop
;
:inicializa
'Parts 1 ( nParts <=? )( swap leereg nuevaPart swap 1+ ) 2drop ;
: msec rndseed inicializa $000000 paper cls show volcan 'exit >esc< ;