JS1K

#2: the original

Source for demo by Andris Reinman.

c=document.getElementById("c");c.height=300;c.width=300;c=c.getContext("2d");var x=[],v=2,y,l,w="#48E",h=0,q=[];function b(a,d){c.fillStyle=d&&isNaN(d)?d:d?"#FFF":"#0F0";c.fillRect(a[0]*10,a[1]*10,10,10)} u={r:function(){if(q[0][0]==x[0]&&q[0][1]==x[1]){h=1;y()}var a=!h&&q.pop(),d=Math.abs(v)>1?[q[0][0]+2/v,q[0][1]]:[q[0][0],q[0][1]+1/v];if(o(d))e();else{q.unshift(d);b(q[0]);a&&b(a,1);h=0}},c:function(a){switch(a.keyCode){case 38:v=-1;break;case 39:v=2;break;case 40:v=1;break;case 37:v=-2;break}},n:function(){return Math.round(Math.random()*27)+1}};f=function(){for(var a=0;a<30;a++){b([0,a],w);b([29,a],w);b([a,0],w);b([a,29],w)}};e=function(){clearInterval(t);alert("game over!")}; o=function(a){for(var d=q.length;d--;)if(a[0]==q[d][0]&&a[1]==q[d][1])return 1;if(a[0]<1||a[0]>28||a[1]<1||a[1]>28)return 1};y=function(){if(t){for(var a=0;!a;){x=[u.n(),u.n()];o(x)||(a=1)}b(x,"#E84")}};for(l=5;l;)q.push([5+--l,5]);for(l=5;l--;)b(q[l]);t=window.setInterval(u.r,300);document.addEventListener("keyup",u.c,0);f();y();