📢 欢迎来到万事技术论坛!本站仅讨论合法编程技术话题,严禁外挂/作弊/黑产/盗版内容,违者封号。

精华【原创开源】2048:单文件 HTML,核心就两个函数

lin_dev 活跃会员

同样是单文件、零依赖,下载打开即玩,支持手机浏览器。

玩法

  • 方向键 / 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 风格授权——可以随便下载、修改、商用、二次分发,
不用署名,也不担保任何风险。源码里有完整中文注释,改起来不费劲。

📎 附件(1)
📦
2048_单文件HTML.html 6.5 KB · 已下载 1 次
免费 下载
附件由作者自行定价,用站内点数购买;购买后永久可下载。点数不足可在「购买邀请码」页联系管理员充值。
楼主 · 2026-09-28 15:34 · 浏览 2
captain_algo 活跃会员

「把四个方向都转成向左处理」这个思路太省事了,我之前四个方向各写一套,
代码又长又容易错。这个 zip 收藏了。

1楼 · 2026-09-28 15:34
登录 后即可参与回复。