Survive the electric bullet hell! Shoot at the atoms with Z, dodge electrons with Arrows, slow down with Shift, and use I for invincibility.
for(_='[A].z){q,dj0,~~~7Z=0;Bp="$00NN,@Math.XXrandom()W6N*W,Gc[c.FFea](`a[_);^,0)^_L"#N0"K=m/n)J:4*W-2c.arc(;onkey99)^=[],hz]=gz=e/n,c=e,b=Xm=ej=Xmc.fill(ED",k=0>A;A++)&&h[r].),Ft](),qvar e=.push({x:function("#fff" Fic](for(A](Fiy in ,a:.5>W?K: }^=eq_e.which,`),x,y,c)c[A[1]+[A[6]]A;var ab=3@d=55~f=~ghk=1,l=~$",A,r;Fei"center";c.font="20px Arial"down1}up0};B10hGy:Gf:1NsetInterval(qf++;_73l=!l^if(k_16]?2:4;_38d-ax(dL40d+in(d,5_37b-ax(bL39b+in(b,5"#777";~~6@6N^if(_90]qeBh)y-33<dx-35<bx+35>b--f,e++,0>f(e--jelete h[A]^e||($VICTORY ACHIEV)}}B5g3@y:1@b,c=g.length;2E3<A;A--)g.shift(^gqfor(r in hx-x,m=y-y,n=e*e+m*m;a==a?(b--J:(b++J}a;`^x+=b,y+=c,1Z^)}h)Fid3,FtSa3~~2*XPI*f/1NFid13ZFtS]1Z),^k_90]0==f%2( ,b-6j-4,11,-9!lk119!=Feg](bj,1,1).dat_0$YOU DI^K;b-3j-3,5,5^k||(FlA.5,~283,6@19), ,FlA1,Fix](p,3@3N))},33^';g=/[-J-L^-`FGWX@N$BZ~jqz]/.exec(_);)with(_.split(g))_=join(shift());eval(_)
Zm9yKF89J1tBXS56KXtxLGRqMCx+fn43Wj0wO0JwPSIkMDBOTixATWF0aC5YWHJhbmRvbSgpVzZOKlcsR2NbYy5GRmVhXShgYVtfKTteLDApXl9MIiNOMCJLPW0vbilKOjQqVy0yH2MuYXJjKB47b25rZXkdOTkpXhw9W10sG2h6Gl09GWd6GD1lL24sGGMXPWUsYj1YbRY9ZWo9WG0VYy5maWxsKBRFRCIsaz0wEz5BO0ErKykSJiYRaFtyXS4QKSxGdF0oKSwPcXZhciBlPQ4ucHVzaCh7eDoMZnVuY3Rpb24oCyIjZmZmIglGaWNdKAhmb3IoQQddESgGRml5GQUHIGluIAQsYTouNT5XP0s6CX1eAz0LZXFfZS53aGljaBkCLGApLB4aeCwaeSwBBGMpY1tBWzFdK1tBWzZdXRlBO3ZhciBhG2I9M0BkPTU1fmY9fmcbaBtrPTEsbD1+JCIsQSxyO0ZlaRkiY2VudGVyIjtjLmZvbnQ9IjIwcHggQXJpYWwiHWRvd24CMX0ddXACMH07B0IxMBJoDEd5OkdmOjFOA3NldEludGVydmFsKAtxZisrO183MwZsPSFsXmlmKGsOXzE2XT8yOjQ7XzM4BmQtFWF4KGRMNDAGZCsVaW4oZCw1HF8zNwZiLRZheChiTDM5BmIrFmluKGIsNRwFIiM3NzciOwh+fjZANk5eaWYoXzkwXXFlQgRoKRp5LTMzPGQRGngtMzU8YhEaeCszNT5iES0tGmYsZSsrLDA+GmYRKGUtLWplbGV0ZSBoW0FdXmV8fCgkVklDVE9SWSBBQ0hJRVYTKX19B0I1EmcMM0B5OjFAYh8sYx8DBz1nLmxlbmd0aDsyRTM8QTtBLS0pZy5zaGlmdCheBGdxZm9yKHIgaW4gaA4QeC0YeCxtPRB5LRh5LG49ZSplK20qbTsQYT09GGE/KBhiLRctSjooGGIrFytKfQUYYTtgXh4YeCs9GGIsGHkrPRhjLDFaXhQpfQRoKUZpZBkzLEZ0UxkaYQEzfn4yKlhQSSoaZi8xTg9GaWQZMQEzWg8FRnRTXQExWiksFF5rEV85MF0RMD09ZiUyESgFCSwIYi02ai00LDExLC05HCFsEWsRMTE5IT1GZWddKGJqLDEsMSkuZGF0XzAGJFlPVSBESRNeBUs7CGItM2otMyw1LDVea3x8KEZsQRkuNSwIfjI4Myw2QDE5KSwFCSxGbEEZMSxGaXhdKHAsM0AzTikpfSwzM14nO2c9L1sBLR9KLUxeLWBGR1dYQE4kQlp+anF6XS8uZXhlYyhfKTspd2l0aChfLnNwbGl0KGcpKV89am9pbihzaGlmdCgpKTtldmFsKF8p
// Program variables.
var keys = [];
var size = 600;
var player_x = 300;
var player_y = 550;
var frame = 0;
var bullets = [];
var bots = [];
var game_on = 1;
var invincible = 0;
var game_over_text = "";
var i;
var j;
var black = '#000';
var white = '#fff';
c.textAlign = "center";
c.font = '20px Arial';
// Set keyboard handlers.
onkeydown = function(e)
{
keys[e.which] = 1;
//console.log(e.which);
};
onkeyup = function(e)
{
keys[e.which] = 0;
};
// Initialize charge bots
for (i = 0; i < 10; i++)
{
bots.push({
x: Math.random() * size,
y: Math.random() * size,
health: 100,
charge: Math.random() < 0.5 ? black : white
});
}
setInterval(function()
{
frame++;
if (keys[73])
{
invincible = !invincible;
}
if (game_on)
{
var player_speed = keys[16] ? 2 : 4;
// Move up.
if (keys[38])
{
player_y -= player_speed;
player_y = Math.max(player_y, 0);
}
// Move down.
if (keys[40])
{
player_y += player_speed;
player_y = Math.min(player_y, size - 1);
}
// Move left.
if (keys[37])
{
player_x -= player_speed;
player_x = Math.max(player_x, 0);
}
// Move right.
if (keys[39])
{
player_x += player_speed;
player_x = Math.min(player_x, size - 1);
}
// Clear the screen. Prevent clearing on
// game over for a neat effect.
c.fillStyle = '#777';
c.fillRect(0, 0, size, size);
// Check charge bot and laser collision.
if (keys[90])
{
var count = 0;
for (i in bots)
{
if (bots[i].y - 33 < player_y &&
bots[i].x - 35 < player_x &&
bots[i].x + 35 > player_x)
{
bots[i].health -= 1;
}
count++;
// Prune bots who lose all of their health.
if (bots[i].health < 0)
{
count--;
delete bots[i];
}
}
if (!count)
{
game_over_text = 'VICTORY ACHIEVED';
game_on = 0;
}
}
}
// Spawn bullets.
for (i = 0; i < 5; i++)
{
bullets.push({
x: 300,
y: 100,
dx: Math.random() * 4 - 2,
dy: Math.random() * 4 - 2,
charge: Math.random() < .5 ? black : white
});
}
// Prune old bullets.
for (i = bullets.length; i > 2000; i--)
{
bullets.shift();
}
// Move and draw bullets.
for (i in bullets)
{
// Attract and repel bullets about the charge bots.
for (j in bots)
{
var dist_x = bots[j].x - bullets[i].x;
var dist_y = bots[j].y - bullets[i].y;
var dist = dist_x * dist_x + dist_y * dist_y;
if (bots[j].charge == bullets[i].charge)
{
bullets[i].dx -= dist_x / dist;
bullets[i].dy -= dist_y / dist;
}
else
{
bullets[i].dx += dist_x / dist;
bullets[i].dy += dist_y / dist;
}
}
// Draw the bullet.
c.fillStyle = bullets[i].charge;
c.beginPath();
c.arc(bullets[i].x += bullets[i].dx,
bullets[i].y += bullets[i].dy,
10, 0, 7);
c.fill();
}
// Draw charge bots.
for (i in bots)
{
c.lineWidth = 3;
c.strokeStyle = bots[i].charge;
// Draw the health ring.
c.beginPath();
c.arc(bots[i].x,
bots[i].y,
30,
0,
2 * Math.PI * bots[i].health / 100);
c.stroke();
c.lineWidth = 1;
// Draw the wire under the health ring.
c.beginPath();
c.arc(bots[i].x,
bots[i].y,
30,
0,
7);
c.stroke();
// Draw the core.
c.fillStyle = c.strokeStyle;
c.beginPath();
c.arc(bots[i].x,
bots[i].y,
10,
0,
7);
c.fill();
}
// Draw player laser.
if (game_on && keys[90] && frame % 2 == 0)
{
c.fillStyle = white;
c.fillRect(player_x - 6, player_y - 4, 11, -999);
}
// Check player and entity collision by looking at the pixel
// color at the player.
if (!invincible && game_on && c.getImageData(player_x, player_y, 1, 1).data[0] != 0x77)
{
game_over_text = 'YOU DIED';
game_on = 0;
}
// Draw player.
c.fillStyle = black;
c.fillRect(player_x - 3, player_y - 3, 5, 5);
// Draw game over text.
if (!game_on)
{
c.globalAlpha = .5;
c.fillRect(0, 283, 600, 19);
c.fillStyle = white;
c.globalAlpha = 1;
c.fillText(game_over_text, 300, 300);
}
}, 33);