littl button at the bottom of my posts that says "Source"
by the way, heres the latest version. Looks really, really sweet if you rem out the cls command at the beginning of the do-loop
sync on
sync rate 0
hide mouse
randomize timer()
NUMBEROFBALLS = rnd(6)+1
NUMBEROFGRAV = rnd(4)+1
SCREENWIDTH = 640
SCREENHEIGHT = 480
global timer1=0
global timer2=0
dim dx(NUMBEROFBALLS,40) as float
dim dy(NUMBEROFBALLS,40) as float
type balltype
x# as float
y# as float
vx# as float
vy# as float
ax# as float
ay# as float
c1 as integer : c2 as integer : c3 as integer
endtype
type gravtype
x# as float
y# as float
size# as float
endtype
dim ball(NUMBEROFBALLS) as balltype
dim grav(NUMBEROFGRAV) as gravtype
GRAVITY# as float
FRICTION# as float
`Init the balls
for j=1 to NUMBEROFBALLS
ball(j).x# = rnd(SCREENWIDTH-40)+20
ball(j).y# = rnd(SCREENHEIGHT-40)+20
ball(j).vx# = 0.0
ball(j).vy# = 0.0
ball(j).ax# = 0.0
ball(j).ay# = 0.0
ball(j).c1 = 128*rnd(1)+127
ball(j).c2 = 128*rnd(1)+127
ball(j).c3 = 128*rnd(1)+127
for i=1 to 40
dx(j,i) = ball(j).x#
dy(j,i) = ball(j).y#
next i
next j
`init the planets (gravs)
for j=1 to NUMBEROFGRAV
grav(j).x# = rnd(SCREENWIDTH-100) + 70.0
grav(j).y# = rnd(SCREENHEIGHT-100) + 70.0
grav(j).size# = rnd(30) + 10.0
next j
GRAVITY# = 0.1
FRICTION# = 0.95
do
cls
set cursor 0,0
for j=1 to NUMBEROFBALLS
`Reset the acceleration vars
ball(j).ax# = 0.0
ball(j).ay# = 0.0
`Shufle the trail array
for i=39 to 1 step -1
dx(j,i+1) = dx(j,i)
dy(j,i+1) = dy(j,i)
next i
`Gravity
for i=1 to NUMBEROFGRAV
`Calculate the distance and gravity effect of each grav
dist# = sqrt((ball(j).x#-grav(i).x#)^2 + (ball(j).y#-grav(i).y#)^2)
accel# = (GRAVITY# * grav(i).size#) / dist#
`Update the acceleration and velocity
ball(j).ax# = ball(j).ax# + accel#*((grav(i).x#-ball(j).x#)/dist#)
ball(j).ay# = ball(j).ay# + accel#*((grav(i).y#-ball(j).y#)/dist#)
ball(j).vx# = ball(j).vx# + ball(j).ax#
ball(j).vy# = ball(j).vy# + ball(j).ay#
next i
ball(j).vx# = ball(j).vx# * FRICTION#
ball(j).vy# = ball(j).vy# * FRICTION#
`Update the velocities and positions
ball(j).x# = ball(j).x# + ball(j).vx#
ball(j).y# = ball(j).y# + ball(j).vy#
`Check screen limits and bounce if neccesary
if ball(j).x#<10.0
ball(j).x#=10.0
ball(j).vx# = -ball(j).vx# * FRICTION#
ball(j).vy# = ball(j).vy# * FRICTION#
endif
if ball(j).x#>SCREENWIDTH-10
ball(j).x#=SCREENWIDTH-10
ball(j).vx# = -ball(j).vx# * FRICTION#
ball(j).vy# = ball(j).vy# * FRICTION#
endif
if ball(j).y#<10.0
ball(j).y#=10.0
ball(j).vx# = ball(j).vx# * FRICTION#
ball(j).vy# = -ball(j).vy# * FRICTION#
endif
if ball(j).y#>SCREENHEIGHT-10
ball(j).y#=SCREENHEIGHT-10
ball(j).vx# = ball(j).vx# * FRICTION#
ball(j).vy# = -ball(j).vy# * FRICTION#
endif
`Update trail position
dx(j,1) = ball(j).x#
dy(j,1) = ball(j).y#
`Draw trail
for i=39 to 1 step -1
`ink rgb(ball(j).c1,ball(j).c2,ball(j).c3),0
ink rgb(pos(ball(j).c1,i*255/40),pos(ball(j).c2, i*255/40),pos(ball(j).c3, i*255/40)),0
circle dx(j,i+1), dy(j,i+1), 9*(1-(i/40.0))
next i
`draw ball
ink rgb(ball(j).c1,ball(j).c2,ball(j).c3),0
circle ball(j).x#, ball(j).y#, 9
next j
for i=1 to NUMBEROFGRAV
ink rgb(255,255,255),0
circle grav(i).x#, grav(i).y#, grav(i).size#/2
next i
`print true fps
ink rgb(255,255,255),0
print framespersecond()
sync
loop
end
function pos(value1 as float, value2 as float)
if value1-value2<0 then exitfunction 0
endfunction (value1-value2)
function framespersecond()
timer2 = timer()
result = 1000/(timer2-timer1)
timer1 = timer()
endfunction result