跳到主要内容

2048 小游戏

纯 HTML/CSS/JavaScript 实现的经典 2048 益智游戏,跟随博客玻璃拟态主题,支持键盘与触屏操作,记录历史最高分。

GitHub Demo
HTML CSS JavaScript

项目简介

经典益智游戏 2048 的网页复刻版,不依赖任何游戏引擎或第三方库, 用原生 HTML + CSS + JavaScript 从零实现,视觉上完全融入博客的玻璃拟态设计。

▶ 立即开始游戏

玩法

  • 用方向键(或 WASD)/ 手指滑动,让所有方块朝一个方向移动
  • 两个相同数字的方块相撞时合并为它们之和
  • 每次移动后会随机出现一个新方块(90% 是 2,10% 是 4)
  • 拼出 2048 即获胜,之后还可以继续挑战更高分
  • 棋盘填满且无法合并时游戏结束

功能特性

  • 🎯 当前分数 + 历史最高分(localStorage 持久化)
  • 🎬 方块滑动、合并弹跳、出现动画
  • 📱 桌面键盘 + 移动端滑动双操作
  • 🌙 自动适配博客的深色模式
  • 🏆 达成 2048 后可选择继续冲更高分

技术实现

  • 棋盘定位:CSS 自定义属性(--r / --c)+ transform: translate() 定位方块, JS 只改坐标变量,滑动动画由 CSS transition 完成
  • 合并算法:每条行/列朝移动方向”压紧 + 相邻配对合并”,每个方块每回合最多合并一次
  • 状态管理:4×4 二维数组 + 少量标志位(胜利 / 继续 / 结束 / 动画锁)
  • 持久化:最高分存 localStorage,带隐私模式降级处理
  • 工程细节:适配 Astro 视图过渡(ClientRouter)的脚本生命周期,避免重复绑定事件