Skip to content

Instantly share code, notes, and snippets.

@ecto
Last active December 28, 2015 22:59
Show Gist options
  • Save ecto/7575441 to your computer and use it in GitHub Desktop.
Save ecto/7575441 to your computer and use it in GitHub Desktop.
var pr=process;var si="stdin";var so="stdout";var psi=pr[si];var pso=pr[so];var w=pso.columns;var h=pso.rows;
var d="r";var as=[];var pi=parseInt;var ps=[{x:pi(w/2,10),y:pi(h/2,10)}];
function p(a){process.stdout.write(a)}var mr=Math.random;
function ga(e){for(var a=0;a<e;a++){var b={x:pi(mr()*w,10),y:pi(mr()*h,10)};as.push(b)}}
function c(){p("\033[2J")}
function dr(){c();for(var a in as){dp(as[a].x,as[a].y,"41")}for(var a in ps){dp(ps[a].x,ps[a].y,"42")}}
function dp(b,e,a){p("\033["+e+";"+b+"H");p("\033[0;"+a+"m");p(" ");p("\033[0;0m")}
function t(){for(var a=ps.length-1;a>=0;a--){if(a!=0){ps[a].x=ps[a-1].x;ps[a].y=ps[a-1].y}
else{switch(d){case"u":ps[0].y--;break;case"r":ps[0].x++;break;case"d":ps[0].y++;break;case"l":ps[0].x--;break}
var b=cc();if(b==1){ra(ps[0].x,ps[0].y);at();at();ga(1)}if(b==2){}}}}
function ra(b,e){for(var a in as){if(as[a].x==b&&as[a].y==e){delete as[a]}}}
function cc(){var a=ps[0];for(var b in as){if(a.x==as[b].x&&a.y==as[b].y){return 1}}}
function at(){var e=ps[ps.length-1];var f;var b={x:e.x,y:e.y};var a={u:"d",r:"l",d:"u",l:"r"};
if(ps.length==1){f=a[d]}else{}switch(f){case"u":b.y--;break;case"r":b.x++;break;case"d":b.y++;break;case"l":b.x--;break}ps.push(b)}
function tg(a){if(ps.length==1){d=a;return}var b;switch(a){case"u":b=ps[0].y-ps[1].y-1;break;
case"r":b=ps[0].x-ps[1].x+1;break;case"d":b=ps[0].y-ps[1].y+1;break;case"l":b=ps[0].x-ps[1].x-1;break}if(b!=0){d=a}}
ga(1);psi.resume();psi.setRawMode(true);psi.setEncoding("utf8");psi.on("data",
function(a){switch(a){case"\u001b[A":tg("u");break;case"\u001b[B":tg("d");break;case"\u001b[C":tg("r");break;case"\u001b[D":tg("l");break;case"\u0003":pr.exit();break;default:p(a)}});
setInterval(function(){t();dr()},50);
@ecto
Copy link
Author

ecto commented Nov 21, 2013

This can definitely be further minified

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment