eval(s=(%w@ q=$*[0]&.to_i; z="eval(s=(%w#{64.chr}#{s}##{s*9}#{64.chr}.join))"; h=25;w=80; px=2;py=h/2; vx=0.5;vy=-0.5; qx=w-3;qy=h/2; ux=-0.5;uy=0.5; b=Array.new(h*w){|i| y=i/w; x=i%w; (x==0||x==w-1||y==0||y==h-1)?2:(w/2(x,y,vx,vy,c){ sx=vx;sy=vy; 8.times{|i| t=i*Math::PI/4; cos=Math.cos(t); sin=Math.sin(t); nx=x+cos/2; ny=y+sin/2; k=ny.to_i*w+nx.to_i; if(0<=nx&&nx(x,y,vx,vy){ [(x+vx<0||w<=x+vx)?-vx:vx,(y+vy<0||h<=y+vy)?-vy:vy] }; j=0; loop{ j+=1; (vx,vy=f[px,py,vx,vy,0]); (vx,vy=g[px,py,vx,vy]); px+=vx; py+=vy; (ux,uy=f[qx,qy,ux,uy,1]); (ux,uy=g[qx,qy,ux,uy]); qx+=ux; qy+=uy; q&&((q=w-8)?"#{64.chr}.join))"[8+x-w]:c[y*w+x]?[z[i],i+=1][0]:32.chr) }; puts; }; sleep(0.05); } @.join))