在华为云AI开发者空间做一个可验收的2048:方向映射、合并规则与测试记录

举报
yd_234769121 发表于 2026/10/22 20:29:37 2026/10/22
【摘要】 记录在华为云AI开发者空间生成并修正暖色2048的实际过程:复用单行合并算法、修正四方向旋转映射、处理无效移动和终局遮罩,并通过11项核心逻辑检查。提供公开源码和验收边界,明确区分离线可运行与云端部署成功。

本文由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生成代码”转换成“可以复核的交付”:明确行为、验证边界、修复实际问题、保留可运行源码和测试记录,才能让下一步部署有可靠基础。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。