跳到正文

Product taste · AI-native workflow

一个人,如何用 AI 把想法变成上线的产品?

  • Claude Code写代码、造关
  • Codex审计、测试
  • Kimi配色、场景

格织是我一个人做的数织游戏。产品上的每个取舍由我来定;写代码、造关、审计,交给三个 AI 模型分工完成。下面是它从一个想法走到 App Store 和 Google Play 的全过程。

600
关精选像素画
9
种语言
170+
个国家和地区上架
952
张候选被我淘汰

中国大陆因游戏版号问题,暂不支持 App 下载;可体验网页试玩。

上架过程:从真机测试到双平台发布
  • iOS:先用 TestFlight 在真机上测,首次审核被要求补充信息(Guideline 2.1),我录了一段真机演示提交上去:从启动走过 5×5、10×10、每日挑战、购买、付费画册、设置和收藏。审核通过,在 170 多个国家和地区上架。
  • Google Play:已正式上线,现可通过公开商店页下载。上线前完成了封闭测试,并配置数据安全、内容分级、内购和供审核员解锁完整版的审核码。
提交给 App Store 审核的真机录屏(2026-09-17,iPhone 17,140 秒)
App Store Connect 的提审列表,App 和 Full Game 内购都在等待审核
App Store 提审:App 和完整版内购同时提交(2026-09-19)
TestFlight 里的测试版本页面
TestFlight 测试版本和测试内容(2026-09-17)
测试用的 iPhone 17
测试用的 iPhone 17
Google Play 封闭测试者群组页面
Google Play 封闭测试组(2026-09-11)

01关卡设计

每一关都是一幅画

数织最打动人的一刻,是涂完最后一格、黑白方块变成一幅画的时候。所以我让格织的每一关都是一幅画:只有一个解,靠推理就能一步步解开,解完揭晓彩色像素画和它的名字。整个产品也跟着这个想法走:安静、简洁,没有倒计时,没有生命值,没有广告。

游戏里填完、尚未揭晓的棋盘:左边和上边是线索,涂黑的格子还看不出是什么
揭晓后的彩色像素画:贝壳贝壳 · Seashell
涂黑时还看不出是什么;上色、有了背景,才认出是贝壳。
看截图3
正在解题的棋盘,已经涂了一部分
解题中
正在解题的棋盘,已经涂了一部分
解题中
正在解题的棋盘,已经涂了一部分
解题中

02商业化

一次买断,没有广告

我希望玩家打开格织时,眼前只有棋盘。所以不放广告,也不卖体力和提示:100 关和当天的每日挑战免费;喜欢的话,US$4.99 一次买断其余 500 关和全部往期挑战,美元参考价,实际本地价格以商店显示为准。提示和设置对所有人免费。这个决定也定下了后面的做法:既然不靠广告挣钱,提示、手感和揭晓就只需要对玩家负责。

免费

  • 100 关:精选合集 4 本画册
  • 当天的每日挑战
  • 提示和全部设置

完整版US$4.99 · 一次买断

  • 其余 500 关:12 本画册
  • 往期每日挑战
  • 没有广告,没有订阅
看截图2
iPhone 上的完整版购买页,按钮写着 Unlock for US$4.99
真机上的完整版购买页
购买完成的系统提示
购买完成

03技术栈

一套 React 交互,跑在网页、iOS 和 Android 上

格织的核心是一块最多 225 格、要被手指反复拖动的棋盘。我用 React + TypeScript 把全部交互只写一次,再用 Capacitor 包成 iOS 和 Android 应用;网页试玩跑的也是同一份代码。振动、iOS 从左边缘滑动返回、商店内购这些只有手机系统才有的能力,分别用各平台的原生代码来做。正因为核心只写一次,我一个人才维护得了三个平台。

React + TypeScript棋盘、画册、提示、存档
网页试玩浏览器直接打开
AndroidCapacitor · Play Billing · 触感
iOSCapacitor · StoreKit 2 · 侧滑返回
看截图5
Xcode 模拟器里并排的两台 iPhone,运行格织
iOS 移植初期,两台模拟器(2026-08-25)
iOS 上的对局画面
iOS
Android 上的对局画面
Android
iPhone 17 实机上的 10×10 对局
iPhone 17 实机
Claude Code 桌面版的会话“提示按钮功能开发”,上方是本地预览的游戏首页,右下是模型选择 Opus 5 与用量面板
在 Claude Code 里开发提示按钮:改完在内置浏览器里直接预览,模型是 Opus 5
完整过程
  • 游戏:React 19、TypeScript、Vite、Vitest。
  • iOS 和 Android:Capacitor 8。iOS 接 StoreKit 2,Android 接 Play Billing。
  • 内容与每日挑战:Cloudflare R2 + CDN。官网:Cloudflare Workers。
  • 测试:自动测试之外,iOS 用一台 iPhone X(iOS 16)测旧设备,另租一台 iPhone 17 测新系统;Android 在真机上调触感。

04玩法

手感藏在细节里

解一局数织,手指要在棋盘上拖几百次,所以我把手感放在第一位:振动、声音、拖动够不够流畅,还有通关时那段揭晓动画。好不好玩,往往就取决于下面这些不起眼的地方。

操作

  • 自动补叉一行涂够了,剩下的格子自动标叉。
  • 简易模式默认点一下就能把叉改成方块;严谨模式要先擦掉叉,留给老玩家。
  • 撤销按一笔算拖了一整行,撤销就撤一整行。
  • 重开先确认清空棋盘前先问一句,误触不会让半局白做。
  • 画册与收藏600 关收进 16 本主题画册,解一关,收藏里多一幅画。

为什么这样做

  • 反馈越少见的时刻,反馈越重一局要涂几百格,每一格都有一下短振和一声轻响;涂完一整行,那一下更重;只有通关,才有一段渐强的振动和音效。
  • 节奏揭晓分阶段展开通关后,棋盘收拢,浮出“藏品解锁!”,最后升起成绩卡。前几段动画有所重叠,成绩卡最后出现,让画先留一会儿。
  • 性能流畅高于特效揭晓原本是画面从模糊慢慢变清晰,更好看,但每次打开 App 后的第一次通关都会卡一下。我选了流畅,把它删了。
  • 品牌图标也是一局数织图标在 Claude Design 里做,本身就是一小盘数织:只用两种颜色,格子和 App 里一样有厚度,留着一个叉,最后一格还悬在半空,背后叠着画册。
看截图4
旧版首页,按难度分成入门、进阶、挑战三组
改版前:首页按入门 / 进阶 / 挑战分组(2026-08-26)
新版首页,按主题画册排列
改版后:按画册组织(2026-09-07)
繁体中文界面的重新开始确认框
重开前先确认
Claude Design 里的图标方案 6c Steel navy:深藏青底上一块 5×5 棋盘,最上面一块悬在半空,旁边是四个主屏幕尺寸预览
App 图标是在 Claude Design 里做的:第 6c 版 Steel navy,右边是它在浅色和深色主屏幕上的大小
完整过程
  • 反馈按一局里出现的次数分三层:涂格子(几百次)、涂完一行或一列(十几次)、通关(一次)。涂色、画叉、擦除各有不同的振动;一笔拖过去,后面的格子振得更轻,但每一格都还摸得出来。我试过换成系统最弱的那种振动,结果整笔像从手上消失了。默认档位下,涂完一行时那一格换成两下紧挨着的短振,手上是更重的一下;通关是渐强的三拍,配上音效和揭晓动画。设置里的强度原本是低 / 中 / 高三档,在安卓真机上一测,高档和低档是同一个波形,于是改成“优雅 / 鲜明”两档。
  • 揭晓分四步,各有各的时间:0–0.74 秒棋盘收拢,0.30–1.16 秒“关卡解锁!”逐字浮现,0.26–1.16 秒棋盘上移让位,1.20–1.82 秒成绩卡升起。早期版本把这些挤在 1.07 秒里一起发生,画刚成形就被推走,眼睛不知道该看哪里。
  • 删掉模糊:揭晓原本是画面从模糊变清晰。整个 App 只有通关时才会画这种模糊效果,每次启动后第一次画它,画面就会卡一下,这正是“第一次通关卡一下”的原因。我的原则是流畅永远高于画质和特效,所以删掉了;现在标题醒目只靠字号、字重和颜色。
  • 图标:用 Claude Design 做,选的是第 6c 版 Steel navy。底色是夜里的藏青,格子和 App 里一样有厚度、按下会下沉;右下留着一个叉,画叉是解题的一部分;最上面一块悬在半空,是揭晓前的最后一格;背后叠着的几页是画册。

05提示

只教你,不替你下

几乎每款数织游戏都有提示,代码也不难写。常见的做法有两种:限定次数,用完付费;或者直接替你涂上一格。前者让人卡住时先犹豫要不要花钱,后者涂完了,你还是不知道它为什么对。

格织的提示免费、不限次数,而且只教、不替你下。按一下,它读取当前盘面,找出此刻最容易看懂的那一步,点亮那一行或那一列,再用一句话讲清为什么。格子由你自己涂。

一个盘面上常常有十几行都能往下推。程序按顺序一行行扫,但人不是这样看的:一行 10 格里的数字 9,扫一眼就知道中间几格必涂;要同时盯着 5 和 3 两个数字的那一行,就得想一会儿。所以提示按“看懂要费多少力”来排,先给最省力的那一步。它也不照着答案告诉你涂哪格:照答案涂也能涂完,但只有顺着人的思路一步步推,玩家才学得会。

所以提示同时也是教程:第一关的新手教学用的就是它,之后遇到没见过的推理技巧,也由它来讲。在 AI 能替我写的代码之外,这是我最在意的一个产品决定。

「数字 9 不管放哪,中间这几格都一定会涂到。」
安卓真机录屏:卡住就按,每次只指一步
看截图1
5×5 第一关,右上角有 How to play 按钮
第一关的新手教学,用的也是这套提示
完整过程
  • 每条提示只分析一行或一列:当前盘面上已经涂了什么、叉了什么,加上这一行的线索。推理的手法有七种,从「线索正好占满整行」到「空隙塞不下任何一段」。
  • 排序看的是「看懂这一步要费多少力」:手法本身的门槛、要同时盯着几个数字、这一步能不能涂(只能画叉的步骤更难看出来)。同样好懂的,再比能推出几格。
  • 唯一会对照答案的时候,是检查你有没有涂错:一旦发现涂错,提示会先告诉你错在哪一行,而不是在错误的盘面上继续推。
  • 如果还是没看出来,不涂任何格子再按一次,它会把与第一条线交叉的那条线也点亮,交点就是这一步说的那一格。两条线一交叉就等于给出答案,所以要你再问一次才给;再往后,无论按几次,它都不会替你涂。
  • 开发时踩过的坑:第一版提示的结论来自程序求解,相当于先知道了答案,再配上一段通用的说法;那段说法假设这一行还是空的,没看你已经涂了什么、叉了什么。结论是对的,推理过程却不是人会有的:我在真机上看到,一行 5 格、两端已经画了叉,数字 3 其实只剩一个位置,提示却还在说“考虑 3 的可能位置,它们存在重叠区域”。后来改成只在这一行当前真正放得下的位置里推,并写了测试钉住:提示推出的每一格,都必须和关卡校验用的逐行求解程序一致。

06关卡生产

AI 出候选,机器检查,我终审

600 幅画,我一个人画不完。于是我搭了一条流水线:AI 按主题批量出候选,每张先过自动检查(只有一个解、能靠推理解开、不和已有关卡重复、配色可用),然后我一张张看,决定留下、返工还是淘汰。到现在,正式库留下 600 关,被我淘汰的候选有 952 张。

  1. AI 出候选题材、构图、配色
  2. 自动检查唯一解 · 推理可解 · 查重 · 配色
  3. 我终审留下 · 返工 · 淘汰
  4. 进入正式库接进游戏、回归测试、发布
甜甜圈关卡的 10×10 黑白网格
黑白网格
粉色糖霜与金色面包的配色
配色
未采用的场景:淡紫墙面和灰绿台面
另一版场景
最终采用的场景:暖色墙面和冷色台面
最终采用
同一关试过两版背景场景,最后我选了较早的那一版。(2026-08-16)
看截图3
终端里一批关卡的造关记录
一批造关的过程记录(2026-07-26)
终端里批量生成 30 关候选的过程
按主题批量出候选(2026-08-05)
四个被淘汰的候选关卡图案
被我淘汰的候选
完整过程
  • 自动检查:数据格式、只有一个解、只靠一行一行推理就能从空棋盘解到底、不用猜、旋转和镜像后也不和已有关卡重复、每种颜色都真的用到。正式库 600 关全部通过(2026-09-21)。
  • 我的判决理由大致三类:画得不像、题材太小众(多数人认不出),还有一类是有救的,退回返工。
  • 造关和上线是两个分开的 skill:造关的 skill 做到交出候选为止,由我终审;通过的关卡再交给上线的 skill,负责接进游戏、跑回归测试和发布。
  • 一次对比(2026-08-12):我把造关的 skill 写得更复杂(v7.1),同一天新旧两版各做 36 关交给我终审,通过数反而从 25 降到 20。于是只保留查重和交接格式,多加的自查步骤删掉。
  • 早期一批 102 关跑自动审计:没有一个必须修的问题(阻断),26 条提醒(警告)。

07AI 分工

谁做什么,是一路试出来的

首屏那三行分工,不是一开始就定好的。项目刚开始,我让 Claude 写核心代码,把批量造关交给 Codex,后来也让 Kimi 接过造关。

转折在 7 月 22 日。那天我让三家同时造关,一半带着 Claude 写的造关 skill,一半不带,结果就是下面这张图。从那天起,主力造关转交给 Claude,之后仍做过 Codex 的补充试验。

另外两家没有因此退场,而是换到了更适合它们的位置。Codex 最擅长把事情讲给人听,Kimi K3 的审美在三家里最好。各自具体做什么,见下面三张卡片。

  • Claude Code写代码、造关游戏的核心代码和主要功能,都是和它一起写的。造关按 puzzle factory skill 走,要 Opus 级别才造得好;Sonnet 造的关,我大多留不下。
  • Codex审计、测试把代码审计写成我读得懂的报告,比对几个分支和 worktree,告诉我项目走到了哪。部署网站、给手机装调试包这类我自己也能做的活,交给它更省时间。
  • Kimi配色、场景最早的关卡都是白底。Kimi K3 按每关的题材补上背景;原先画得不像、颜色太少、大片同色平铺的配色,也由它重新升级。
Claude
不带 skill
11 / 15
带 skill
13 / 15
Codex
不带 skill
4 / 9
带 skill
1 / 8
Kimi
不带 skill
6 / 14
带 skill
3 / 16
2026-07-22,三家各造两组关,柱长表示我终审的通过率,标签为通过数 / 送审数。这份 skill 是 Claude Fable 5 写的:这次 Opus 4.8 的结果最好,带上它从 11/15 升到 13/15;Codex 和 Kimi 带上它,反而变差了。
看截图5
屏幕上同时运行的多个造关终端窗口
7 月 22 日,几家同时造关
终端显示 16/19 passed first try
Claude 造的一批候选,19 个里 16 个第一次就通过自动检查
上排四幅白底关卡:蝠鲼、画笔、秋千、蜘蛛;下排是同样四幅加上场景背景、配色更丰富的版本
Codex 造的 4 关(2026-08),现在都在正式库里。上排是它交出的原版;下排是 Kimi K3 补了背景、升级了配色之后的样子
Kimi 终端里的配色升级任务
Kimi 按配色设计文档,一本画册一本画册地升级配色(2026-09-01)
Codex 审计会话
Codex 的审计报告,写到我能看懂每个问题为止(2026-09-07)
完整过程
  • 7 月 22 日这次试验的范围:三家在同一天、从同一份代码开工,每家一组带 skill、一组不带,题材各组自己选,最后都由我一张张终审。每组只有 8–16 张候选,题材没有完全控制;这是我的工作流试验,不能单独证明 skill 导致了差异,也不是通用模型排名。
  • 分开看送审数和通过数:Codex 从不带 skill 的 4/9 变为带 skill 的 1/8,送审数更少;Kimi 从 6/14 变为 3/16,送审数更多。两者本次留下的数量和比例都下降,但不能把分母变化归为同一个原因。
  • 为什么后来不再给 Codex 写 skill:8 月我专门为它写过四版,想确认是不是 skill 不合身。四版都没赶上它不带 skill 的成绩;其中一版让它自己循环批量出图,产量很大,我能留下的却很少。量换不来质,造关就没再交回给它。
  • 为什么造关要 Opus:一关要同时顾到像不像、能不能只靠推理解开、配色好不好看,这三件事是一起权衡的。Sonnet 也造过,差距很明显,后来造关只用 Opus 级别的模型。
  • Claude 的造关 skill 为什么越改越短:从 v1 到 v7.2,我一度往里加了越来越多的自查步骤,同一天对比下来,流程越重,通过的反而越少。最后留下的是几条真正管用的画法,比如给剪影加一个交代语境的小道具、在主体四周留出空白。这几条来自一次三个 Claude 并发的实验:同一份 skill,通过率差了一倍多,差别全在画法上。
  • 为什么背景和配色交给 Kimi:最早的关卡是白底,揭晓时只有主体。美术升级时,每一关要按题材配一片场景,水下、夜空、室内的墙和地板,这是审美活。三家的产出摆在一起,Kimi 家的旗舰 K3 画得最好看,所以交给了它,不是为了省 token。配色升级也一样,由它重新配色,再一本画册一本画册地交给我验收。
  • 为什么审计和杂活交给 Codex:它交出来的东西最适合人读。审计报告会讲清每段代码做什么、质量怎样;比较几个分支和 worktree 时,会告诉我哪边领先、哪些还没合并。测试、部署、打包这些我自己也能做的事,交给它,我就能把时间留给判断。

08每日一关

关卡先到,日期清单最后更新

每天一关,是让玩家明天还会回来的理由。每日关卡放在 CDN 上,App 先读一份日期清单,再按日期取当天的关卡。如果清单先更新、关卡还没传完,网络一断,玩家就会点开一个空日期。所以我发布时先检查整批内容,逐个上传,全部到位才更新清单;上传失败会自动重试,整次发布重跑一遍也不会出错。

  1. 内容与场景
  2. 整批检查
  3. 逐个上传失败会重试
  4. 最后更新清单
  5. 玩家的日历
看截图2
iOS 上的每日挑战日历
每日挑战日历 · iOS
Android 上的英文每日挑战日历
Daily Challenge · Android
完整过程
  • 一次补发 188 天的真实发布(2026-08-08):6 个文件第一次上传失败,自动重试成功后才更新清单;之后逐个从 CDN 读回和本地比对,188 个全部一致。我还抽查了两个早已上线的日期,发布前后文件完全一样,说明这次发布没有碰到旧内容。

09国际化

9 种语言,界面和关卡名分开管理

格织按系统语言自动切换 9 种语言,认不出的就显示英文。界面文字和 600 个关卡名分开管理,各有各的检查,哪种语言漏翻一条都过不了;换语言不影响存档。连商店里的名字也跟着系统语言走:中文系统里叫「格织」,英文系统里叫「Gridweave」。我还留了一个小心思:中日韩玩家通关时,英文名显示在上、本地名在下,顺手认一个英文单词。

英文界面的揭晓画面:Picture unlocked
English
繁体中文界面的揭晓画面:藏品解鎖
繁體中文
法文界面的揭晓画面:Image débloquée
Français
看截图5
日语界面
日本語
韩语界面
한국어
德语界面
Deutsch
西班牙语界面
Español
繁体中文界面,关卡名在軌道上
繁體中文 · 对局中
完整过程
  • 9 种语言:English、简体中文、繁體中文、日本語、한국어、Deutsch、Français、Español、Português (BR)。
  • 界面文案以英文为基准,其余八份漏写一条就编译失败;关卡名和画册名由脚本检查是否齐全。
  • 德语、法语、西班牙语、葡萄牙语的玩家只看到本地名。所有存档都按固定 ID 记录,和语言无关。

Debug

在一台旧 iPhone 上,从左边缘滑动返回时,会闪出一两百毫秒的空白。很少有人会注意到,我还是一帧一帧追到它消失。

iOS 左缘返回时露出空白

在一台 iPhone X 上,从屏幕左缘滑动返回,手指下会露出空白,或闪过一帧旧画面。代码里已经切回了上一页,屏幕上却还没把它画出来。我把一次返回拆成几个阶段逐帧测量,把顺序反过来:先露出已经画好的上一页,再完成切换。之后在真机上连续测了 15 次,空白和旧帧都没有再出现。

改前
  1. 手势开始
  2. 等页面画完
  3. 露出上一页

手指已经在动,画面还在等。

改后
  1. 上一页早已画好
  2. 手势开始,直接露出
  3. 之后再完成切换

第一帧就是正确的画面。

看截图4
逐帧分析返回动画的会话记录和模拟器画面
逐帧分析,找到露白的那一帧(2026-08-31)
Xcode Instruments 的时间线
Instruments 性能记录(2026-09-05)
Xcode Instruments 的时间线
Instruments 性能记录
Xcode Instruments 的时间线
Instruments 性能记录
完整过程
  • 设备:iPhone X,iOS 16。
  • 改前的测量(5 次中位数):画册返回约 101 ms(约 6 帧),收藏详情返回约 194 ms,每日挑战返回约 114 ms。格织的界面是一张网页,外面包着一层 iOS 原生壳;两者之间传一次消息约 11–13 ms,不是瓶颈。
  • 先试了两个办法,都不够:一是离开时不销毁上一页,省掉了重新创建,但回来时仍要重新排版、重新绘制;二是多等一帧再露出,代码那边准备好了,屏幕上的像素还是没画完。
  • 最终做法:让上一页一直保持画好的状态,单独放在一个图层上(合成层),手势一开始就直接露出它,真正的页面切换放到之后再做。
  • 改后:从手势到露出约 3–7 ms(5 个有效样本)。完整绘制仍要 80–110 ms,但第一帧已经不用再等它了。
  • 验收:15 次真机测试,快速滑动、中途取消、返回后的状态都检查过,无白帧、无旧帧。
  • 插曲:用 Instruments 测内存时,测试工具自己占到约 1.85 GB,被系统结束;换 Safari Web Inspector 交叉核对,确认游戏本身没有内存问题。
现在开始

最快了解它的方法,是玩一关。

先玩免费的 100 关和每天的新关。喜欢的话,4.99 美元一次性解锁全部。

具体价格以当地商店显示为准。 中国大陆因游戏版号问题,暂不支持 App 下载;可体验网页试玩。

想看代码?网页试玩的源码公开在 GitHub: Jackjimmy/gridweave-demo ↗