同样是单文件、零依赖,下载打开即玩,支持手机浏览器。
玩法
- 方向键 / WASD 移动,相同数字合并翻倍
- 每次移动后随机出现一个 2 或 4,凑出 2048 通关
- 最高分存在 localStorage,关掉网页也还在
核心思路:把四个方向都转成「向左」
这是实现 2048 最省事的技巧——不管上下左右,先用转置 / 反转把棋盘
转成「统一向左移动」,处理完再转回去:
if (dir === 'up' || dir === 'down') b = transpose(b);
if (dir === 'right' || dir === 'down') b = b.map(r => r.slice().reverse());
// ...统一按向左处理...
另一个函数:压缩 + 合并
const arr = row.filter(v => v); // 去掉空格
for (let i = 0; i < arr.length; i++) {
if (arr[i] === arr[i + 1]) { // 相邻相等 -> 合并
out.push(arr[i] * 2); i++; // 跳过下一个,保证每格只合并一次
} else out.push(arr[i]);
}
那个
i++是关键:2 2 2 2要变成4 4而不是8,
漏了它就会出现「一次移动连锁合并」的经典 bug。
授权:本站原创,按 MIT 风格授权——可以随便下载、修改、商用、二次分发,
不用署名,也不担保任何风险。源码里有完整中文注释,改起来不费劲。
楼主 · 2026-09-28 15:34 · 浏览 2

