在华为云AI开发者空间做一个可验收的2048:方向映射、合并规则与测试记录
本文由AI辅助整理,技术结论来自本次实际生成、修正和验证的“暖色2048”源码。当前发布的是离线网页作品,尚未完成活动沙箱或ECS部署。
1. 先把需求变成可以检查的规则
这次在华为云AI开发者空间中,使用AI生成了一个单文件2048小游戏。界面、CSS和JavaScript都放在index.html里,浏览器直接打开即可运行,没有第三方运行时依赖,也不需要后端账号。
“页面能打开”只能说明入口可用,不能说明游戏规则正确。我把验收目标拆成了几个具体行为:方向键与WASD对应正确方向;相同数字相遇时每块每轮只合并一次;分数等于合并生成数字之和;无效移动不产生新方块;重新开始重置当局分数并保留最高分;胜利和结束遮罩出现后不继续移动。
公开源码与验证记录:
- GitCode公开仓库:gcw_lB3PCZw0 / warm-2048(main分支,可在GitCode搜索)
- 作品介绍:华为云开发者作品展览馆,作品ID为006a2c9e0e000000
2. 四个方向共用一套合并逻辑
实现里用四行四列数组表示棋盘,0代表空位。最基础的操作是把一行向左压紧并合并:先去掉0,依次检查相邻元素,合并后把后一项置0,再去掉0并补齐四个位置。
下面是项目实际使用的核心函数;SIZE在项目中为4:
function slideRow(row) {
var arr = row.filter(function(v) { return v !== 0; });
var gained = 0;
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i] === arr[i + 1]) {
arr[i] *= 2;
gained += arr[i];
arr[i + 1] = 0;
}
}
arr = arr.filter(function(v) { return v !== 0; });
while (arr.length < SIZE) arr.push(0);
var moved = false;
for (var i = 0; i < SIZE; i++) {
if (row[i] !== arr[i]) { moved = true; break; }
}
return { row: arr, gained: gained, moved: moved };
}
容易遗漏的是连续相同数字的行为。比如[2,2,2,2]向左应得到[4,4,0,0],本轮得8分;[2,2,4,0]应得到[4,4,0,0],本轮只得4分。刚合成的4不能在同一轮再次与原有的4合成8。
| 输入行 | 向左移动后的结果 | 本轮得分 |
|---|---|---|
| [2,2,2,2] | [4,4,0,0] | 8 |
| [2,2,4,0] | [4,4,0,0] | 4 |
| [0,2,0,2] | [4,0,0,0] | 4 |
| [2,4,8,16] | [2,4,8,16] | 0 |
3. 真正踩到的坑:旋转方向与按键方向不一致
为了复用向左合并,项目先旋转棋盘、执行向左移动,再反向旋回。这里不能把方向编号直接当作顺时针旋转次数。
本项目方向编号为0=左、1=上、2=右、3=下,正确的顺时针旋转次数是:
var rotations = [0, 3, 2, 1][dir];
最初上下方向的映射需要修正。修正后,分别对四个方向和对应计分做了检查。这个例子提醒我:如果只用随机棋盘随便按几次,方向错误很容易被动画和随机新方块掩盖。方向测试最好从固定棋盘开始,移动完成后先检查确定性的结果,再单独考虑随机生成。
4. 无效移动、存储和终局也需要验收
项目只在anyMoved为true时更新棋盘、计分并生成新方块。如果棋盘没变化,move直接返回false,避免用户连续按一个方向就不断出现新数字。
最高分使用localStorage保存,读取和写入都用try/catch包住。这样浏览器限制本地存储时,存储异常不会直接中断游戏主流程。当前实现只保存最高分,没有保存进行中的整盘局面;清理浏览器数据会移除最高分。
胜利或失败遮罩出现后,move入口会检查遮罩状态并拒绝后续移动。重新开始创建两个初始方块、归零当局得分,最高分仍保留。
5. 实际做了哪些验证
2026年10月22日,对下载后的修正版实际HTML中的JavaScript做了11项核心逻辑检查,包括四个方向、连续合并、禁止重复合并、精确计分、无效移动不新增方块、重新开始、无可移动棋盘、胜利遮罩阻止后续操作,全部通过。测试清单保存在仓库test-report.txt。
此外,在Chrome中实际使用方向键操作,确认棋盘变化与得分增加。手机触屏输入逻辑已经实现,但尚未完成所有手机型号和浏览器的兼容性验收,因此不把桌面一次通过当成全平台保证。
6. 如何运行与复查
下载仓库后直接用浏览器打开index.html,或在项目目录启动本地预览服务:
python3 -m http.server 8000
再在浏览器地址栏输入主机localhost和端口8000。Python仅是可选的本地预览工具,不是游戏的运行依赖。可以先按上面的固定输入检查单行合并,再实际尝试四方向、重新开始与最高分记录。
7. 从开发到发布的边界
本轮完成了离线游戏开发、核心规则验证、公开代码整理和作品介绍发布,没有创建计费ECS。2048主活动当时仍提示资源紧张,因此不能把本地可运行或作品馆可见等同于已经完成沙箱、ECS部署。
体验环境有时效,退出前应先把源码、说明和验证记录保存到本地或公开仓库。预览结束后关闭本次启动的服务,发布结束后清理本次临时验证材料,并释放不再需要的体验容器。后续若部署到云资源,还应单独检查实例、云盘和公网IP的清理情况。
这次实践让我更重视把“AI生成代码”转换成“可以复核的交付”:明确行为、验证边界、修复实际问题、保留可运行源码和测试记录,才能让下一步部署有可靠基础。
- 点赞
- 收藏
- 关注作者
评论(0)