Hot patch for speedtest

This commit is contained in:
Russel Yasol
2025-03-14 11:46:14 +08:00
parent 11f9ee2bbf
commit aac8079bc6
64 changed files with 366 additions and 87 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5395],{86373:(e,r,t)=>{Promise.resolve().then(t.bind(t,55049))},55049:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>s});var l=t(20475),n=t(20107);let a=[[[1,1,1,1]],[[1,1],[1,1]],[[1,1,1],[0,1,0]],[[1,1,1],[1,0,0]],[[1,1,1],[0,0,1]],[[1,1,0],[0,1,1]],[[0,1,1],[1,1,0]]],c=["#00f0f0","#f0f000","#a000f0","#f0a000","#0000f0","#00f000","#f00000"],s=()=>{let[e,r]=(0,n.useState)(()=>Array.from({length:20},()=>Array(10).fill(null))),[t,s]=(0,n.useState)([]),[u,f]=(0,n.useState)({x:0,y:0}),[i,o]=(0,n.useState)(""),[x,d]=(0,n.useState)(0),[h,y]=(0,n.useState)(0),[m,g]=(0,n.useState)(!1),[p,v]=(0,n.useState)(!1),b=(0,n.useRef)(u),k=(0,n.useRef)(t),w=(0,n.useRef)(e),C=(0,n.useRef)(i),S=(0,n.useRef)(p),j=(0,n.useCallback)(()=>Math.max(1e3-100*Math.floor(x/2e3),100),[x]);(0,n.useEffect)(()=>{b.current=u},[u]),(0,n.useEffect)(()=>{k.current=t},[t]),(0,n.useEffect)(()=>{w.current=e},[e]),(0,n.useEffect)(()=>{C.current=i},[i]),(0,n.useEffect)(()=>{S.current=p},[p]),(0,n.useEffect)(()=>{let e=localStorage.getItem("tetrisHighScore");e&&y(parseInt(e))},[]),(0,n.useEffect)(()=>{m&&x>h&&(y(x),localStorage.setItem("tetrisHighScore",x.toString()))},[m,x,h]);let E=(0,n.useCallback)(()=>{let e=Math.floor(Math.random()*a.length),r=a[e];s(r),o(c[e]),f({x:Math.floor(5-r[0].length/2),y:0}),v(!1)},[]),N=(0,n.useCallback)((e,r)=>{for(let t=0;t<r.length;t++)for(let l=0;l<r[t].length;l++)if(r[t][l]){let r=e.x+l,n=e.y+t;if(r<0||r>=10||n>=20||n>=0&&w.current[n][r])return!0}return!1},[]),R=(0,n.useCallback)(e=>{let r=e.filter(e=>e.some(e=>!e)),t=20-r.length;return t>0?(d(x+100*t),[...Array(t).fill(null).map(()=>Array(10).fill(null)),...r]):e},[x]),A=(0,n.useCallback)(()=>{if(S.current)return;let e=w.current.map(e=>[...e]),t=!1;if(b.current.y<=0&&N(b.current,k.current)){g(!0);return}for(let r=0;r<k.current.length;r++)for(let l=0;l<k.current[r].length;l++)if(k.current[r][l]){let n=b.current.y+r;if(n<0){t=!0;break}e[n][b.current.x+l]=C.current}if(t){g(!0);return}r(R(e)),v(!0),E()},[R,E]),M=(0,n.useCallback)(()=>{if(m||S.current)return;let e={x:b.current.x,y:b.current.y+1};if(N(e,k.current)){A();return}f(e)},[m,N,A]),_=(0,n.useCallback)(()=>{if(S.current)return;let e=k.current[0].map((e,r)=>k.current.map(e=>e[e.length-1-r]));for(let r of[{x:0,y:0},{x:-1,y:0},{x:1,y:0},{x:-2,y:0},{x:2,y:0}]){let t={x:b.current.x+r.x,y:b.current.y+r.y};if(!N(t,e)){f(t),s(e);return}}},[N]),D=(0,n.useCallback)(()=>{if(S.current)return;let e=b.current.y;for(;e<20&&!N({x:b.current.x,y:e+1},k.current);)e++;f({x:b.current.x,y:e}),setTimeout(()=>A(),0)},[N,A]),I=(0,n.useCallback)(()=>{r(Array.from({length:20},()=>Array(10).fill(null))),d(0),g(!1),v(!1),E()},[E]),H=(0,n.useCallback)(e=>{if("r"===e.key.toLowerCase()&&e.ctrlKey){e.preventDefault(),I();return}if(!m&&!S.current)switch(e.key){case"ArrowLeft":{let e={x:b.current.x-1,y:b.current.y};N(e,k.current)||f(e);break}case"ArrowRight":{let e={x:b.current.x+1,y:b.current.y};N(e,k.current)||f(e);break}case"ArrowDown":M();break;case"ArrowUp":_();break;case" ":e.preventDefault(),D()}},[m,N,M,_,D,I]);return(0,n.useEffect)(()=>{E()},[E]),(0,n.useEffect)(()=>{if(m)return;let e=setInterval(M,j());return()=>clearInterval(e)},[M,m,j]),(0,n.useEffect)(()=>(window.addEventListener("keydown",H),()=>window.removeEventListener("keydown",H)),[H]),(0,l.jsxs)("div",{className:"min-h-screen bg-gray-900 flex flex-col items-center justify-center p-4",children:[(0,l.jsxs)("div",{className:"mb-4 space-y-2 text-center",children:[(0,l.jsxs)("div",{className:"text-2xl font-bold text-white",children:["Score: ",x]}),(0,l.jsxs)("div",{className:"text-xl font-bold text-yellow-500",children:["High Score: ",h]}),(0,l.jsxs)("div",{className:"text-sm text-gray-400",children:["Speed: ",Math.round(1e3/j()),"x"]})]}),(0,l.jsx)("div",{className:"bg-gray-800 p-2 rounded-lg shadow-lg",children:(0,l.jsx)("div",{className:"grid gap-px bg-gray-700",style:{gridTemplateRows:"repeat(".concat(20,", minmax(0, 1fr))"),gridTemplateColumns:"repeat(".concat(10,", minmax(0, 1fr))"),width:"".concat(240,"px"),height:"".concat(480,"px")},children:e.map((e,r)=>e.map((e,n)=>{var a,c;let s=r>=u.y&&r<u.y+t.length&&n>=u.x&&n<u.x+(null===(a=t[0])||void 0===a?void 0:a.length)&&(null===(c=t[r-u.y])||void 0===c?void 0:c[n-u.x]);return(0,l.jsx)("div",{className:"transition-colors duration-100",style:{backgroundColor:s?i:e||"#1F2937"}},"".concat(r,"-").concat(n))}))})}),m&&(0,l.jsx)("div",{className:"mt-4 text-xl font-bold text-red-500",children:"Game Over! Press Ctrl+R to play again."}),(0,l.jsxs)("div",{className:"mt-4 text-white text-center",children:[(0,l.jsx)("p",{children:"Controls:"}),(0,l.jsx)("p",{children:"← → : Move"}),(0,l.jsx)("p",{children:"↑ : Rotate"}),(0,l.jsx)("p",{children:"↓ : Soft Drop"}),(0,l.jsx)("p",{children:"Space : Hard Drop"}),(0,l.jsx)("p",{children:"Ctrl+R : Restart"})]})]})}}},e=>{var r=r=>e(e.s=r);e.O(0,[191,6035,7358],()=>r(86373)),_N_E=e.O()}]);