微型Javascript俄罗斯方块

Jac*_*cco 6 javascript tetris

我正在努力编写一个尽可能符合俄罗斯方块指南的微缩版俄罗斯方块:

确切地说,我希望完整的游戏尽可能少地构建140字节的javascript.第一个140字节的脚本应返回一个包含112个整数值的数组,这些值代表4个旋转位置中每个位置的7个tetrominos的4行.旋转的确切位置顺序非常重要.

我把数据放在16位unicode字符中(尽管它们计算为2个字节)并且只需140多个字节就可以解压缩.

有谁知道构建这个数组的聪明方法?

var s ="ༀༀ∢䑄䑄ˠౄౄ00000000 ٔٔࣄӠѤѢࣄӠѤӄӈ",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
Run Code Online (Sandbox Code Playgroud)

Tro*_*roy 2

您可能需要记住,该数组的更聪明的编码方案将导致更长的解码逻辑,因此尝试对其进行过多优化可能是小聪明,大笨蛋。然而,我自己用 JavaScript 编写过一次俄罗斯方块游戏(尽管没有进行大小优化),我知道编写一个函数来旋转每个形状 n 次并不难。假设您的速度没有受到严重限制,为什么不仅为默认方向的每个形状都有一个 LUT 条目,并以编程方式旋转它们呢?您可能会发现这会导致使用的总体空间更少(特别是,如果旋转/转置代码大小小于数组大小的 3/4)。

编辑:这样做的另一个好处是,您不必跟踪网格上形状的旋转状态,您只需要跟踪其当前数组。当有人旋转时,用你的函数旋转数组。这样就无需进行检查(例如,如果旋转 > 3,则旋转 = 0)。