1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9630],{2773:(e,t,r)=>{r.d(t,{GL:()=>s,Gp:()=>u,Nc:()=>c,_y:()=>i,mA:()=>o});var n=r(2115);let l=null,a=new Set;function c(e){if(l!==e)for(let t of(l=e,a))t(e)}function u(e){return a.add(e),()=>a.delete(e)}let i={title:"Leave this game?",body:"You're mid-game â your progress in this round will be lost."},o={title:"Leave the match?",body:"The match is still live â leaving counts as a loss and your opponent takes the win."};function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i,{title:r,body:l}=t;(0,n.useEffect)(()=>e?(c({title:r,body:l}),()=>c(null)):void c(null),[e,r,l])}},2932:(e,t,r)=>{function n(e,t,r){let n=window.devicePixelRatio||1,l=Math.max(1,Math.min((e.clientWidth||t)*n/t,4)),a=Math.round(t*l),c=Math.round(r*l);(e.width!==a||e.height!==c)&&(e.width=a,e.height=c);let u=e.getContext("2d");return u&&u.setTransform(l,0,0,l,0,0),u}function l(e,t,r,n,l){let a=r.getBoundingClientRect(),c=Math.min(a.width/n,a.height/l)||1,u=a.left+(a.width-n*c)/2,i=a.top+(a.height-l*c)/2;return{x:(e-u)/c,y:(t-i)/c}}r.d(t,{c:()=>n,f:()=>l})},3557:(e,t,r)=>{r.d(t,{g:()=>l});var n=r(2115);function l(e){let[t,r]=(0,n.useState)(0);return(0,n.useEffect)(()=>{try{let t=window.localStorage.getItem("funnudge:".concat(e));t&&r(Number(t)||0)}catch(e){}},[e]),{best:t,submit:(0,n.useCallback)(t=>{r(r=>{if(t<=r)return r;try{window.localStorage.setItem("funnudge:".concat(e),String(t))}catch(e){}return t})},[e])}}},9630:(e,t,r)=>{r.r(t),r.d(t,{default:()=>y});
1var n=r(5155),l=r(2115),a=r(2932),c=r(1175),u=r(4107),i=r(3557),o=r(2773);let s=["###############","#......#......#","#.##.#.#.#.##.#","#o##.#...#.##o#","#....##.##....#","##.#...#...#.##","#..#.#####.#..#"," .##.......##. ","#..#.#####.#..#","##.#...#...#.##","#....##.##....#","#o##.#...#.##o#","#.##.#.#.#.##.#","#......#......#","###############"],f={up:{x:0,y:-1},down:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}},d={up:"down",down:"up",left:"right",right:"left"},h=["#f87171","#f9a8d4","#67e8f9"];function x(e,t){return t<0||t>=15||"#"===s[t][(e%15+15)%15]}function m(e,t){return{x:30*e+15,y:30*t+15}}function y(){let e=(0,l.useRef)(null),[t,r]=(0,l.useState)("idle");(0,o.GL)("running"===t);let[y,g]=(0,l.useState)(0),[b,p]=(0,l.useState)(3),[w,M]=(0,l.useState)(1),{best:v,submit:D}=(0,i.g)("maze-chase"),[R,N]=(0,l.useState)([]),S=(0,l.useRef)(0),k=(0,l.useCallback)((e,t)=>{let r=++S.current;N(n=>[...n.slice(-2),{id:r,text:e,cls:t}]),setTimeout(()=>N(e=>e.filter(e=>e.id!==r)),1100)},[]),j=(0,l.useRef)(k);j.current=k;let C=(0,l.useRef)({x:0,y:0,dir:"left",nextDir:null}),P=(0,l.useRef)([]),A=(0,l.useRef)(new Set),T=(0,l.useRef)(new Set),z=(0,l.useRef)(0),E=(0,l.useRef)(0),I=(0,l.useRef)(null),B=(0,l.useRef)(0),_=(0,l.useRef)(0),L=(0,l.useRef)(0),F=(0,l.useRef)(0),O=(0,l.useRef)(3),W=(0,l.useRef)(1),q=(0,l.useRef)(0),Y=[[7,3],[7,11],[1,7],[13,7]],G=["\uD83C\uDF52","\uD83C\uDF53","\uD83C\uDF4A","\uD83C\uDF4E","\uD83E\uDD5D"],U=(0,l.useRef)([]),X=(0,l.useRef)("idle"),V=(0,l.useRef)(0),H=(0,l.useRef)(0);X.current=t;let J=()=>{A.current.clear(),T.current.clear();for(let e=0;e<15;e++)for(let t=0;t<15;t++)"."===s[e][t]&&A.current.add("".concat(t,",").concat(e)),"o"===s[e][t]&&T.current.add("".concat(t,",").concat(e));A.current.delete("6,13")},K=()=>{let e=m(6,13);C.current={x:e.x,y:e.y,dir:"left",nextDir:null};let t=m(7,7);P.current=h.map((e,r)=>({x:t.x,y:t.y,dir:r%2==0?"left":"right",nextDir:null,color:e,frightened:!1,eaten:!1,releaseDelay:2.2*r,personality:.25*r})),z.current=0},Q=e=>{let t=Math.round((e.x-15)/30),r=Math.round((e.y-15)/30),n=m(t,r);return 3>Math.abs(e.x-n.x)&&3>Math.abs(e.y-n.y)?{col:t,row:r,cx:n.x,cy:n.y}:null},Z=(e,t,r)=>{let n=Q(e);if(n){if(e.nextDir){let t=f[e.nextDir];x(n.col+t.x,n.row+t.y)||(e.dir=e.nextDir,e.nextDir=null,e.x=n.cx,e.y=n.cy)}let t=f[e.dir];if(x(n.col+t.x,n.row+t.y)){e.x=n.cx,e.y=n.cy;return}}let l=f[e.dir];e.x+=l.x*t*r,e.y+=l.y*t*r,e.x<-15&&(e.x=464),e.x>465&&(e.x=-14)},$=e=>{let t,r=Q(e);if(!r)return;let n=Object.keys(f).filter(e=>{let t=f[e];return!x(r.col+t.x,r.row+t.y)}),l=n.filter(t=>t!==d[e.dir]),a=l.length>0?l:n;if(0===a.length)return;let c=Math.round((C.current.x-15)/30),u=Math.round((C.current.y-15)/30),i=e.eaten?{c:7,r:7}:{c:c,r:u};if(!e.eaten&&Math.random()<e.personality)t=a[Math.floor(Math.random()*a.length)];else{let n=a.map(e=>{let t=f[e];return{dir:e,dist:Math.abs(r.col+t.x-i.c)+Math.abs(r.row+t.y-i.r)}});n.sort((t,r)=>e.frightened&&!e.eaten?r.dist-t.dist:t.dist-r.dist),t=n[0].dir}t!==e.dir&&(e.dir=t,e.x=r.cx,e.y=r.cy)},ee=(0,l.useCallback)(()=>{let t=e.current;if(!t)return;let r=(0,a.c)(t,450,450);if(!r)return;r.fillStyle="#0a0a16",r.fillRect(0,0,450,450),r.strokeStyle="#3b82f6",r.lineWidth=2.5,r.shadowColor="#3b82f6",r.shadowBlur=6;for(let e=0;e<15;e++)for(let t=0;t<15;t++){if("#"!==s[e][t])continue;let n=30*t,l=30*e;r.strokeRect(n+3,l+3,24,24)}for(let e of(r.shadowBlur=0,r.fillStyle="#fde68a",A.current)){let[t,n]=e.split(",").map(Number),l=m(t,n);r.beginPath(),r.arc(l.x,l.y,2.5,0,2*Math.PI),r.fill()}let n=5+1.8*Math.sin(performance.now()/180);for(let e of(r.fillStyle="#fbbf24",r.shadowColor="#fbbf24",r.shadowBlur=10,T.current)){let[t,l]=e.split(",").map(Number),a=m(t,l);r.beginPath(),r.arc(a.x,a.y,n,0,2*Math.PI),r.fill()}r.shadowBlur=0;let l=I.current;if(l&&(l.timer>3||Math.floor(performance.now()/180)%2==0)){let e=m(l.c,l.r),t=2*Math.sin(performance.now()/260);r.font="20px system-ui, sans-serif",r.textAlign="center",r.textBaseline="middle",r.fillText(G[(W.current-1)%G.length],e.x,e.y+t)}let c=C.current,u=.55*Math.abs(Math.sin(10*L.current))+.05,i={right:0,down:Math.PI/2,left:Math.PI,up:-Math.PI/2}[c.dir];for(let e of(r.fillStyle="#facc15",r.beginPath(),r.moveTo(c.x,c.y),r.arc(c.x,c.y,11,i+u,i-u+2*Math.PI),r.closePath(),r.fill(),P.current)){let t=z.current<2&&Math.floor(performance.now()/200)%2==0;r.fillStyle=e.eaten?"rgba(255,255,255,0.25)":e.frightened?t?"#e0e7ff":"#4f46e5":e.color,r.beginPath(),r.arc(e.x,e.y-2,10,Math.PI,0),r.lineTo(e.x+10,e.y+10-4);for(let t=0;t<3;t++)r.quadraticCurveTo(e.x+10-10*(4*t+1)/6,e.y+10+2,e.x+10-10*(4*t+2)/6,e.y+10-4);if(r.lineTo(e.x-10,e.y+10-4),r.closePath(),r.fill(),!e.eaten)if(e.frightened){r.fillStyle="#e0e7ff",r.fillRect(e.x-6,e.y-6,3.5,3.5),r.fillRect(e.x+2.5,e.y-6,3.5,3.5),r.strokeStyle="#e0e7ff",r.lineWidth=1.5,r.beginPath();for(let t=0;t<=4;t++){let n=e.x-6+3*t,l=e.y+3+(t%2==0?2:-1);0===t?r.moveTo(n,l):r.lineTo(n,l)}r.stroke()}else{let t=f[e.dir];r.fillStyle="#fff",r.beginPath(),r.arc(e.x-4+2*t.x,e.y-4,3.5,0,2*Math.PI),r.arc(e.x+4+2*t.x,e.y-4,3.5,0,2*Math.PI),r.fill(),r.fillStyle="#1e3a8a",r.beginPath(),r.arc(e.x-4+3.5*t.x,e.y-4+2*t.y,1.8,0,2*Math.PI),r.arc(e.x+4+3.5*t.x,e.y-4+2*t.y,1.8,0,2*Math.PI),r.fill()}}for(let e of U.current)r.globalAlpha=Math.max(e.life,0),r.fillStyle="#facc15",r.fillRect(e.x-2.5,e.y-2.5,5,5);r.globalAlpha=1,"running"===X.current&&q.current>0&&(r.fillStyle="#facc15",r.font="bold 30px system-ui, sans-serif",r.textAlign="center",r.shadowColor="#000",r.shadowBlur=8,r.fillText("READY!",225,235),r.shadowBlur=0)},[]),et=(0,l.useCallback)(()=>{for(let e=0;e<16;e++){let t=e/16*Math.PI*2,r=70+130*Math.random();U.current.push({x:C.current.x,y:C.current.y,vx:Math.cos(t)*r,vy:Math.sin(t)*r,life:.7+.3*Math.random()})}O.current-=1,p(O.current),(0,c._O)("lose"),O.current<=0?(r("over"),D(F.current),(0,u.q7)("maze-chase",F.current)):(j.current("\uD83D\uDC94 ".concat(O.current," ").concat(1===O.current?"life":"lives"," left"),"text-rose-400"),K(),q.current=1)},[D]),er=(0,l.useCallback)(e=>{let t=Math.min((e-H.current)/1e3,.033);for(let r of(H.current=e,U.current))r.x+=r.vx*t,r.y+=r.vy*t,r.vy+=250*t,r.life-=t;if(U.current=U.current.filter(e=>e.life>0),"running"===X.current)if(q.current>0)q.current-=t;else{L.current+=t;let e=95+6*W.current;Z(C.current,e,t);let r=Math.round((C.current.x-15)/30),n=Math.round((C.current.y-15)/30),l="".concat(r,",").concat(n);if(A.current.delete(l)&&(F.current+=10,g(F.current),B.current+=1,(30===B.current||75===B.current)&&_.current<2)){_.current+=1;let e=Y[Math.floor(Math.random()*Y.length)];I.current={c:e[0],r:e[1],timer:9},j.current("\uD83C\uDF52 bonus fruit!","text-rose-300")}if(T.current.delete(l))for(let e of(F.current+=50,g(F.current),(0,c._O)("eat"),j.current("â¡ POWER!","text-indigo-300"),E.current=0,z.current=Math.max(7-W.current,3.5),P.current))e.eaten||(e.frightened=!0);if(I.current){I.current.timer-=t;let e=m(I.current.c,I.current.r);18>Math.hypot(C.current.x-e.x,C.current.y-e.y)?(F.current+=100,g(F.current),j.current("\uD83C\uDF52 +100","text-rose-300"),(0,c._O)("win"),I.current=null):I.current.timer<=0&&(I.current=null)}if(z.current>0&&(z.current-=t,z.current<=0))for(let e of P.current)e.frightened=!1;for(let r of P.current){if(r.releaseDelay>0){r.releaseDelay-=t;continue}$(r);let n=r.eaten?1.8*e:r.frightened?.55*e:e*(.82+.03*W.current);if(Z(r,n,t),r.eaten){let e=m(7,7);6>Math.hypot(r.x-e.x,r.y-e.y)&&(r.eaten=!1,r.frightened=!1)}if(18>Math.hypot(r.x-C.current.x,r.y-C.current.y)&&!r.eaten)if(r.frightened){r.eaten=!0,E.current+=1;let e=100*Math.pow(2,E.current);F.current+=e,g(F.current),j.current(E.current>1?"\uD83D\uDC7B \xd7".concat(E.current," +").concat(e):"\uD83D\uDC7B +".concat(e),"text-cyan-300"),(0,c._O)("combo")}else{et();break}}0===A.current.size&&0===T.current.size&&(W.current+=1,M(W.current),(0,c._O)("win"),j.current("\uD83C\uDF89 LEVEL ".concat(W.current,"!"),"text-amber-300"),J(),K(),I.current=null,B.current=0,_.current=0,q.current=1.2),D(F.current)}ee(),V.current=requestAnimationFrame(er)},[ee,et,D]);(0,l.useEffect)(()=>(H.current=performance.now(),V.current=requestAnimationFrame(er),()=>cancelAnimationFrame(V.current)),[er]);let en=(0,l.useCallback)(()=>{F.current=0,O.current=3,W.current=1,g(0),p(3),M(1),J(),K(),I.current=null,B.current=0,_.current=0,E.current=0,q.current=.8,r("running")},[]),el=(0,l.useCallback)(e=>{C.current.nextDir=e},[]);(0,l.useEffect)(()=>{let e=e=>{let t={ArrowUp:"up",ArrowDown:"down",ArrowLeft:"left",ArrowRight:"right",w:"up",s:"down",a:"left",d:"right"}[e.key];t&&(e.preventDefault(),el(t)),("Space"===e.code||"Enter"===e.key)&&"running"!==X.current&&(e.preventDefault(),en())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[el,en]);let ea=(0,l.useRef)(null);return(0,n.jsxs)("div",{className:"select-none",children:[(0,n.jsxs)("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-3",children:[(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsxs)("div",{className:"rounded-xl bg-white/10 px-4 py-2 text-center",children:[(0,n.jsx)("div",{className:"text-xs font-medium uppercase tracking-wide text-zinc-400",children:"Score"}),(0,n.jsx)("div",{className:"text-xl font-bold text-white",children:y})]}),(0,n.jsxs)("div",{className:"rounded-xl bg-white/10 px-4 py-2 text-center",children:[(0,n.jsx)("div",{className:"text-xs font-medium uppercase tracking-wide text-zinc-400",children:"Best"}),(0,n.jsx)("div",{className:"text-xl font-bold text-amber-300",children:v})]}),(0,n.jsxs)("div",{className:"rounded-xl bg-white/10 px-4 py-2 text-center",children:[(0,n.jsx)("div",{className:"text-xs font-medium uppercase tracking-wide text-zinc-400",children:"Lives"}),(0,n.jsx)("div",{className:"text-xl font-bold text-rose-400",children:"â¤".repeat(Math.max(b,0))||"â"})]})]}),(0,n.jsx)("button",{onClick:en,className:"rounded-xl bg-gradient-to-r from-yellow-500 to-amber-500 px-4 py-2 font-bold text-zinc-900 transition hover:scale-105",children:"running"===t?"Restart":"Start"})]}),(0,n.jsxs)("div",{"data-board":!0,className:"relative mx-auto w-full touch-none overflow-hidden rounded-2xl border border-white/10",style:{maxWidth:"min(100%, 76vh)"},onTouchStart:e=>{ea.current={x:e.touches[0].clientX,y:e.touches[0].clientY}},onTouchEnd:e=>{if(!ea.current)return;let t=e.changedTouches[0].clientX-ea.current.x,r=e.changedTouches[0].clientY-ea.current.y;ea.current=null,24>Math.max(Math.abs(t),Math.abs(r))||(Math.abs(t)>Math.abs(r)?el(t>0?"right":"left"):el(r>0?"down":"up"))},role:"application","aria-label":"Maze Chase game. Use arrow keys to move and eat all dots.",children:[(0,n.jsx)("canvas",{ref:e,width:450,height:450,className:"block h-auto w-full"}),(0,n.jsx)("div",{className:"pointer-events-none absolute inset-x-0 top-[8%] z-10 flex flex-col items-center gap-1",children:R.map(e=>(0,n.jsx)("div",{className:"animate-bounce-in text-lg font-extrabold drop-shadow-[0_2px_4px_rgba(0,0,0,0.8)] sm:text-xl ".concat(e.cls),children:e.text},e.id))}),"running"!==t&&(0,n.jsxs)("div",{className:"absolute inset-0 z-10 flex flex-col items-center justify-center gap-3 bg-black/60 backdrop-blur-[2px]",children:["over"===t?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"animate-bounce-in text-3xl font-extrabold text-white",children:"\uD83D\uDC7B Caught!"}),(0,n.jsxs)("p",{className:"text-zinc-200",children:["Score: ",(0,n.jsx)("span",{className:"font-bold text-white",children:y})," ","\xb7 Level ",w,y>0&&y>=v&&(0,n.jsx)("span",{className:"ml-2 font-bold text-amber-300",children:"New best
1!"})]})]}):(0,n.jsx)("p",{className:"text-5xl","aria-hidden":!0,children:"\uD83D\uDC7B"}),(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),en()},className:"rounded-xl bg-gradient-to-r from-yellow-500 to-amber-500 px-6 py-3 font-bold text-zinc-900 transition hover:scale-105",children:"over"===t?"Play again":"â¶ Start game"})]})]}),(0,n.jsx)("p",{className:"mt-4 text-center text-sm text-zinc-500",children:"â¨ï¸ Arrows / WASD \xb7 \uD83D\uDCF1 Swipe \xb7 â¡ pellets flip the hunt \xb7 chain ghosts for \xd72 \xd74 \xb7 \uD83C\uDF52 bonus fruit"})]})}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.