单文件 2048 是怎么写的,以及发布到华为云开发者作品展览馆的流程与踩坑记录
最近用一个下午做了个很小的项目:网页版 2048。代码只有一个 index.html,不依赖任何框架。做完之后又把它发布到了华为云开发者作品展览馆。这篇文章把两件事都记下来:一是游戏里最值得讲的一个小设计,二是发布流程里我踩到的几个坑,希望能让后面的人少绕弯路。
作品页:https://gallery.developer.huaweicloud.com/gallery/006c20073cc00000
代码仓库:https://gitcode.com/limaofeng_1985/1024
一、2048 的核心:四个方向只写一份合并逻辑
2048 的规则很简单:4×4 的棋盘,滑动后相同数字相邻就合并成两倍,合出 2048 就赢。写的时候容易犯的错,是为上下左右各写一套合并代码,四份代码很容易有不一致。
我的做法是只写"一行向左滑动"这一个函数 slide:
- 先去掉这一行里的所有空格;
- 从左往右扫描,相邻且相等就合并成一个,同时把得分累加,并且每个方块一次移动里最多合并一次;
- 最后用 0 把长度补回 4。
向右、向上、向下怎么办?move(dir) 在调用 slide 之前,先把对应的行或列按方向取出来,向右和向下就整体反转一次,滑完再反转回去,写回棋盘。这样四个方向共用同一份代码,改规则只需要改一个地方。
其余部分也很克制:addTile 在空格里随机放 2(90%)或 4(10%);canMove 判断有没有空格、有没有相邻相等的方块,用来决定是否 Game Over;最高分存在浏览器的 localStorage 里,读写都包了 try/catch,隐私模式下读写失败也不会影响游戏。输入方面,键盘监听方向键和 WASD,手机上用 touchstart / touchend 的位移差判断滑动方向。
二、发布到作品展览馆的流程
整个流程由官方提供的发布 Skill 驱动,大致分成这几步:
- 把作品推到一个公开的 Git 仓库(GitHub、GitCode、Gitee 都可以);
- 安装发布 Skill,并让它读取项目;
- Skill 用你的华为云账号换取一份有效期 15 分钟的临时凭证,用来识别作者身份;
- 生成封面、简介,以及一篇带系统架构图的详情文章;
- 选择一个可投稿的活动,提交发布。
三、我踩到的几个坑
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 分钟左右。
- 点赞
- 收藏
- 关注作者
评论(0)