作者 Weirdfish

 

个人主页:https://modelscope.cn/profile/weirdfish

 

起因:想试试用 AI 做一款完整的游戏

我本身是一个重度的游戏爱好者,因此在利用 AI 写文档、做一些小应用的时候,自然而然会冒出一些想法:想试试用 AI 做一款完整的游戏。 不是写个小 demo,而是一款真正能玩的东西。

 

一开始会有很多的想法,做一个视觉小说,或者像素的休闲经营游戏,抑或是类银河恶魔城游戏。最后思来想去,选择了参考杀戮尖塔做一个 Roguelike 卡牌游戏,原因在于:

  1. AI 擅长写卡牌代码 —— 回合制、数据驱动,不需要物理引擎和骨骼动画这些 AI 搞不定的东西。

  2. 深度来自设计和 combo —— 正好是人 + AI 反复讨论迭代的部分,而不是靠技术复杂度撑。

  3. 美术量可控 —— 全是单张静态图,AI 生图工具能直接覆盖。

 

它不是一款完整的游戏。内容量还不够撑起一款完整游戏,数值还在收敛,UI 没有动效。它是一个最小可玩验证版本(MVP),证明"这个玩法跑得起来",仅此而已。

 

游戏的代码,我没手写过其中任何一行 —— 代码的开发、测试、debug 全部由 AI 完成,我只负责提需求和看结果。这篇文章想分享的不是"AI 多牛",而是一个更具体的问题:当一个完全不会写代码的人决定做一个有点复杂度的 Demo,他要怎么把 AI 用对?

 

体验链接:

https://modelscope.cn/studios/weirdfish/niuma-dungeon

 

一、最大的认知拐点:AI 不是"一个" AI

我最早的失败做法,是把所有事情都丢给同一个 AI:让它聊设计、让它写文档、让它写代码、让它画图。结果是——它什么都干了一点,什么都干得不够好。

 

真正能跑通的协作模型,是把"做游戏"这件事拆成三个角色,让不同的 AI 干不同的事:

角色

工具(我的选择)

负责什么

不负责什么

用户

我自己

提方向、做决策、看效果

写代码、写规格、做数值

设计 AI

QoderWork

讨论设计、写参考文档、做数值规划

写代码

开发 AI

Qoder + Codex

按文档实现代码、跑构建、修 bug

自作主张改设计

这个分工有几个反直觉的点。

第一,用户不写任务文档。 我尝试过自己写 —— 写了两份就发现写不动了。一份合格的开发任务单需要"具体到哪个文件、哪个函数、什么数据结构、哪些验收点",这超出了非程序员的能力上限。后来想明白:用户的核心价值是判断和决策,不是文档生产。 设计 AI 负责把讨论结论写成结构化的文档,开发 AI 负责按文档执行。我只需要审阅文档、确认方向、看运行结果。

 

第二,设计 AI 和开发 AI 必须是两个独立会话。 即使你用的是同一个工具,也要分两个对话。原因:设计讨论的上下文是"我们在思考什么",开发实现的上下文是"我们在写什么"。这两种思维模式混在一起,AI 容易开始"边写边改设计",最后既没做完代码也没敲定设计。

 

第三,开发 AI 不能"重新定义游戏"。 我吃过这个亏:让开发 AI 实现一个简单功能,它顺手帮我"优化"了战斗系统的核心规则。看起来是好心,实际上把后面好几个任务的前置假设全打乱了。后来在协作流程里加了一条硬规矩:开发 AI 发现设计冲突时,停下来报告,不擅自修改。

 

把这三个角色绑在一起的,是一个标准工作循环:

 

用户提出想法   ↓设计 AI 讨论并收敛方案   ↓设计 AI 输出参考文档   ↓用户审阅 / 修改 / 确认   ↓开发 AI 按文档实现   ↓开发 AI 更新进度记录   ↓用户验收,或反馈给设计 AI   ↓(循环)
 

 

二、文档不是"写给自己看",是"AI 之间的接力棒"

整个项目最关键的发现是:文档的质量,决定了 AI 协作的上限。

一开始我以为文档是给我自己整理思路用的,后来才意识到它是 AI 之间传话的接力棒。设计 AI 把设计装进文档,开发 AI 从文档里读出来——文档质量差,传话过程就丢信息。

 

2.1 长期文档(项目级)

这些文档贯穿整个项目,每次 AI 进场都要读一次。所以它们必须越短越好。

AGENTS.md:项目根目录的"开机说明书"。AI 一进项目就读它。我把代码风格、技术栈、文件夹约定全塞这里。

 

CURRENT_STATE.md:当前项目状态总览。控制在 100 行以内,列已完成的功能、当前在做的事、关键文件路径。

 

这两份文档加起来不超过 300 行。但有了它们,每次让 AI 干活前不用再花 20 分钟解释项目背景。

 

2.2 单次文档(任务级)

每个具体任务做之前,设计 AI 会写一份针对当次任务的参考文档。比如"卡牌池扩展与稀有度系统"文档有 370 行,定义了 45 张牌的完整数据、升级版、流派归属、协同网络。

这些文档遵循一个模板:

 

当前状态:现在代码 / 数据是什么样要做什么:具体改哪些文件、哪些字段、改成什么样不做什么:本次任务的边界(防止 AI 顺手扩展)验收清单:可测试的具体条件降级方案:如果实现成本超预期,可以怎么砍
 

最重要的是"不做什么"和"降级方案"这两节。

"不做什么"防的是 AI 顺手扩展——它太爱把简单任务做大了。"降级方案"是给 AI 留逃生通道——当某个改动牵涉太广,AI 不至于硬上,可以选一条更轻量的路。

 

2.3 汇总任务包

项目后期我把所有未实装的设计文档打包成一份汇总任务(T1-T8 共 8 个子任务),定义了依赖顺序和执行约束。开发 AI 按顺序执行,每个子任务完成后可独立验证。

 

这些文档的价值是:AI 下次进场时可以直接读文档,不需要重新讨论。 文档就是 AI 的"记忆外存"。

 


三、Vibe Coding 实战:开发 AI 怎么用得不踩雷

最开始我会一次让开发 AI 做很多事:"实现状态效果重命名,顺便把卡牌伤害平衡一下,还有 UI 也调一下"。结果是它三件事都只做一半。

后来改成一次任务只对应一份参考文档。任务文档写得多详细,AI 干得就有多干净。

关键原则是不要同时做太多事。一个系统做完、测试通过,再做下一个。比如先做战斗系统,能打一场了,再做路线系统,能跑一局了,再做事件和商店。

 

战斗界面

 

 

路线选择界面

 

3.2 永远先 build,再聊功能

每次开发 AI 报告"我做完了",第一件事不是看效果,而是 pnpm build。因为 AI 写代码经常有三种问题:

  • 类型不对(编译失败)

  • 引用了不存在的函数

  • 漏了导出或注册

这三种都是 build 立刻能暴露的问题。先过 build 这一关,再讨论功能。

 

3.3 让 AI 在结束时强制写"开发记录"

任务完成后,开发 AI 必须更新 CURRENT_STATE.md(当前项目状态总览)。这是给下一次进场的 AI 看的 —— 下次启动新任务,新的 AI 一进来读 CURRENT_STATE 就能续上,不用再口头解释一遍。

这个机制省了大量"重新介绍项目"的时间。任何长周期 AI 协作项目都建议加上。


 

四、AI 辅助游戏设计:设计 AI 最大的价值

很多人以为"AI 辅助开发"就是让 AI 写代码。对我来说,AI 更大的价值是当设计讨论的对手。

 

4.1 数值平衡

我不可能自己算清楚 45 张牌之间的 combo 关系、17 层路线的经济曲线、精英战的 DPS 检测是否合理。我的做法是让设计 AI 先把数值翻译成"每回合期望",再让我审。举个例子:

我:PPT 圣骑士的初始卡组,每回合平均 DPS 大概多少?AI:基础攻击 6 伤害 × 每回合约 1.5 张 = 9 DPS。加上偶尔的护盾反击 3 伤 ≈ 12 DPT。我:那普通怪 32 HP 要打几回合?AI:约 3 回合。精英 85 HP 要 7 回合 —— 太长,玩家会感受到压力累积的紧迫感。我:这正是我要的效果。但如果玩家没有好 combo,7 回合会不会太难?AI:如果只有基础牌,DPS 9 → 精英要 9.4 回合。确实需要 build 强化才能通关,这迫使玩家去商店 / 事件获取新牌。

 

这个套路让我做决策变得简单 —— 我看不懂"是否平衡",但我能看懂"过剩了多少"、"差几回合"。这种对话帮我确定了核心设计原则:不能靠蛮力数值碾压,需要好 combo + 好决策才能通关。

 

4.2 流派设计

每个职业我设计了 4 - 5 个流派(护盾坦克、改稿爆发、内耗流血、反伤流……),设计 AI 帮我做了两件事:

  • 协同网络分析:画出每张牌和其他牌的 combo 关系图,确保"每张新牌至少和 2 张现有牌有 combo"。如果某张牌是孤立的,就重新设计或删掉。

  • 流派冲突检测:我有 5 个未来职业的设计构想(弃牌循环、消耗回收等),必须确保当前职业的流派不会和未来职业撞机制。设计 AI 帮我做了"封禁机制清单",避免设计上的撞车。

 

当然这件事情不能完全依靠 AI,游戏最重要的还是创意 —— 足够有脑洞的机制、让人上头的构筑,核心的实现还是依赖人的创意,AI 只是其中的辅助。

 

4.3 精英机制

这是我最满意的部分。6 个精英每个都有独特机制,不是"更高数值的普通怪":

  • 微管理上司(叠毒):每回合给玩家叠毒,回合结束毒爆。拖越久越疼。

  • PPT 大师(镜像):复制你上回合打出的最强牌反击。你越强它越强。

  • 拖延症患者(延迟引爆):你出牌越多它攒越快,5 层触发大招。

  • KPI 考核官(反伤反馈):反射你上回合 30% 的伤害。不能无脑爆发。

  • 会议马拉松(限时 DPS):护盾越堆越厚,5 层触发全屏攻击。

  • 报销审核员(经济消耗):出牌扣金币,没钱就挨打。

 

这些机制参考了杀戮尖塔、弈仙牌、Balatro、Monster Train、月圆之夜等多个游戏,不只是杀戮尖塔。设计 AI 在我提出参考一些头部游戏后,主动搜索了其他卡牌游戏的机制做融合。

 


五、AI 生成美术素材:101 张 PNG 的工业化流程

一个卡牌游戏需要大量美术素材:敌人立绘、事件插画、遗物图标、UI 贴图、战斗背景……加起来 101 张 PNG。如果找画师,这个量级至少要几万块和几个月的工期。

 

我用 GPT Image 生成,但不是随便写个 prompt 就完事。我建立了一套工业化流程:

 

5.1 风格锚定

第一步是确定统一的视觉风格。我给 AI 一个明确的 style description,所有素材共享这段描述:

Flat color digital illustration, bold black outlines, cartoon-style characters/objects, clean white background, no gradients, no realistic textures, game asset quality.

这段描述确保 101 张素材看起来像同一个画师画的。

 

第一次直接让 AI 出图,得到的是一堆风格全不统一的图 —— 有的像漫画、有的像 3D 渲染、有的像水彩。每张单看都还行,放一起就是灾难。有了风格锚定之后,命中率从 30% 上升到 75%。

 

5.2 GPT 喜欢"创造性发挥",要硬性反向约束

GPT Image 默认会"美化"和"补足"画面。比如你说"普通的笔",它给你画一支闪着金光的魔法权杖;你说"透明背景",它给你画一个棋盘格纹理(伪透明,根本不是 alpha 通道);你说"不戴眼镜",它经常还是给你画上眼镜。

 

应对方法是在 prompt 里加 DO NOT 段落,把不要的东西明确否定。这种粗暴的反向约束,效果比正面描述好得多。GPT Image 对 DO NOT 的服从度比 should be 高很多。

 

5.3 分类批量生成

按素材类型分批生成,每批有专门的 prompt 模板:

  • 敌人立绘(12 张):办公用品拟人化 + 四肢 + 黑描边 + 站立姿势 + 白底。精英怪额外加"场景压迫感 + 暗色调"。

  • 事件插画(15 张):融入 roguelike UI 元素(HP 条、任务清单),增加游戏感。这类图质量最高。

  • 遗物图标(19 张):办公用品 + 魔法光效,比如"订书机打出华丽卡牌""压力计表盘红区指针 + 绿色治愈能量"。

  • UI 素材(55 张):战斗背景、卡牌纹理、能量球、意图图标、地图节点等。

 

5.4 质量控制与入库

每张图生成后我会打分(构图 / 风格一致性 / 主题契合 / 可用性),80 分以下重做。最终 101 张素材全部 80+ 分通过。

 

通过后立刻用 PIL 脚本处理:去白底(RGB ≥ 240 → alpha = 0)→ 裁剪 → resize → 存到 assets/art/ 和 public/assets/art/ 双目录。即时入库,不攒齐批量处理。

 

这个流程保证了效率:平均 2 - 3 分钟出一张素材,101 张大约 4 - 5 小时全部完成。

 

5.5 真透明背景:让开发 AI 后处理

GPT Image 写 transparent background 给你画的是棋盘格纹理,这是个无解的限制。

 

正确做法:prompt 里写 pure solid white background, no patterns,生成出来都是纯白底图,然后让开发 AI 写一段批量去白底脚本,用 PIL 做后处理。这一步零美术、纯代码,开发 AI 一次就能搞定。

 

六、部署上线:把 dist 丢上魔搭创空间

代码、美术都到位之后,最后一步是把 Demo 挂到一个别人能直接打开链接试玩的地方。我选了魔搭社区的创空间(Spaces),原因很简单:这款游戏是纯前端的,没有服务器、没有数据库、没有用户系统,构建产物就是一个 dist 文件夹(一个 index.html 加一堆 assets,包含 101 张美术素材,总共大约 118MB)。这种场景下,创空间提供的 Static HTML 类型 Space 已经够用,不需要去碰 Docker、不需要租服务器,免费额度也覆盖一个 Demo 的访问量。

 

整个部署只有四件事:构建产物准备 → 调好 Vite 的资源路径 → 在创空间网页上传 → 验证访问。下面按顺序展开。

 

6.1 构建产物:产出可以独立运行的 dist

让开发 AI 跑一次构建命令(Vite 项目就是 pnpm build),产物会输出到项目根目录的 dist/ 文件夹里。这个文件夹必须满足两个条件:

第一,dist/index.html 直接双击在本地浏览器打开能正常加载游戏。 如果本地双击都打不开(常见原因:图片路径写成了绝对路径 /assets/xxx.png),那上传到创空间也一样会白屏。先在本地确认能跑。

 

第二,资源引用必须用相对路径。 Vite 默认把所有静态资源的引用前缀写成 /,部署到创空间的子路径下时会全部 404。需要在 vite.config.ts 里加一行:

export default defineConfig({      base: './',   // 关键:让 dist 用相对路径引用所有资源      // ...})

完之后重新 build 一次,打开 dist/index.html 看 <script>、<link>、图片路径都是 ./assets/xxx 而不是 /assets/xxx,就对了。这一步是 95% 部署翻车的根因,先把这个雷拆掉再说后面。

6.2 创建创空间并上传 dist 文件夹

打开 modelscope.cn,登录后右上角头像旁边有个"+"按钮,点击 →"创建创空间"。

填基本信息的时候只关心两件事:

  • 空间名:英文小写 + 连字符,比如 niuma-dungeon(这会是访问 URL 的一部分,确定后改起来比较麻烦)

  • 可见性:先选 Public,调试通了再决定要不要切私有

 

注意:这一步不需要在创建表单里选 SDK 类型,新版创空间会在你上传完文件之后再让你选。提交后会直接跳进 Space 的文件视图,是一个空仓库。

 

 

接下来上传 dist:

  1. 打开 Finder,找到项目目录里的 dist 文件夹(不是进入它,而是选中这个文件夹本身)

  2. 直接把整个 dist 文件夹拖进网页的文件列表区域。新版创空间已经支持文件夹粒度的上传,平台会自动识别 dist 是一个静态站点的产物目录,并把里面的内容铺到根入口

  3. 弹窗里填一句提交信息,比如 init: upload MVP build,点确认开始上传

  4. 118MB + 一百多个文件,正常网络下大约 2 - 5 分钟。期间不要关闭浏览器标签页

如果上传中途卡住,刷新页面回来看已经上传成功的部分还在不在。在的话,把没传上去的那部分再拖一次即可(按文件粒度提交,不会因为中断就全部回滚)。

 

 

6.3 选 SDK:Static

文件上传完之后,页面会引导你进入"配置"或"设置"步骤,让你选这个 Space 用什么 SDK 来跑:

  • Static:纯静态托管,不会启 Python 进程,启动最快、最稳。这是我们要选的。

  • Gradio / Streamlit:会拉 Python 镜像跑后端服务,纯前端项目用不上,反而会拖慢启动。

  • Docker:自己写 Dockerfile,自由度最高但成本也最高,Demo 用不着。

选完 Static 提交,平台会立刻拿你刚上传的 index.html 作为入口发布出去。这一步替代了老版需要手写 README.md YAML 头(sdk: static / app_file: index.html)的环节,新版直接做到了表单里。然后点击确认并部署。

 

 

 

 

6.4 触发构建并访问

回到 Space 的"应用"标签,右上角的状态会从 Stopped / Building 变成 Running。Static 类型的 Space 没有真正的"构建"过程,平台只是把根目录的 index.html 直接发布出去,所以这一步通常 30 秒到 1 分钟之内就完成了。

状态变绿之后,"应用"标签的内嵌 iframe 里就会加载出游戏的开始界面。这时候做三件事:

  1. 在 Space 内嵌窗口里完整玩一局:开场 → 战斗 → 路线 → 商店 → Boss,看美术素材是不是全部加载出来了。如果发现某些图片显示成破损 icon,99% 是 6.1 节的 base 路径没改对,回去重新 build 再传一次。

  2. 打开浏览器开发者工具的 Console 面板,看有没有红色报错。常见报错是字体或音效文件 404(因为这些文件名带空格或中文),把对应文件改名重新上传即可。

  3. 复制顶部的访问 URL(形如 modelscope.cn/studios/你的用户名/空间名),换一台设备或者发给朋友试玩,确认外网可以正常访问

 

6.5 后续迭代怎么更新

游戏后续会持续打磨数值和补素材,每次发新版不需要重新走前面所有步骤:

  • 本地 pnpm build 出新的 dist

  • 进入 Space 的"文件"页面,把整个 dist 文件夹再拖一次,平台会逐文件做覆盖确认

  • 提交 commit 信息时写清楚这次改了什么,比如 balance: nerf elite HP +15%

 

整个迭代闭环大约 5 - 10 分钟一次,比传统的"打包上传服务器 + 重启"链路轻得多。如果后面发现网页拖拽不够顺手(比如一次要更新几十个文件),再切到 git push 路径就可以 —— 创空间本质上就是一个 Git 仓库,git remote add 之后 push 就行,但对 Demo 阶段来说网页拖拽完全够用。

 

部署能一路走到这一步顺利,本质上是在最开始就选对了路:纯前端 + 静态托管 + 创空间免费额度,把基础设施这部分需要决策的事情压缩到了最少。这也是我推荐想做 AI 辅助 Demo 的人优先考虑前端可玩样品的原因 —— 部署门槛趋近于零,节省下来的精力可以全部砸到设计和体验上。

 

七、踩过的坑与反思

7.1 UI 设计是返工重灾区

项目最大的返工不是代码 bug,不是数值问题,是 UI。

一开始我让 AI 直接生成 UI 代码,没有提前规划布局。AI 写出来的界面"能用",但布局是硬编码的——间距、字号、卡牌尺寸都是写死的。等到后期我要把占位素材替换成正式的美术资源时,问题就来了:卡牌纹理的尺寸和 AI 预设的容器不匹配,战斗背景的比例和屏幕对不上,手牌扇形排列的角度在 7 张以上时会溢出……每个替换都要反复调 UI,改一处牵动三处。

 

回头看,这个问题完全可以避免:先确定目标设备,再设计 UI。我的游戏是 Web 端,主要适配桌面浏览器(横屏),但我一开始没想清楚这件事。如果提前锁定"桌面 1280×720 最小分辨率",很多布局决策在写第一行代码之前就能定下来。

 

先参考同品类的头部游戏做 UI 设计。杀戮尖塔、月圆之夜、弈仙牌,这些游戏的战斗界面布局、手牌排列方式、信息层级都经过了大量打磨。我应该先截图分析它们的 UI 结构——手牌区多大、敌人区多大、信息栏在哪、能量球放哪——然后画一个简单的线框图,再让 AI 按这个布局去写代码。

 

先设计,再编码。我实际的流程是反过来的:AI 先写了能跑的 UI,我在上面贴素材,不合适的地方再让 AI 改。正确流程应该是:确定设备 → 参考头部游戏 → 画线框图 → 让 AI 按线框图实现。

 

这是我整个项目里投入产出比最低的环节,也是最希望后来者能避开的坑。

 

7.2 行在哪

速度。从零到可玩 Demo,核心开发时间大约一周。AI 协作不是省时间,是放大决策权。我没有对比ai开发会比手写代码快多少。但我做的决策密度比传统开发高得多——一天能决策十几个设计点。AI 把"做"的成本降到接近零,决策才成了瓶颈。所以你越擅长做选择,越能从 AI 协作里榨出收益。

 

美术成本归零。101 张素材如果外包,按游戏行业均价这也会是一个很大的开支。AI 生成的成本是 API 调用费,大约几十块。

 

文档是 AI 协作的隐形基础设施。我现在评估一个 AI 工作流是否健康,看的不是"AI 多智能",而是"文档体系多完整"。文档不是可有可无的产物——它是你和 AI 之间唯一可靠的通信协议。

 

7.3 不行在哪

复杂系统集成。AI 写单个系统没问题,但当 5 个系统需要联动时(比如战斗系统 + 遗物系统 + 难度递增 + 掉落规则 + 事件系统同时生效),AI 容易出现"改了 A 忘了 B"的问题。需要人工做集成测试。

 

游戏手感。AI 不懂"手感"——卡牌打出去的打击感、护盾叠加的爽感、精英战的紧张节奏,这些需要人来判断和调整(当然打击感这件事在现在的游戏还完全没有做)。AI 能算数值,但算不出"好不好玩"。

 

debug。当 bug 涉及多个文件、多个系统的交叉时,AI 经常找不到根因。我看不懂代码,只能反复描述现象让 AI 去排查,来回好几轮才修好。这个过程很折磨,是我觉得 AI 辅助开发目前最大的短板。

 

7.4 Vibe Coding 不是魔法

那种"我说一句话,AI 给我做完整个游戏"的视频,我看过很多,但是更多是复刻已经有的游戏。想要真正做出一款新游戏,是需要复杂任务拆到 AI 能干的程度,再用流程把它们串起来。即便如此,最终产物也只是 Demo,而不是商业游戏——AI 协作降低了"开始"和"做出可玩样品"的门槛,但它没有让"做完一款好游戏"这件事本身变简单,因为归根结底,好的游戏需要创意。

 

八、给想尝试的人的建议

  1. 先做设计,再写代码。和 AI 充分讨论机制、数值、体验,别急着让 AI 写代码。设计错了,代码写得再漂亮也是浪费。

  2. UI 先规划再动手。确定目标设备 → 参考同品类头部游戏的布局 → 画线框图 → 再让 AI 写代码。不要像我一样"先让 AI 写个能跑的,后面再调",

    调 UI 的时间比重写还长。

  3. 一次只做一件事。一个系统做完、跑通了,再做下一个。不要同时开 5 个系统。

  4. 设计 AI 和开发 AI 必须分开。设计讨论和代码实现混在同一个对话里,AI 容易边写边改设计,最后什么都没做完。

  5. 用文档管理 AI。设计文档 = AI 的记忆,任务文档 = AI 的行动指南。没有文档的 AI 开发 = 盲写。每份任务文档必须有"不做什么"和"降级方案"。

  6. 美术素材用工业化流程。统一风格锚定 → 分类生成 → 逐张质检 → 即时入库。不要"先生成 100 张再挑",你会发现风格不统一。

  7. 接受不完美。AI 生成的代码不是最优解,AI 生成的素材也不是艺术品。但它能用、能玩、能上线。对于个人项目,80 分就发车,别追求 100 分。

 

 

 

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐