一套源码,
三端小游戏
gamekit 是面向 AI 协作的 2D 小游戏工具链。一份 TypeScript 源码构建
web / 微信小游戏 / 抖音小游戏;界面用声明式 .ui 语言描述,
平台差异只隔离在一层适配器里,构建自带真浏览器适配门禁。
为什么这样设计
三层职责分开:契约 → 实现 → 测试。读者主要是 AI,人只做验收。
一套源码,三端产物
平台差异只隔离在 packages/runtime/src/platform/ 一层。业务与 core 里不出现任何 wx. / tt. / window.。
声明式 .ui 界面语言
布局是约束不是坐标:region 切带 + size/cross/align 定位。换屏型(390×844 ↔ 320×568)不用改任何数字。
契约先行
每个能力都有 .ts interface + 契约测试。改契约必须同一次提交里改完所有实现和测试,禁止只改契约留实现报错。
真浏览器适配门禁
pnpm verify-platform 跑 dpr 五档 × 多视口 × build/dev,并自带反例自检——故意制造坏状态时门禁必须报红,防止自己变假阳性。
图集打包 + 包体红线
mg check 按 3 MB 发布线、4 MB 平台硬限校验。样张误入 assets/ 会当场拦下——那是真的把小游戏顶爆过的坑。
为 AI 写代码设计
AGENTS.md 是给 AI 的硬规则,分主题文档齐全。新接手的 AI 不问人也能加出一个界面。
快速开始
需要 Node.js ≥ 22 与 pnpm。clone 下来即可跑,不需要先生成什么产物。
git clone https://github.com/ahao0150/gamekit.git
cd gamekit
pnpm install
pnpm doctor # Node 版本 / pnpm / 依赖 / 契约文件 / 模板
cd games/platformer
pnpm dev # dev server,默认绑 127.0.0.1
pnpm dev --host 0.0.0.0 # 监听全部网卡,手机同网可预览
cd games/platformer
pnpm build # = mg build --all → build/{web,wx,tt}
pnpm check # 包体与配置校验
pnpm mg -- create my-game
cd games/my-game
pnpm dev
games/<name>/ —— mg create 会拒绝仓库外路径,
三端构建与 workspace 协议都依赖这个前提。
示例工程
仓库里带 4 个可以直接跑起来的示例,覆盖物理、界面语言、完整玩法与性能基准。
三端产物
同一份源码,三个目标。包体以 games/platformer 实测为参考。
| 目标 | 产物目录 | 产物形态 | 参考包体 |
|---|---|---|---|
web | build/web/ | 单文件 IIFE + index.html | 249.7 KB |
wx | build/wx/ | 微信小游戏工程 | 248.1 KB |
tt | build/tt/ | 抖音小游戏工程 | 248.2 KB |
PlatformAdapter + 写 probe(),
不碰 core、不碰契约的必需成员。四个平台(web / wechat / douyin / mock)已经这样并存。
界面长这样
.ui 是给 AI 用的界面描述语言:扁平、无嵌套、可定位到行、可直接静态断言。
# 顶部信息带:高 48,横向排,间距 8,内边距 12,交叉轴居中
region header top 48 row gap 8 pad 12 align center
put coinBadge size auto
put statusText size fill
put pause size fixed 24 align end
# 中间主体:吃掉剩余空间,纵向排,内边距 12
region body fill column pad 12
put parcelGrid size fill
# 底部按钮带:高 72,纵向排,间距 8,内边距 12,交叉轴拉满
region footer bottom 72 column gap 8 pad 12 align stretch
put primaryButton size fill cross fixed 56 style tone=primary label="开始配送"
put secondaryButton size fill cross fixed 44 style tone=secondary
没有嵌套、没有括号、没有缩进语义:行序就是语义,put 归属它上面最近的那个 region。
写错组件名 mg build 直接报「未知组件 'xxx',已注册的有:…」。
文档
12 份文档随仓库走,克隆下来就能读。按要做的事挑一篇。