aUCBLogo Demos and Tests / bouncingparticles


be bouncingparticles
   
part 1000 4
end

be part partnum :pensize
   
intrepeat=10000
   
partx=(array partnum 1)
   
partv=array partx
   
parta=array partx
   
partcolor=array partx
   
partbounces=array partx
   
trails=false

   
setUpdateGraph false
   
setPointSize :pensize
   
disablePointSmooth
;   enablePointSmooth
   
cs ht pu setpc [50 230 20] 
   
setx sety -200 :pensize 
   
pd rt 90 fd 1000 pu home pd
   
OnMouseLeftDown [trails=true]
   
OnMouseRightDown 
   
[   cs ht pu setpc [50 230 20] 
      
setx sety -200 :pensize 
      
pd rt 90 fd 1000 pu home pd 
      
trails=false
   
]
   
repeat partnum
   
[   j=repcount
      
partx.j=Float List 0 0
      
partv.j=List rnd-0.5 (rnd+1)
      
parta.j=List 0.0 -0.01
      
partbounces.j=Int 0
      
partcolor.j=HSB 360*j/(partnum+11 1
   
]
   
norefresh
   
forever
   
[   if not trails [clearScreen]
      
partx+=partv
      
partv+=parta
      
repeat partnum
      
[   if partx.repcount.2 < -200
         
[   j=repcount
            
partx.j.2=-199.99
            
partv.j.2=-partv.j.2/1.5
            
partbounces.j=partbounces.j+1
            
if partbounces.j==10
            
[   partx.j=Float List 0 0
               
partv.j=List rnd-0.5 (rnd+1)
               
partbounces.j=Int 0
            
]
         
] 
      
]
      
setPixel partx partcolor
      
if Key? [break]
      
updateGraph
   
]
end