Source for demo by Juan Carlos Clemente. See also description.
Q=L=1;F=[];t=document;M=Math;R=M.random;a=t.getElementById("c");X=a.width=550;Y=a.height=C=E=350;for(p in c=a.getContext("2d"))c[p[P=0]+(p[6]||"")]=c[p];
setInterval(function(){if(C||E){if(P){L++;if(!C){if(confirm("Fail "+P+" pts Share?"))t.location="http://twitter.com/?status="+escape("I got "+P+" on http://bit.ly/9ehgnG :D #js1k");P=L=0}}F=[];G=Q=1;C=E=0;for(k=34+L;k--;G++)F[k]={x:R()*X,y:R()*Y,b:3,c:R()+0.5,a:R()+0.5,e:R()*254,d:0};onmousedown=function(d){F.push({x:d.clientX,y:d.clientY,b:1,c:0,a:0,e:120,d:0});onmousedown=null}}with(c){ce(0,0,X,Y);for(var e=F.length,b=e;b--;)if(w=F[b]){if(w.a){for(A=e;A--;){v=F[A];if(A!=b&&!v.a){i=v.x-w.x;j=v.y-
w.y;if(v.b>M.sqrt(i*i+j*j)&&w.a){w.c=w.a=0;Q++}}}w.x+=w.c;w.y+=w.a;if(w.x>X||w.x<0)w.c*=-1;if(w.y>Y||w.y<0)w.a*=-1}else{w.b+=(40-w.b)/40;w.d++}fillStyle="hsl("+w.e+",70%,70%)";ba();a(w.x,w.y,w.b,0,M.PI*2,1);f();if(300==w.d){F[b]=0;G--;Q--;E=!Q?1:E;C=!G?1:C;P+=250}}strokeRect(0,0,X,Y);fillStyle="#000";fx("L "+L+" P "+P,5,15)}},5);