aboutsummaryrefslogtreecommitdiffhomepage
path: root/pw0.rb
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2024-01-31 23:40:27 +0900
committernsfisis <nsfisis@gmail.com>2024-01-31 23:42:05 +0900
commit69c0972c81c60f47217a6e345b6e01b73de41af4 (patch)
treeb96bf24e40b2499db4092eb367cb53f5d9621b3d /pw0.rb
parent21bf0f20145f0d7b5dc4d0922ef6e55120dcd583 (diff)
downloadpong-wars-quine.rb-69c0972c81c60f47217a6e345b6e01b73de41af4.tar.gz
pong-wars-quine.rb-69c0972c81c60f47217a6e345b6e01b73de41af4.tar.zst
pong-wars-quine.rb-69c0972c81c60f47217a6e345b6e01b73de41af4.zip
add filesHEADmain
Diffstat (limited to 'pw0.rb')
-rw-r--r--pw0.rb68
1 files changed, 68 insertions, 0 deletions
diff --git a/pw0.rb b/pw0.rb
new file mode 100644
index 0000000..35e1303
--- /dev/null
+++ b/pw0.rb
@@ -0,0 +1,68 @@
+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)?1:0
+ };
+
+ f=->(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<w&&0<=ny&&ny<h&&b[k]!=c);
+ b[k]==2?0:b[k]=c;
+ (sin.abs<cos.abs)?sx*=-1:sy*=-1;
+ end
+ };
+ [sx,sy]
+ };
+ g=->(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<j)?(break):(q!=j)?(next):0);
+ q||(print"\e[H\e[2J");
+ c=[];
+ h.times{|y|
+ w.times{|x|
+ c<<!(b[y*w+x]==0&&[px.to_i,py.to_i]!=[x,y]||[qx.to_i,qy.to_i]==[x,y])
+ };
+ };
+ t=c.count(!!0);
+ i=0;
+ h.times{|y|
+ w.times{|x|
+ print((y==h-1&&x>=w-8)?"#{64.chr}.join))"[8+x-w]:c[y*w+x]?[z[i],i+=1][0]:32.chr)
+ };
+ puts;
+ };
+ sleep(0.05);
+ }
+
+@.join))