我正在努力编写一个尽可能符合俄罗斯方块指南的微缩版俄罗斯方块:
准确地说,我希望完整的游戏尽可能少地构建140字节的javascript。第一个140字节的脚本应返回一个包含112个整数值的数组,这些值代表4个旋转位置中每个位置的7个tetrominos的4行。旋转的确切位置顺序非常重要。
我把数据放在16位unicode字符中(虽然它们计算为2个字节)并且只需140多个字节就可以解压缩。
有没有人知道构建这个数组的聪明方法?
无功 S = “ༀ∢ð䑄࣠لâьˠцèౄ0000 ۀѢlࣄӠѤäӄౠɤÆӈ” 中,m = [];对于(i = 0; I< 28;我++){C = s.charCodeAt(I);对于(j = 4; J&≠0) {m.push(c取代;>(4 * - J)及15)}返回 米}
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
答案 0 :(得分:2)
你可能想要记住,这个数组的一个更聪明的编码方案将导致更长的解码逻辑,所以试图优化这个太多可能是一分钱明智和愚蠢。然而,一旦我自己编写了一个用JavaScript编写的俄罗斯方块游戏(虽然没有经过尺寸优化),我知道写一个函数来旋转每个形状n次并不是很难。假设你没有严格的速度约束,为什么不只有默认方向的每个形状的LUT条目,并以编程方式旋转它们?您可能会发现这会导致使用的总空间更少(特别是,如果旋转/转置代码大小小于数组大小的3/4)。
编辑:这样做的另一个好处是,您不必跟踪网格上形状的旋转状态,只需跟踪其当前数组即可。当有人旋转时,使用您的功能旋转阵列。这消除了进行检查的需要(例如,如果旋转> 3,旋转= 0)。