Aim with the mouse and press and release to fire. Try to get all the blue balls into the black holes.
for(_='maHballsNN.Hp(QatZMZh.qqcos(z),~*=-1~V(lU=>{k=UkjptsLl.KKvJJx`e(_||^t=Fc.EEbeginPZh(~DDEarc(Ca.BBwidthA*=.99,@0~&&U,a,t,e250*(,stpKyKxm.);1EfillStyle="#000",=qZan2(0,",26=Kclient<135)(Jqsin(var for( rectText(~EtranslZ_qhypot(-)/0+.5|0)-K~onmouseN[0].N=[{x:295,y:c:"#fff",i:1}],i=6;--i;)G=i;G--;)N.push({x:400+*i,y:9+*(G-i/2~c:"blue"}=(,s)kDs,Rect)} L=H=FlFm={d:0};setIntervalUkA=A,(10105530"#841"~(,,50"lime"e=6;e--;)C+e%3*+e/3>>27~(QU,a)k`^(`=Jy=+=`,+=Jy,`@Jy@(>615^xV(>365^yV(x+,(y+)<N.splic_a,1)L++,Qak F-Bx,-ByifU!=at<20){ cBy-,Bx-~e=c~s=zc`-=s,Jy-=e,Bvx+=s,Bvy+=e}}~C,,17~Kc,()}~Hy-y,x-x)+3=vx,vy)<.03(Esav_x,y~ErotZ_Hd?-30/Ut-t)-30:5*t/1(-135,125,"#952"~Erestor_)~EfonF"3em a",N[1]^"Winner!i^"Game OverL,367t++},16downj++d,lFt}upj--d(vx=10*zH~vy=10*H))}movejxX,yY}';G=/[-@-F^-`J-LjkUV~zqZQNH]/.exec(_);)with(_.split(G))_=join(shift());eval(_)
Zm9yKF89J21hSGJhbGxzTk4uSHAoUWF0Wk1aaC5xcWNvcyh6KSx+Kj0tMX5WKGxVPT57az1Va2pwdHNMbC5LS3ZKSnhgZShffHxedD1GYy5FRWJlZ2luUFpoKH5EREVhcmMoQ2EuQkJ3aWR0aEEqPS45OSxAMH4fJiYeVSxhLHQsZR0yNRwcMCooGyxzdHAaS3kZS3gYbS4XKTsWMRwVRWZpbGwUFFN0eWxlPRMTIiMwMDAiLBI9cVphbjIoETAsECIsHBAyNh8PPUtjbGllbnQOPDEzNSkeKEoMcXNpbigLdmFyIAlmb3IoCQhyZWN0BxRUZXh0KAZ+RXRyYW5zbFpfBXFoeXBvdCgELRUpLxwwKy41fDApLUsDfm9ubW91c2UCTlswXS4BCE49W3t4OjI5NSx5OhwQYzoiI2ZmZiIsaToxfV0saT02Oy0taTspCEc9aTtHLS07KU4ucHVzaCh7eDo0MDArHCppLHk6HDkrHCooRy1pLzJ+YzoiYmx1ZSJ9Fgc9KB0scylrRBNzLBRSZWN0HSl9FglMPUg9RmxGEG09e2Q6MH07c2V0SW50ZXJ2YWxVa0E9QSwHKDEwEDEwEDU1EDMwECIjODQxIn4HKBUsFSw1MBAcECJsaW1lIhYIZT02O2UtLTspQxUrZSUzKhwQFSsbZS8zPj4fMhAQN34SFCgWUVUsYSlrYF4oYD1KeT0fGCs9YCwZKz1KeSxgQEp5QCgYPjYxNV4YDHhWKBk+MzY1XhkMeVYEGygYA3grFSwbKBkDeSsVKTwcHk4uc3BsaWNfYSwxKR5MKyssUWFrCUYEGC1CeCwZLUJ5FmlmVSE9YR50PDIwKXsJYxFCeS0ZLEJ4LRh+ZT0LY35zPXpjFmAtPXMsSnktPWUsQnZ4Kz1zLEJ2eSs9ZX19fkMYLBksMRAQN34TS2MsFCgpfX5IERd5LQF5LBd4LQF4KSszGj0EAXZ4LAF2eSk8LjAzGh4oRXNhdl8FAXgsAXl+RXJvdFpfSAUXZD8tMzAvVXQtdCktMzA6NSoLdC8xHx8HKC0xMzUsEDEyEDUsIiM5NTIifkVyZXN0b3JfKX5FZm9uRiIzZW0gYSIsEk5bMV1eBiJXaW5uZXIhDwFpXgYiR2FtZSBPdmVyDwZMLDM2EDcfdCsrfSwxNgJkb3duaisrF2QsbEZ0fQJ1cGotLRdkGh4oAXZ4PTEwKnpIfgF2eT0xMCoLSCkpfQJtb3Zlahd4DlgsF3kOWX0WJztHPS9bAS0fQC1GXi1gSi1MamtVVn56cVpRTkhdLy5leGVjKF8pOyl3aXRoKF8uc3BsaXQoRykpXz1qb2luKHNoaWZ0KCkpO2V2YWwoXyk=
//Before minifying and RegPacking
var balls = [{x: 295, y: 250, c: "#fff", i: 1}];
for (var i = 6; --i;) {
for (var j = i; j--;) {
balls.push({x: 400 + i * 25, y: 259 + (j - i / 2) * 25, c: "blue"});
}
}
rect = (x, y, width, height, color) => {
c.beginPath();
c.fillStyle = color;
c.fillRect(x, y, width, height);
}
var pts = ma = t = lt = 0, m = {d: 0};
setInterval(e => {
a.width = a.width;
rect(100, 100, 550, 300, "#841");
rect(125, 125, 500, 250, "lime");
for (var i = 6; i--;) {
c.beginPath();
c.arc(125 + i % 3 * 250, 125 + (i / 3 >> 0) * 250, 20, 0, 7);
c.fillStyle = "#000";
c.fill();
}
balls.map((b,i) => {
if (!b.vx) b.vx = b.vy = 0;
b.x += b.vx;
b.y += b.vy;
b.vx *= 0.99;
b.vy *= 0.99;
if (b.x > 615 || b.x < 135)
b.vx *= -1;
if (b.y > 365 || b.y < 135)
b.vy *= -1;
Math.hypot(((b.x - 125) / 250 + .5 | 0) * 250 - b.x + 125, ((b.y - 125) / 250 + .5 | 0) * 250 - b.y + 125) < 25 && balls.splice(i, 1) && pts++;
balls.map(o => {
var dist = Math.hypot(b.x - o.x, b.y - o.y);
if (b != o && dist < 20) {
var angle = Math.atan2(o.y - b.y, o.x - b.x);
var s = Math.sin(angle);
var q = Math.cos(angle);
//var spread = 20 - dist;
//b.x -= spread * q;
//b.y -= spread * s;
//var punch = Math.hypot(b.vx, b.vy) * .9;
b.vx -= q;
b.vy -= s;
o.vx += q;
o.vy += s;
}
});
c.beginPath();
c.arc(b.x, b.y, 10, 0, 7)
c.fillStyle = b.c;
c.fill();
});
ma = Math.atan2(m.y - balls[0].y, m.x - balls[0].x) + 3;
stp = Math.hypot(balls[0].vx, balls[0].vy) < .03;
if (stp) {
c.save();
c.translate(balls[0].x, balls[0].y);
c.rotate(ma);
c.translate(m.d ? -30 / (lt - t) - 30 : Math.sin(t / 10) * 5, 0);
rect(-135, 0, 120, 5, "#952");
c.restore();
}
c.font = "3em a";
c.fillStyle = "#000";
balls[1] || c.fillText("Winner!", 250, 260);
balls[0].i || c.fillText("Game Over", 250, 260);
c.fillText(pts, 360, 70);
t++;
}, 16);
onmousedown = e => {++m.d; lt = t;}
onmouseup = e => {--m.d; if (stp) balls[0].vx = Math.cos(ma) * 10, balls[0].vy = Math.sin(ma) * 10}
onmousemove = e => {m.x = e.clientX; m.y = e.clientY};
//ontouchmove = e => {m.x = e.touches[0].clientX; m.y = e.touches[0].clientY};