-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsolitaire.html
1 lines (1 loc) · 1.1 KB
/
solitaire.html
1
<body style=margin:0 onload='d=document,I=J=O=P=0,W="#fff",B="#000",G="grey",a=Array,H=a(6),F=a(6),L=_=>_.length-1;$=(_,f)=>_.map(f);with(c.getContext`2d`)font="12px Monospace",K=_=>fillStyle=_,A=Math.abs,T=(x,b,c,y=145)=>$([0,1,2,1,2],(_,i)=>fillRect(K(i>2?c:b)|x+_,y+(z=2-i%3),71-2*_,95-2*z)),X=i=>240+i*82,Y=j=>145+j*16,C=(v,x,y,h)=>fillText(K(h?B:W,T(x,h?G:W,h?W:B,y))|v,x+3,y+12),D=$([...a(36)],(_,i)=>i%9+1),$(D,(_,i)=>(D[i]=D[j=Math.random()*++i|0],D[j]=_)),D=$([...a(6)],i=>D.splice(0,6)),d.onmousemove=Z=_=>$(D,(d,i)=>F[T(x=X(i),G,B)|i]?T(x,W,"#222"):$(d,(c,j)=>!O||i-I||j<J?C(c,x,Y(j),H[i]&&j==L(d)):0),fillRect(K(B)|0,0,960,540))|O&&$(D[I].slice(J),(c,j)=>C(c,_.x-O,_.y-P+j*16,H[I]&&j==L(D[I])-J)),d.onmousedown=({x,y})=>$(D,(d,i)=>$(d,(_,j)=>!F[i]&&A(X(i)+35-x)<35&&Y(j)<y&&y<Y(j)+(j-L(d)?16:95)&&!d.slice(j+1).some((_,i)=>_+1-d[j+i])?O=x-X(I=i,P=y-Y(J=j)):0)),d.onmouseup=_=>$(D,(d,i)=>A(_.x-O-X(i))<35&&A(_.y-P-Y(L(d)))<95&&!H[i]*!F[i]&&(D[i]==0||D[i][L(D[i])]-1==D[I][J]||(H[i]=J==L(D[I])&&!H[I]))&&(D[i].push(...D[I].splice(J)),H[I]=0,F[i]=D[i]=="9,8,7,6,5,4,3,2,1"))|Z(O=0),Z()'><canvas id=c width=960 height=540>