其实这篇文章的正经标题是:我用 K3 复刻《植物大战僵尸》 !

我大概花了 48 个小时,33 轮对话,457 次工具调用。消耗了 3.3 亿 Token(缓存 3.25 亿)!
最终的复刻效果也非常满意:

当然,我标题里说的宇宙无敌,显然是开玩笑的!
主要原因还是现在不能说 K3 不好,那我就使劲夸呗!上一篇说了一句《K3 改 Bug 越改越多》,有人就受不了,说我不懂提示词,不懂开发,没有截图肯定是假的,我只能说呵呵了。
这种感觉,就像当年不能说 DeepSeek 不好一模一样。你要是提出不同意见,轻者说你不专业,故意抹黑,重者说你立场有问题。我真的太讨厌这种"傻叉"了!把一个单纯的技术问题,包装成奇怪的爱的概念,然后狐假虎威。
好了,吐槽说完了。我就认真地说一句我自己的内心想法。
抛开那些第三方的过度营销、过度美化,我本身非常喜欢 DeepSeek 的态度、风格、理念。我也是非常喜欢梁文锋的。目前技术还差点意思,是事实,但是便宜、实用,一直在往既定目标努力,值得尊敬。
Kimi 我也不讨厌,它给我一种很年轻、充满活力的小清新的感觉。尤其是 K3 出来了之后,贵是贵,慢是慢,强也确实是强了(当然,也不能忽略和顶级模型的差距)。
我发现很多人是没法直视差距的,他们就喜欢赢,今天我就不比来比去了。就单纯给 K3 吹一波牛逼!
因为这几天有点忙,精力有限,写文章也比较克制。我想了想,做人可以低调点,写文章还是可以嚣张一点的,心中没有那一口气,和死了没两样。
好了,这么长的铺垫,就证明这篇文章也会很长。喜欢论输赢,说是非的可以散了。后面我们要讨论技术和事实了,你们没耐心看,也看不懂的。
真正想了解一下 Kimi K3 的,非常欢迎继续阅读。
为了便于大家进入状态,我先来分析一下最终结果:
然后再来聊一聊 K3 的制作过程。
大部分人只喜欢看结果,其实过程才是最重要的。因为过程决定了结果!
接下来,我完整的分享一下对话过程。这个过程主要是按时间线来进行记录,可能会有点混乱,但是都是非常真实的过程。
以免有人说我不懂提示词(太搞笑了),不会知道 CLI,我先截个图:

我用的是官方 CLI,KimiCode 版本号 0.28.1,模型是 K3,启用 thinking,默认应该是 Max。
1、探讨
万事开头难啊,这一步我可以写的详细一些。
其实面对这种复刻项目,最关键的还是要确认:模型是否知道《植物大战僵尸》,它是否知道有类似的开源项目,能否找到并理解代码,然后理清楚游戏玩法,声音素材,图片素材等。
基于这个思路,我问的前三个问题是:
你知道植物大战僵尸么?
这个游戏是不是网上有类似的开源项目?
网页版的有哪些项目
从回答来看,很显然它已经大致上理解这个游戏了。我把它回复的关键内容抽出来:
markdown
《植物大战僵尸》(Plants vs. Zombies) 是 PopCap Games 在 2009 年推出的塔防游戏:玩家在草坪上种植各种植物(向日葵产阳光、豌豆射手攻击、坚果墙防御等),抵御一波波来袭的僵尸。后来还出了续作、移动端版本等,是一款非常经典的休闲游戏。
PopCap 官方从未开源过原版游戏的源码,所以网上这些都是爱好者/学习者的复刻版,覆盖了几乎所有主流技术栈。比较有名的几个:
- Python / Pygame:marblexu 的 PythonPlantsVsZombies(pypvz),实现向日葵、豌豆射手、白天/夜晚关卡,代码结构清晰,适合学习。
- C++ 高还原版:PvZ-Portable,目标还原《植物大战僵尸:年度版》;另外还有 Cocos2d-x、Qt 等重制版本。
- Unity:PvZ-Unity,还原度较高,并加入新植物、新僵尸等扩展内容。
- HTML5 / JS:纯前端实现,浏览器直接运行,适合做网页版参考。
- Java / JavaFX:课程项目版本,包含白天/夜晚模式和基础关卡。
- C / Raylib:ZombieGardenTD,使用 C 开发的 PvZ 风格塔防游戏
需要注意版权边界:这些项目的**代码**通常是开源协议发布的,但原版的素材(贴图、音效)版权归 EA/PopCap 所有
一点提醒:这类网页项目多数是小体量练习作品,往往缺少存档、波次设计、卡片冷却等完整机制,而且贴图/音效如果直接取自原版游戏,商用或公开分发会有版权问题。
如果你的目标是做一个自己的网页版,有两个路线:
直接 fork 上面某个项目改(快但受限于它的结构),或者我帮你在 `PVZ` 目录从零搭一个原生 JS 的骨架(网格、阳光经济、种植、僵尸出怪、子弹碰撞),几百行就能跑起来。你想走哪条?
第四轮我就直接提出需求了:
我希望能做一个网页版的,在玩法,界面,角色,声音都和官网版几乎一致,你可以自动在网上找相关的素材。我不限制你,用任何方法都可以。从零开始,先实现前面十关。
我是让它从零开始做,其实 AI 也喜欢从零开始做。
它根据我的需求制定了一个目标:
从零做一个网页版 PvZ,画面、玩法、音效尽量贴近官方版,先实现冒险模式前 10 关。
然后编写了 SPEC.md 文件:

它也再次做了版权上的声明,目前国产模型大概率只会提醒一下,不会拒绝执行。(这是好事情啊,哈~)
Opus 之前好几次说"我理解,但是我不同意,我不干"!😄 我 O 哥不是无情的执行机器,它是有脑子、有主见的 Coding 助手,一旦它说不干,你就没法说服它了。
规划做好之后,接下来就进入全自动模式了:
markdown
**助手**(07-22 17:29:30):
直接搜音效站太零散,我从两个网页版开源项目里找音频资源更靠谱。
**助手**(07-22 17:32:55):
音效很全。还缺白天关卡的背景音乐(原版叫 Grasswalk),再找一下。
**助手**(07-22 17:39:31):
素材齐全,连保龄球的红坚果都有。现在把所有需要的素材拷贝进项目,并检查铲子图标。
**助手**(07-22 17:42:37):
素材全部就位(650 张图片帧 + 40 个音频)。接下来写实现规格文档,然后开工写引擎。
**助手**(07-22 19:37:03):
两个阶段都完成了。我自己再抽查验证一遍,并看几张截图确认效果。
**助手**(07-22 19:40:09):
截图时机太早(还在加载)。加 `--virtual-time-budget` 让页面跑完加载再截。
**助手**(07-22 19:41:57):
完成了。网页版《植物大战僵尸》前 10 关已经能从头玩到尾。
从输出来看,它整个思路还是非常清晰的,除了上面的内容,还帮我总结了,告诉我具体做了什么以及做了哪些验证。
这个工作量还是蛮大的!光收集和整理上千的图片和音频素材,就是一个大工程。
更何况是要用代码把业务逻辑和素材串联起来。
最终的结果也是非常不错!

十个关卡全部可玩,音效、背景、角色,也算是原滋原味了。同样的玩法,用 SVG 和用原版素材,体感上真的会差很多啊。声音、图片和玩法缺一不可。
2、V1修复和50关决策
首轮搞完,整体来说非常不错,但是也有几个小问题。
比如开始的画面,模式入口位置没有放对:

首个版本是放在了红色框中,这个截图是调整完之后的版本!
另外还有几个问题:

太阳花的地方 250 这个数值的位置明显不太对。另外胜利后的植物位置也不对。
还有整个角色和地图有一些错位:

缺少波次进度条!
我把这些问题,一次性告诉了它。它一轮搞定,没有反复!这个执行力还不错。
另外我发现它首次加载很慢,要加载 600 多个文件(后来是 3480 个文件)。

我就问了下加载的是什么,是本地加载么?如果放到服务器上会怎么样,以及如何优化。
整体来说东西还挺多,文件量多,文件也不小。
它给出的解决方案是:
如果以后嫌首次加载慢,可以做的优化(按收益排序):
把逐帧 PNG 合并成雪碧图(请求数从 650 降到几十个)、
PNG 转 WebP(体积能砍一半以上)、
按关卡懒加载(首屏只加载主菜单+前几关素材)
每一条思路都是非常精准且有效的!
我评估了一下,传到网站上流量还是有点费的,可能没法直接和大家分享了。
因为前 10 关做得都不错,几个问题修复得也挺好的。我感觉它已经理解并实现了整个游戏的核心机制。所以我就跟它探讨了一下这个游戏总共有几关?能否帮我全部实现?
它的回答是:
原版(PvZ1 年度版)的冒险模式是 50 关:5 个场景 × 10 关------白天前院(1-x,就是我们做的这 10 关)、夜晚(2-x)、泳池(3-x)、浓雾(4-x)、屋顶(5-x),最后一关 5-10 是僵王博士 Boss 战。冒险模式之外还有 20 个小游戏、解谜(砸花瓶/我是僵尸)和生存模式,通关后还有二周目。一般说"全部关卡"指冒险 50 关。
应该大差不差,我也记不太清楚了。它能说出这么多关卡,应该是胸有成竹了。
让它分析了一下工作量:
| 场景 | 新增内容 | 引擎改动 | 预估量 |
|---|---|---|---|
| 夜晚 2-x | 8 种蘑菇、墓碑;报纸/铁门/橄榄球/舞王僵尸;2-5 砸僵尸关 | 小(无天空阳光、蘑菇白天睡觉) | 中偏小 |
| 泳池 3-x | 6 行含 2 条水路;睡莲/水草/香蒲;鸭子/潜水/海豚/冰车僵尸 | 中(水路格子、两栖判定) | 中 |
| 浓雾 4-x | 雾区渲染;灯笼草/三叶草/磁力菇/仙人掌/杨桃;气球/跳跳/矿工僵尸 | 中(雾 + 驱散) | 中 |
| 屋顶 5-x | 斜坡+花盆;投手家族(卷心菜/玉米/西瓜);保护伞/大蒜/咖啡豆;蹦极/扶梯/投篮/伽刚特尔 | 大(抛物线弹道、斜坡落点、花盆前置) | 大 |
| 5-10 Boss | 僵王博士(低头吐球、踩车、放僵尸) | 单独机制 | 单项最大 |
它的总结是,大概是前面 10 关的 2~3 倍工作量。我觉得可以接受,那么就直接开干了!
3、50关收官和交互修复
因为目标明确且清晰,所以这个过程也是全自动完成。

可以看到已经有五个大的关卡可以选择了。由于我太菜,还没有全部验证。但是我看到它自己的验证目录里放过了一些图片,可以作为参考。
夜晚:

泳池:

屋顶:

大致的内容应该在了,但是也有肉眼可见的错位。
这一轮做完之后,我发现还有一些问题:

选中卡片无法右键/空白取消、铲子没反应、1-10 像无尽打不完;选卡界面卡多时无法取消选择,缺右下角波次进度条、植物/割草机与背景错位
这些问题,也一并让它修复了一下!只要你能把问题描述清楚,它基本上一轮搞定。
4、无尽模型和细节修复
50 关完成之后,我就问它除了冒险模式之外,还有哪些模式,然后挑了一个好做的无尽模式!
这一轮主要实现无尽模式:

中途也是自主完成,我全程没有干预,我也没有说规则,主要是我也记不清楚了。
然后在玩的时候,又发现了一些之前遗漏的问题:
- 土豆雷长出来后不爆炸被吃掉
- 寒冰豌豆命中后出现大方块
- 1-5/1-10 胜利面板中间空白
- 无尽模式地图与角色错位
经过几轮对话,这些问题都顺利解决了!
5、加载优化
可能是这款游戏的数据比较丰富,所以整体来说完成得还是比较顺利的。无非就是时间和 Token 消耗得多一点。
基础功能已经实现了,我就准备让它根据之前的优化建议来进行加载优化了。主要优化方向,就是减少资源的请求数量和压缩图片资源。
处理与结果如下:
原版资源备份至 assets_original/(91MB 完整副本);
四项优化全部落地:
图片请求 3865→305、
图片体积 57MB→21.7MB、
首屏 4 请求 0.5MB 进菜单、SW 缓存。
过程中修掉懒加载失效、305 图并发解码 OOM、单线程 http.server 卡死三个隐藏问题!
这一点非常好,它修改的时候,可以把一些相关的错误顺手修正好。
6、对话记录和文档
我大致看了一下,完成度已经可以了。就让它帮我整理了我们完整的对话记录,以及给这些对话做摘要,最后生成了一个完整的项目介绍文档。
同时探讨了一下 WebP 加载的问题,以及 Opus 编码、OGG 容器这些问题。
在处理文档和记录的时候,它发现原来完整记录了 Token 的消耗情况,我就让它帮我整理了一下。
总的来说,就是输入 582 万,输出 64 万,缓存 3.3 亿。
整理的过程中,我也看了一下目录结构:

整体来说,结构和模块设计都很清晰。单文件最大 1000 多行,粒度控制也不错。
自我验证做的也可以:

可以看到 Shots 目录下有大量的截图。K3 的多模态,应该在国内也是数一数二了,这是它的优势,它可以通过截图来验证游戏画面是否正常。这么一来可以省掉很多人工。
DeepSeek 和 GLM 的多模态已经迫在眉睫了!
Kimi 还是挺爱写 Python 脚本的:

它为这个场景写了一个 .py 的工具脚本!从命名来看就非常清晰了。
总结
这一波做得还是非常好的!无论是任务编排,还是代码结构,抑或验证逻辑,都体现了较高的工程水准。Kimi 在复刻能力方面,相比同行来说应该也是非常优秀的存在了。
整个过程中,没有给过我压力,也几乎没有反复,大部分工作都是自主完成。所以单就这个例子来讲,确实可以吹一波了。然后我发现它的上下文好像一直保持在 10 几万,几乎没有上去过,这一点很有意思。Opus 是很容易干到 20 万以上的。
如果大家有兴趣,也可以用同样的思路去玩一玩,或者测一测其他模型,看看完成度怎么样。这个例子,我只在 K3 和 Fable 5 上跑了下。两个都是直接搞出了能玩的效果。
除了植物大战僵尸之外,我同时还在搞两个"大项目"!
一个是红色警戒,一个是帝国时代。都是曾经超级无敌火爆的经典游戏,也非常庞大,光阵营、角色、地图就可以让你头大。
这两个,真的太难了。
上次那个谁说一轮就搞出来的,我严重怀疑它是骗我的!要么就是直接找了一个开源项目,把资源包导入进去,直接开玩那种。
我感觉帝国时代有戏啊:

《血战城堡》已经被我搞得有模有样了。
来日方长,慢慢分享,今天就这样吧!