-
Notifications
You must be signed in to change notification settings - Fork 54
/
lupire.min.js
1 lines (1 loc) · 9.55 KB
/
lupire.min.js
1
javascript:krazete:function choose(e){return e[Math.floor(Math.random()*e.length)]}function newHex(e,t){void 0===e&&(e=0),void 0===t&&(t=16);for(var n=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"],s="#",o=0;o<6;o++)s+=choose(n.slice(e,t));return s}function newByte(e,t,n){void 0===t&&(t=0),void 0===n&&(n=256);for(var s=[],o=0;o<256;o++)s.push(o);for(var i="rgba(",o=0;o<3;o++)i+=choose(s.slice(t,n))+",";return i+=e+")"}function newBlock(e){for(var t=[0,1,2,2,3,3,3,3,4,4,5,5],n=[],s=0;s<blocks.length;s++)for(var o=0;o<e[t[s]];o++)n.push(blocks[s]);return choose(n)}var compass,edges,goal,ball,blocks=[full={img:1,goto:[0,1,2,3]},empty={img:0,goto:[2,3,0,1]},bslash={img:1,goto:[1,0,3,2]},slash={img:0,goto:[3,2,1,0]},cornertr={img:[1,1,0,0],goto:[0,1,3,2]},cornerbr={img:[1,0,0,1],goto:[0,2,1,3]},cornerbl={img:[0,0,1,1],goto:[1,0,2,3]},cornertl={img:[0,1,1,0],goto:[3,1,2,0]},vpipe={img:[1,0,1,0],goto:[0,3,2,1]},hpipe={img:[0,1,0,1],goto:[2,1,0,3]},ccw={img:1,goto:[1,2,3,0]},cw={img:0,goto:[3,0,1,2]}],spinster=document.createElement("style"),span=(spinster.textContent="@keyframes cwise{ from{transform:rotate(0deg);} to{transform:rotate(360deg);} }",spinster.textContent+="@keyframes ccwise{ from{transform:rotate(360deg);} to{transform:rotate(0deg);} }",document.body.appendChild(spinster),3),distribution=[0,2,1,0,0,0],zoom=75,unit=zoom/span,speed=.1,game=document.createElement("div"),corners=(game.style.position="fixed",game.style.top="50%25",game.style.left="50%25",game.style.transform="translate(-50%25,-50%25)",game.style.transition=speed+"s opacity",game.style.zIndex="9999",document.getElementsByClassName("cornerBox")),inners=document.getElementsByClassName("innerBox"),rawEdges=document.getElementsByClassName("edgeBox"),lvl=1,pts=0,hp=15,board=document.createElement("div"),tab=(board.style.background="white",board.style.textAlign="center",board.style.position="fixed",board.style.top=(100+zoom)/2+"vmin",board.style.left="50%25",board.style.transform="translateX(-50%25)",board.style.transition=speed+"s opacity",board.style.border="1px solid black",board.style.padding="1vmin",board.style.borderRadius="1vmin",board.style.zIndex="9999",document.body.appendChild(board)," | ");function newGame(e,t,n,s){if(distribution=t=void 0===t?distribution:t,unit=(zoom=n=void 0===n?zoom:n)/(span=e=void 0===e?span:e),speed=s=void 0===s?speed:s,board.style.opacity=1,board.textContent="Lives: "+hp+tab+"Points: "+pts+tab+"Level: "+(span-2)+tab+"Sublevel: "+lvl+"/"+(span-2),0==hp||2==span)return hide(),disable(),ball.remove(),board.innerText+="\nGAME OVER",0;for(;game.lastChild;)game.removeChild(game.lastChild);for(game.remove(),game.style.background=newByte(.75,64,192),game.style.height=zoom+"vmin",game.style.width=zoom+"vmin",game.style.borderRadius=.5*unit+"vmin",game.style.opacity=1,document.body.appendChild(game),compass=newBoard(),edges=[],i=0;i<rawEdges.length;i++)rawEdges[i].end=newPath(rawEdges[i].x,rawEdges[i].y),edges.push(rawEdges[i]);edges.sort(function(e,t){return e.end.steps-t.end.steps}),setTimeout(setUp,1e4*speed*(1+span/10))}function setUp(){goal=newGoal(),ball=newBall(goal.x,goal.y),hide(),enable()}function newBoard(){for(var e=newHex(0,8),t=[],n=[],s=0;s<span;s++){t[s]=[],n[s]=[];for(var o=0;o<span;o++){var i=document.createElement("div"),r=(i.style.height=unit+"vmin",i.style.width=unit+"vmin",i.style.position="absolute",i.style.top=s*unit+"vmin",i.style.left=o*unit+"vmin",i.style.boxSizing="border-box",i.style.boxShadow="inset 0 0 3vmin "+game.style.backgroundColor,game.appendChild(i),document.createElement("div")),i=(r.x=s,r.y=o,r.style.position="absolute",r.style.top=s*unit+"vmin",r.style.left=o*unit+"vmin",r.style.boxSizing="border-box",0==s&&0==o||0==s&&o==span-1||s==span-1&&o==span-1||s==span-1&&0==o?(i.remove(),t[s][o]=blocks[0],n[s][o]="X",r.className="cornerBox",r.style.transition=speed+"s border-radius",0==s&&0==o?(r.style.borderTopLeftRadius="50%25",r.addEventListener("mouseover",function(){this.style.borderTopLeftRadius="25%25"}),r.addEventListener("mouseout",function(){this.style.borderTopLeftRadius="50%25"}),r.addEventListener("click",newGame)):0==s&&o==span-1?((i=document.createElement("div")).style.background="white",i.style.height=.5*unit+"vmin",i.style.width=.1*unit+"vmin",i.style.borderRadius=100/3+"%25",i.style.position="absolute",i.style.top=.25*unit+"vmin",i.style.left=.45*unit+"vmin",i.style.transform="rotate(45deg)",r.appendChild(i),(i=i.cloneNode()).style.transform="rotate(-45deg)",r.appendChild(i),r.style.borderTopRightRadius="50%25",r.addEventListener("mouseover",function(){this.style.borderTopRightRadius="25%25"}),r.addEventListener("mouseout",function(){this.style.borderTopRightRadius="50%25"}),r.addEventListener("click",function(){game.style.opacity=0,board.style.opacity=0,setTimeout(function(){game.remove(),board.remove()},100)})):s==span-1&&o==span-1?(r.style.borderBottomRightRadius="50%25",r.addEventListener("mouseover",function(){this.style.borderBottomRightRadius="25%25"}),r.addEventListener("mouseout",function(){this.style.borderBottomRightRadius="50%25"}),r.addEventListener("click",hide)):s==span-1&&0==o&&(r.style.borderBottomLeftRadius="50%25",r.addEventListener("mouseover",function(){this.style.borderBottomLeftRadius="25%25"}),r.addEventListener("mouseout",function(){this.style.borderBottomLeftRadius="50%25"}),r.addEventListener("click",show))):0==s||s==span-1||0==o||o==span-1?(0==s||s==span-1?(t[s][o]=blocks[8],n[s][o]=0==s?[3,3,3,3]:[1,1,1,1]):0!=o&&o!=span-1||(t[s][o]=blocks[9],n[s][o]=0==o?[0,0,0,0]:[2,2,2,2]),r.className="edgeBox",r.style.background="rgba(0,0,0,0.25)",r.style.transition=2*speed+"s background"):(t[s][o]=newBlock(distribution),n[s][o]=t[s][o].goto,r.className="innerBox",r.style.borderRadius=100/3+"%25",r.style.transition=2*speed+"s opacity"),t[s][o]),a="innerBox"==r.className?"white":e;i==full||i==empty?(r.style.background=i.img?a:"transparent",r.style.height=unit+"vmin",r.style.width=unit+"vmin"):i==bslash||i==slash?(r.style.background=a,r.style.left=(o+.4)*unit+"vmin",r.style.height=unit+"vmin",r.style.width=.2*unit+"vmin",r.style.transform="rotate("+[45,-45][i.img]+"deg)"):i==cornertr||i==cornerbr||i==cornerbl||i==cornertl?(r.style.height=unit+"vmin",r.style.width=unit+"vmin",r.style.borderRight=.5*unit+"vmin solid "+(i.img[0]?a:"transparent"),r.style.borderTop=.5*unit+"vmin solid "+(i.img[1]?a:"transparent"),r.style.borderLeft=.5*unit+"vmin solid "+(i.img[2]?a:"transparent"),r.style.borderBottom=.5*unit+"vmin solid "+(i.img[3]?a:"transparent")):i==vpipe||i==hpipe?(r.style.height=unit+"vmin",r.style.width=unit+"vmin",r.style.borderRight=.2*unit+"vmin solid "+(i.img[0]?a:"transparent"),r.style.borderTop=.2*unit+"vmin solid "+(i.img[1]?a:"transparent"),r.style.borderLeft=.2*unit+"vmin solid "+(i.img[2]?a:"transparent"),r.style.borderBottom=.2*unit+"vmin solid "+(i.img[3]?a:"transparent")):i==ccw||i==cw?(r.style.background=a,r.style.left=(o+.4)*unit+"vmin",r.style.height=unit+"vmin",r.style.width=.2*unit+"vmin",r.style.animation=["cwise","ccwise"][i.img]+" "+5*speed+"s infinite linear"):console.log("Error: Unknown block entered into display()."),game.appendChild(r)}}return n}function newPath(e,t,n,s){void 0===n&&(n=compass[e][t][0]),void 0===s&&(s=0);var n=compass[e][t][n],o=[[0,1],[-1,0],[0,-1],[1,0]];return e+=o[n][0],t+=o[n][1],0!=e&&e!=span-1&&0!=t&&t!=span-1?newPath(e,t,(n+2)%254,compass[e][t]==empty.goto?s+1:s+2):{x:e,y:t,steps:s}}function newBall(e,t){var n=document.createElement("div");return n.style.background="white",n.style.position="absolute",n.style.top=e*unit+"vmin",n.style.left=t*unit+"vmin",n.style.width=.4*unit+"vmin",n.style.height=.4*unit+"vmin",n.style.borderRadius="50%25",n.style.margin=.3*unit+"vmin",n.style.transition=speed+"s top, "+speed+"s left, "+speed+"s background",n.style.transitionTimingFunction="linear",n.style.pointerEvents="none",game.appendChild(n),n}function move(e,t,n,s,o){void 0===o&&(o=compass[n][s][0]),0<n&&n<span-1&&0<s&&s<span-1&&(getByXY(n,s).style.opacity=1);var i=compass[n][s][o],o=[[0,1],[-1,0],[0,-1],[1,0]];if(n+=o[i][0],s+=o[i][1],ball.style.top=unit*n+"vmin",ball.style.left=unit*s+"vmin",0!=n&&n!=span-1&&0!=s&&s!=span-1)setTimeout(function(){move(e,t,n,s,(i+2)%254)},1e3*speed);else{if(goal.end.x==e&&goal.end.y==t){for(var r=0;r<edges.length;r++)edges[r].style.background="rgba(0,128,0,0.5)";ball.style.background="green",pts+=goal.end.steps,lvl==span-2?(span++,lvl=1):lvl++}else{for(r=0;r<edges.length;r++)edges[r].style.background="rgba(128,0,0,0.5)";ball.style.background="red",hp--,3<span&&(1==lvl?lvl=--span-2:lvl--)}setTimeout(show,1e4*speed),setTimeout(newGame,2e4*speed)}}function getByXY(e,t){for(var n=0;n<inners.length;n++)if(inners[n].x==e&&inners[n].y==t)return inners[n]}function hide(){for(var e=0;e<inners.length;e++)inners[e].style.opacity=0}function show(){for(var e=0;e<inners.length;e++)inners[e].style.opacity=1}function newGoal(){for(var e={},t=0;t<edges.length;t++)null==e[edges[t].end.steps]?e[edges[t].end.steps]=[edges[t]]:e[edges[t].end.steps].push(edges[t]);return choose(e[(key=Object.keys(e))[key.length-1]])}function enable(){for(var e=0;e<edges.length;e++)edges[e].style.background="transparent",edges[e].addEventListener("mouseover",onmouseover),edges[e].addEventListener("mouseout",onmouseout),edges[e].addEventListener("click",guess)}function disable(){for(var e=0;e<edges.length;e++)edges[e].style.background="rgba(0,0,0,0.25)",edges[e].removeEventListener("mouseover",onmouseover),edges[e].removeEventListener("mouseout",onmouseout),edges[e].removeEventListener("click",guess)}function onmouseover(){this.style.background="rgba(0,0,0,0.25)"}function onmouseout(){this.style.background="transparent"}function guess(){disable(),move(this.x,this.y,goal.x,goal.y)}newGame();