短いJavaScriptコードでテトリス
newsing(ニューシング)経由で知ったネタですが、初代スーパーマリオブラザースは、容量が40KBしかなかった、というお話。
■往年の名作「スーパーマリオブラザーズ」、あの濃い内容でわずか40キロバイト - newsing(ニューシング)
■元ネタ:痛いニュース(ノ∀`):往年の名作「スーパーマリオブラザーズ」、あの濃い内容でわずか40キロバイト
■さらに元ネタ:ITmedia +D Games:レトロゲーム・アワード受賞! 「スーパーマリオブラザーズ」
これだけ濃い内容なのに、データ容量はわずか320キロビット、つまり40キロバイトということに驚く。今の携帯電話のゲームだって、短いものでも150キロバイトくらいはある。
ジブンもかつて一時期、ソースファイルの容量や、コンパイル後のバイナリファイルの容量をできる限り削ることに情熱を燃やしてたことがあったなー、と若い頃を回想。
はい、「痛いニュース」でいろいろ言われてますが、たしかにファイルサイズ容量とコンテンツの面白さはまったく関係がなくて、容量を削ろうとするモチベーションは、ハードウェア的な制約か、開発者の偏った情熱(?)か、どちらかがあって初めて成り立つもののような気がします。
で。
「痛いニュース」のなかで紹介されていた、JavaScriptの短いコードでテトリスが動く、というのが「へーー!」でした。
コードはこれだけ。コード容量は1KB以下。
<body onKeyDown=K=event.keyCode><script>X=[Z=[B=A=12]];h=e=K=t=P=0;function Y()
{C=[d=K-38];c=0;for(i=4;i--*K;K-13?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/
A)*145)])p=B[i];!t|c+4?c-4?0:h+=d:B=C;for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+B[i++]]=1
if(e=!e){if(f|B){for(l=228;i--;)Z[h+B[i]]=k=1;for(B=[[-7,-20,6,17,-9,3,6][t=++t
%7]-4,0,1,t-6?-A:-1];l--;h=5)if(l%A)l-=l%A*!Z[l];else for(P+=k++,j=l+=A;--j>A;)
Z[j]=Z[j-A]}h+=A}for(i=S="";i<240;X[i]=Z[i]|=++i%A<2|i>228)i%A?0:S+="<br>",S+=X
[i]?"■":"_";document.body.innerHTML=S+P;Z[5]||setTimeout(Y,99-P)}Y()</script>
これが、こんなかんじで動きます。これはすごいっすねー。
|
カーソル左右で移動 enterキーで回転 |











