6

可能な限りテトリスのガイドラインに準拠したテトリスのミニチュア バージョンを作成しようとしています。

正確に言うと、完全なゲームを 140 バイトの JavaScript でできるだけ少なく構成したいと考えています。最初の 140 バイトのスクリプトは、4 つの回転位置のそれぞれにある 7 つのテトロミノの 4 つの行を表す 112 の整数値を含む配列を返す必要があります。回転の正確な位置順序は非常に重要です。

データを 16 ビットの Unicode 文字 (ただし、2 バイトとして数えます) に入れ、140 バイト強で解凍するところまで行きました。

この配列を構築する賢い方法を知っている人はいますか?

var s="ༀ∢ð䑄࣠لâьˠцèౄ٠٠٠٠ۀѢlࣄӠѤäӄౠɤÆӈ",m=[];for(i=0;i<28;i++){c=s.charCodeAt(i);for(j=4;j>0;){ m.push(c>>(4*--j)&15)}return m}

    I tetrimino
    Spawn         Rotate90      Rotate180     Rotate270
    ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐
    │ │ │ │ │     │ │ │■│ │     │ │ │ │ │     │ │■│ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │■│■│■│■│     │ │ │■│ │     │ │ │ │ │     │ │■│ │ │
    ├─┼─○─┼─┤     ├─┼─○─┼─┤     ├─┼─○─┼─┤     ├─┼─○─┼─┤
    │ │ │ │ │     │ │ │■│ │     │■│■│■│■│     │ │■│ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │ │ │ │     │ │ │■│ │     │ │ │ │ │     │ │■│ │ │
    └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘
    Hex: 0F00     Hex: 2222     Hex: 00F0     Hex: 4444

     J tetrimino
     Spawn         Rotate90      Rotate180     Rotate270
    ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐
    │ │ │ │ │     │ │ │ │ │     │ │ │ │ │     │ │ │ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │■│ │ │ │     │ │■│■│ │     │ │ │ │ │     │ │■│ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │■│●│■│ │     │ │●│ │ │     │■│●│■│ │     │ │●│ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │ │ │ │     │ │■│ │ │     │ │ │■│ │     │■│■│ │ │
    └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘
    Hex: 08E0     Hex: 0644     Hex: 00E2     Hex: 044C

     L tetrimino
     Spawn         Rotate90      Rotate180     Rotate270
    ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐
    │ │ │ │ │     │ │ │ │ │     │ │ │ │ │     │ │ │ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │ │■│ │     │ │■│ │ │     │ │ │ │ │     │■│■│ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │■│●│■│ │     │ │●│ │ │     │■│●│■│ │     │ │●│ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │ │ │ │     │ │■│■│ │     │■│ │ │ │     │ │■│ │ │
    └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘
    Hex: 02E0     Hex: 0446     Hex: 00E8     Hex: 0C44

     O tetrimino
     Spawn         Rotate90      Rotate180     Rotate270
    ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐
    │ │ │ │ │     │ │ │ │ │     │ │ │ │ │     │ │ │ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │■│■│ │     │ │■│■│ │     │ │■│■│ │     │ │■│■│ │
    ├─┼─○─┼─┤     ├─┼─○─┼─┤     ├─┼─○─┼─┤     ├─┼─○─┼─┤
    │ │■│■│ │     │ │■│■│ │     │ │■│■│ │     │ │■│■│ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │ │ │ │     │ │ │ │ │     │ │ │ │ │     │ │ │ │ │
    └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘
    Hex: 0660     Hex: 0660     Hex: 0660     Hex: 0660

     S tetrimino
     Spawn         Rotate90      Rotate180     Rotate270
    ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐
    │ │ │ │ │     │ │ │ │ │     │ │ │ │ │     │ │ │ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │■│■│ │     │ │■│ │ │     │ │ │ │ │     │■│ │ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │■│●│ │ │     │ │●│■│ │     │ │●│■│ │     │■│●│ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │ │ │ │     │ │ │■│ │     │■│■│ │ │     │ │■│ │ │
    └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘
    Hex: 06C0     Hex: 0462     Hex: 006C     Hex: 08C4

     T tetrimino
     Spawn         Rotate90      Rotate180     Rotate270
    ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐
    │ │ │ │ │     │ │ │ │ │     │ │ │ │ │     │ │ │ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │■│ │ │     │ │■│ │ │     │ │ │ │ │     │ │■│ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │■│●│■│ │     │ │●│■│ │     │■│●│■│ │     │■│●│ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │ │ │ │     │ │■│ │ │     │ │■│ │ │     │ │■│ │ │
    └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘
    Hex: 04E0     Hex: 0464     Hex: 00E4     Hex: 04C4

     Z tetrimino
     Spawn         Rotate90      Rotate180     Rotate270
    ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐     ┌─┬─┬─┬─┐
    │ │ │ │ │     │ │ │ │ │     │ │ │ │ │     │ │ │ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │■│■│ │ │     │ │ │■│ │     │ │ │ │ │     │ │■│ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │●│■│ │     │ │●│■│ │     │■│●│ │ │     │■│●│ │ │
    ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤     ├─┼─┼─┼─┤
    │ │ │ │ │     │ │■│ │ │     │ │■│■│ │     │■│ │ │ │
    └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘     └─┴─┴─┴─┘
    Hex: 0C60     Hex: 0264     Hex: 00C6     Hex: 04C8
4

1 に答える 1

2

この配列のより巧妙なエンコード スキームを使用すると、デコード ロジックが長くなることに注意してください。しかし、JavaScript でテトリス ゲームを書いたことがあるので (サイズは最適化されていませんが)、各図形を n 回回転させる関数を書くのはそれほど難しくないことを知っています。速度にあまり制約を受けていないと仮定すると、デフォルトの向きで各形状の LUT エントリを用意し、それらをプログラム的に回転させないのはなぜですか? これにより、使用される全体的なスペースが少なくなることがあります (具体的には、回転/転置コードのサイズが配列サイズの 3/4 未満の場合)。

編集: この方法の追加の利点は、グリッド上の形状の回転状態を追跡する必要がなく、現在の配列を追跡するだけでよいことです。誰かが回転したら、関数で配列を回転させます。これにより、チェックを行う必要がなくなります (たとえば、回転 > 3 の場合、回転 = 0)。

于 2013-08-01T17:56:41.400 に答える