单文件 2048 是怎么写的,以及发布到华为云开发者作品展览馆的流程与踩坑记录

举报
yd_283137552 发表于 2026/10/24 09:25:37 2026/10/24
【摘要】 用一个单文件网页做 2048:四个方向共用一份合并逻辑的设计,以及把它发布到华为云开发者作品展览馆时踩到的几个坑。

最近用一个下午做了个很小的项目:网页版 2048。代码只有一个 index.html,不依赖任何框架。做完之后又把它发布到了华为云开发者作品展览馆。这篇文章把两件事都记下来:一是游戏里最值得讲的一个小设计,二是发布流程里我踩到的几个坑,希望能让后面的人少绕弯路。

作品页:https://gallery.developer.huaweicloud.com/gallery/006c20073cc00000
代码仓库:https://gitcode.com/limaofeng_1985/1024

一、2048 的核心:四个方向只写一份合并逻辑

2048 的规则很简单:4×4 的棋盘,滑动后相同数字相邻就合并成两倍,合出 2048 就赢。写的时候容易犯的错,是为上下左右各写一套合并代码,四份代码很容易有不一致。

我的做法是只写"一行向左滑动"这一个函数 slide:

  1. 先去掉这一行里的所有空格;
  2. 从左往右扫描,相邻且相等就合并成一个,同时把得分累加,并且每个方块一次移动里最多合并一次;
  3. 最后用 0 把长度补回 4。

向右、向上、向下怎么办?move(dir) 在调用 slide 之前,先把对应的行或列按方向取出来,向右和向下就整体反转一次,滑完再反转回去,写回棋盘。这样四个方向共用同一份代码,改规则只需要改一个地方。

其余部分也很克制:addTile 在空格里随机放 2(90%)或 4(10%);canMove 判断有没有空格、有没有相邻相等的方块,用来决定是否 Game Over;最高分存在浏览器的 localStorage 里,读写都包了 try/catch,隐私模式下读写失败也不会影响游戏。输入方面,键盘监听方向键和 WASD,手机上用 touchstart / touchend 的位移差判断滑动方向。

二、发布到作品展览馆的流程

整个流程由官方提供的发布 Skill 驱动,大致分成这几步:

  1. 把作品推到一个公开的 Git 仓库(GitHub、GitCode、Gitee 都可以);
  2. 安装发布 Skill,并让它读取项目;
  3. Skill 用你的华为云账号换取一份有效期 15 分钟的临时凭证,用来识别作者身份;
  4. 生成封面、简介,以及一篇带系统架构图的详情文章;
  5. 选择一个可投稿的活动,提交发布。

三、我踩到的几个坑

1. 仓库地址必须是 https 形式。
Skill 读取到我的仓库地址是 git@gitcode.com:...,直接报"gitUrl 不合规",要求 https:// 开头、.git 结尾。我的做法是把 origin 改成 https 地址,同时用 url.<base>.pushInsteadOf 让推送继续走 SSH,这样两边都不耽误:

git remote set-url origin https://gitcode.com/<用户>/<仓库>.git
git config url."git@gitcode.com:".pushInsteadOf "https://gitcode.com/"

2. Git Bash 会改写以 / 开头的参数。
调用接口脚本时,/v1/gallery/... 会被 MSYS 当成路径转换,报"Request path contains unescaped characters"。设置 MSYS_NO_PATHCONV=1 就好了。但这样 $PWD 里的 /f/... 路径 node 又不认,需要同时把脚本目录写成 F:/... 形式。

3. 预检步骤很慢,而且"退出码 0"不等于通过。
预检会补装 Python 依赖,我这里 pip 连续失败、回退重试了好几轮,大约等了十几分钟。后台任务提示"已完成"时,其实只是外层包装退出了,真正的判断依据是它最后写出的标记文件。

4. 需要先在账号里创建一个自委托。
临时凭证要通过一个名为 SELF_VERIFY 的 IAM 委托来换取,账号里没有就会报"agency cannot be found"。创建它属于修改账号权限的操作,建议自己在控制台确认后再建。用完之后可以把这个委托和临时用的访问密钥一并清理掉。

5. 积分任务按月只能领一次。
发布成功后会在响应里返回奖励结果,成长中心的积分到账有 1 到 3 小时的延迟。同一个月重复发布作品,不会重复得分。

四、小结

一个单文件的小游戏,核心思路是"把四个方向归一成一个方向",代码少、好改、不容易出错。而发布流程里,真正耗时间的是环境和权限:仓库地址格式、路径转换、依赖安装、账号委托,这些都是一次配好就可以复用的。如果你也想把自己的小作品发布上去,建议提前把仓库设成公开、准备好 README,并预留 20 分钟左右。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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