memoscan
← all memos

Memo 0xfe1baf0a…0280cb on Ethereum

0x6fd69073…9a78·#25,046,133·view on Etherscan
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><rect width="600" height="600" f<rect x="150" y="55" width="300" height="490" rx="28" fill="#000<text x="300" y="520" fill="" font-family="monospace" font-size="24" text-anchor="middle">FAnLLING BLOKIES #`<!doctype html><html><head><meta` <meta name="viewport" content="w`Qidth=device-width,initial-scale=`qhtml,body{margin:0;width:100%;he`ight:100%;overflow:hidden;backgr`^v;font-family:monospace}`Hbody{display:grid;place-items:ce`#w{width:min(92vw,430px);text-alah1{font-size:22px;margin:8px 0 4a#g{background:#0008;border:3px sa66;border-radius:16px;image-rendoering:pixelated}`#p{font-size:12px;opacity:.8;mar<div id="w"><h1>Falling Blokies <canvas id="g" width="240" heigh`<div id="p">&larr; &rarr; move &`݂middot; &uarr; rotate &middot; &`darr; drop &middot; space pause<abr><span id="score">score 0</spaalet cv=document.getElementById("`g"),x=cv.getContext("2d"),S=24,W`,=10,H=20,sc=0,over=0,pause=0,t=0`Llet board=Array(H).fill().map(_=`tRr>Array(W).fill(0));`hlet cols=["",A,B,C,FG,"#fff"];let shapes=[[[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,1]],[[1,a1,0],[0,1,1]],[[0,1,1],[1,1,0]]]afunction R(n){return Math.floor(aMath.abs(Math.sin(n*999+id*77))*afunction piece(){let m=shapes[R(at++)%7].map(r=>r.slice());returnaRx{x:3,y:0,m:m,k:1+R(t)%4}}`8function hit(p,dx,dy,m){m=m||p.ma;for(let y=0;y<m.length;y++)for(alet xx=0;xx<m[y].length;xx++)if(am[y][xx]){let nx=p.x+xx+dx,ny=p.ay+y+dy;if(nx<0||nx>=W||ny>=H||(nay>=0&&board[ny][nx]))return 1}reafunction rot(m){return m[0].map(a(_,i)=>m.map(r=>r[i]).reverse())afunction lock(){for(let y=0;y<P.am.length;y++)for(let xx=0;xx<P.ma[y].length;xx++)if(P.m[y][xx]&&Pa.y+y>=0)board[P.y+y][P.x+xx]=P.kafor(let y=H-1;y>=0;y--)if(board[ay].every(v=>v)){board.splice(y,1a);board.unshift(Array(W).fill(0)aRm);sc+=100;y++}`document.getElementById("score")a.innerHTML="score "+sc;P=piece()aRu;if(hit(P,0,0))over=1}`Pfunction step(){if(!hit(P,0,1))PaRp.y++;else lock()}`xfunction cell(px,py,k){let g=x.careateLinearGradient(px,py,px+S,pay+S);g.addColorStop(0,cols[k]);ga.addColorStop(1,"#111");x.fillStayle=g;x.fillRect(px+1,py+1,S-2,Sa-2);x.strokeStyle="#fff3";x.stroakeRect(px+3,py+3,S-6,S-6)}function draw(){x.fillStyle=BG;xa.fillRect(0,0,240,480);x.strokeSaRltyle=FG+"22";`for(let i=0;i<=W;i++){x.beginPatah();x.moveTo(i*S,0);x.lineTo(i*SaRp,H*S);x.stroke()}`xfor(let y=0;y<H;y++)for(let xx=0a;xx<W;xx++)if(board[y][xx])cell(aRvxx*S,y*S,board[y][xx]);`Hif(P)for(let y=0;y<P.m.length;y+a+)for(let xx=0;xx<P.m[y].length;axx++)if(P.m[y][xx])cell((P.x+xx)aRq*S,(P.y+y)*S,P.k);`pif(over){x.fillStyle="#000b";x.faillRect(0,170,240,90);x.fillStylae=FG;x.font="24px monospace";x.taextAlign="center";x.fillText("GAaME OVER",120,215);x.font="12px maonospace";x.fillText("click to raRqestart",120,238)}}`pfunction loop(n){requestAnimatioanFrame(loop);if(!P)P=piece();if(a!pause&&!over&&n-last>520){step(aRo);last=n}draw()}`onkeydown=e=>{if(e.key==" ")pausae=!pause;if(over)return;if(e.keya=="ArrowLeft"&&!hit(P,-1,0))P.x-a-;if(e.key=="ArrowRight"&&!hit(Pa,1,0))P.x++;if(e.key=="ArrowDowna")step();if(e.key=="ArrowUp"){leat m=rot(P.m);if(!hit(P,0,0,m))P.acv.onclick=_=>{if(over){board=Araray(H).fill().map(_=>Array(W).fiall(0));sc=0;over=0;P=piece()}elsa e{let m=rot(P.m);if(!hit(P,0,0,ma 4{"Game Type":"Falling Blocks"," width="42" height="42" rx="6" " stroke="#fff8" stroke-width="3