2P Games / 2P games ++
February 2014
Introduction:
One of my entries for JS1k 2014's contest: a compilation of 4 board games for two players in 1kb.
Golfed with Subzey.
Pick a game (Tic-tac-toe, Tic-tac-toe 3D, Four in a row or Reversi), then play with mouse, turn-by-turn.
You can read a post-mortem of this game in the tech blog.
Github:
https://github.com/codegolf/2Pgames
Play:
- 1K classic version: https://js1k.com/2014-dragons/demo/1820
- 2Kb improved version: https://js1k.com/2014-dragons/demo/1933
Source code (original version):
a=(c,d,e)=>{l=0;h="<center><font face=arial><p><button onclick=m=[];f=2;a(p=g=s=1)>XnO<button onclick=m=[];f=3;a(p=g=s=1)>XnO3D<button onclick=m=[];f=1;a(p=g=s=1)>find4<button onclick=m=[];f=w=0;m[27]=m[36]=-1;m[28]=m[35]=1;a(p=g=s=1)>flip</button><p>";if(c){for(i="1113"[f];i--;)for(h+="</table><p><table border>",j="8633"[f];j--;)for(h+="<tr>",k="8733"[f];k--;)h+="<th width=20 onclick=q("+[l,7-j,7-k]+") id=t"+l+">"+"X\xa0O"[1+(m[l]=m[l++]||0)];h+="</table><p>";~m.indexOf(0)?(h+=g?"XnO"[p+1]+" next<p>": "XnO"[-p+1]+" won",f||(h+=(w?0<w?"O>X":"X>O":"O=X")+"<p><button onclick=a(p=-p)>pass")):h+=f?g?"draw":"XnO"[-p+1]+" won":w?0<w?"O won":"X won":"draw"}b.innerHTML=h};a();q=function(c,d,e){if(g&&!m[c]){if(1<f)for(i=3;i--;)for(j=3;j--;)if(k=9*i,l=3*j,~[m[k+j]+m[k+j+3]+m[k+j+6],m[k+l]+m[k+l+1]+m[k+l+2],m[k+4]+m[k+0]+m[k+8],m[k+4]+m[k+2]+m[k+6],m[l+10]+m[l]+m[l+20],m[l+10]+m[l+2]+m[l+18],m[i+12]+m[i]+m[i+24],m[i+12]+m[i+6]+m[i+18],m[13]+m[0]+m[26],m[13]+m[2]+m[24],m[13]+m[6]+m[20],m[13]+m[8]+m[18],m[l+i]+m[l+i+9]+m[l+i+18]].indexOf(3*(m[c]=p)))g=0;if(1==f){for(;35>c&&!m[c+7];c+=7);for(i=6;i--;)for(j=7;j--;)if(k=7*i+j,~[4>j&&m[k]+m[k+1]+m[k+2]+m[k+3],3>i&&m[k]+m[k+7]+m[k+14]+m[k+21],3>i&&4>j&&m[k]+m[k+8]+m[k+16]+m[k+24],3>i&&2<j&&m[k]+m[k+6]+m[k+12]+m[k+18]].indexOf(4*(m[c]=p)))g=0}if(!f){s=0;for(i=2;~i--;)for(j=2;~j--;)if(i|j&&(t=0,m[8*(d+i)+e+j]==-p)){k=d+i;for(l=e+j;~k&&9>k&&~l&&9>l&&(m[8*k+l]!=p||!(s=t=1))&&m[8*k+l];k+=i,l+=j);if(t)for(u=d,v=e;u!=k||v!=l;u+=i,v+=j)m[8*u+v]=p}w=0;for(i=64;i--;)w+=m[i]}s&&(p=-p);a(1)}}
Demo (improved version):