« opoona(オプーナ)買ったよ! | メイン | 「暗号技術入門」と「ぼくには数字が風景に見える」 »



およそ500バイトのテトリス

およそ500バイトのテトリスをはてなブックマークに追加 およそ500バイトのテトリスをdel.icio.usに追加  Yahoo!ブックマークに登録 およそ500バイトのテトリスをGoogle Bookmarksに追加 およそ500バイトのテトリスをtwitterにポスト
tetris.GIF

痛いニュース(ノ∀`)さんで、往年の名作「スーパーマリオブラザーズ」、あの濃い内容でわずか40キロバイトというエントリがあったので、なんとなく気になってみていましたら、テトリスがjavascriptで組まれている(およそ500バイト)というレスを見つけました。すごすぎ。
ググってみましたらakiyan.comさんで1年ほど前に同じ内容でポストされていました。
ひろ式さんでもエントリがありますね。 なにをやってんだろーなぁなんてちょっと可読化してみたんですけど、ほとんど判らなかったです。。。変数"P"がスコアをあらわしていて、1段消すごとにsetTimeoutの第2引数を1ずつ減らしていくので、スコアがあがるごとに高速にブロックが落ちてきて、難しくなっていくという細かいところまで実装されてるようだってことは判りました。
あとは実際にレンダリングされる内容をもつ"S"という変数。コイツに壁である"■"と空白である"_"と、さらに落ちていくブロックも"■"であらわされているので、これらを判定しながら書き込んでいく処理がコチラ

for(i=S="";i<240;X[i]=Z[i]|=++i%A<2|i>228)i%A?0:S+="
",S+=X[i]?"■":"_";

ループ判定のi<240ってのは横12列、縦20行を掛け合わせた結果です。Aで割り切れたら改行である<br>がはいるようです。右端の折り返しですね。X[]には0/1のフラグが投入されて1の箇所を"■"にしてるみたいです。
で、

X[i]=Z[i]|=++i%A<2|i>228

ここのゆってるいみがわかりません。ゆってる。へへへ。。。
要所〃ある定数は全く見当も付きませんでした。特に[-7,-20,6,17,-9,3,6]という配列。K-13の13は多分エンターキーのキーコードですね。

<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>

ちなみに"A"という変数。これは常に定数12が入っているため、"A"の箇所を12に置換しても正しく動くっぽいのですが、"A"という変数はコード内で13箇所で使われていて、これを全てまともに12と記述すると13バイト分コードが長くなります。多分そのため変数に突っ込んでいるんですね。すげぇ情熱だ。

★このコンテンツに目的の情報はありませんでしたか?


[ 最近のエントリーとその関連エントリー ]


[ スポンサードリンク ]

トラックバック

このエントリーのトラックバックURL:
http://mojalog.com/cgi/mt/mt-tb.cgi/164

コメント (2)

Artmic8neo:

higemojaさんは一体何者なんでしょう?(笑)
ほんとビックリしちゃいます。
僕にはチンプンカンプン。
ホントに尊敬しちゃうんです。
こーいうの理解出来るのってかっこいい。
(^▽^)

ひげもじゃ:

へへへ。最近腹が出てきたただのエンジニアです。ビールばかり飲んでるからかなぁ。
ところで10日あたりにいくかもしれません。
そのときはよろしくお願いします。

コメントを投稿

ツリータイプ・カテゴリー

open all | close all

リファラから検索


サイト内検索