Source for demo by Ben Larson.
c=document.getElementById('c');w=800;h=600;c.width=w;c.height=h;d=c.getContext("2d");x=w/2;y=h/2;r=10;t=20;g=.1;v=u=p=s=0;a=[];e=[];l=[];n=[];o=[];f=[];m=Math;it=setInterval(b,33);onkeypress=k;a1=.98;r1=m.random;function b(){a1-=.00001;d.clearRect(0,0,w,h);d.strokeRect(x-r,y-r,t,t);d.fillText(s,0,r);u+=g;if(p&1)u-=1;if(p&2)v-=1;if(p&4)v+=1;if(p&8){$(a,x);$(e,y);$(l,v);$(n,u+2);$(o,1)}p=0;if(r1()>a1)$(f,r1()*w);for(i=0;i<a.length;i++){d.fillRect(a[i],e[i],2,2);if(o[i]){n[i]+=g;l[i]*=.95;if(e[i]>h-t){for(j=0;j<f.length;j++){if(a[i]>f[j]&&a[i]<f[j]+t){f.splice(j,1);s++}}}}else{if(a[i]>x-r&&a[i]<x+r&&e[i]>y-r&&e[i]<y+r)clearInterval(it)}e[i]+=n[i];a[i]+=l[i];if(e[i]<0||e[i]>h||a[i]<0||a[i]>w){_(a);_(e);_(l);_(n);_(o)}}y+=u+h;x+=v+w;x%=w;y%=h;for(i=0;i<f.length;i++){d.fillRect(f[i],h-t,t,t);if(r1()>.99){$(a,f[i]+r);$(e,h-t);q=r1()-.5;z=-4;$(l,m.sin(q)*z);$(n,m.cos(q)*z);$(o,0)}}}function k(e){z=e.which;if(z==119)p|=1;if(z==97)p|=2;if(z==100)p|=4;if(z==98)p|=8}function _(a){a.splice(i,1)}function $(a,b){a.push(b)}