前言
最近公司有个对外大模型项目要在离线环境下运行,这断网虽说不影响敲代码,但影响摸鱼啊。刷不了微博、看不了视频,连划水都划不出水花,那叫一个坐立难安。
不过闲得发慌的时候,笔者发现一个有意思的现象:不少同事的电脑中都藏着几个AI 搓出来的单机小游戏------五子棋、贪吃蛇、2048,代码短小精悍,双击 HTML 就能玩。断网无聊时刻,全靠它们续命。
说实话,这种"动动嘴就让 AI 写个玩具"的体验,真的很上头。几句话下去,一个能跑能玩的小东西就出现在屏幕上。但光写五子棋、国际象棋这些"标准答案",总觉得差点意思,我还是想玩点更有创意的。
正巧这几天刷公众号,看到字节火山引擎刚更新了 Doubao-Seed-Evolving,宣传里说代码能力和多轮调优都取得长足进步。那笔者就正好利用这段时间,认真测一测:这模型到底能不能从零攒出能玩、好玩、耐玩的小游戏合集?
一、环境准备:把搓游戏的工具备齐全
动手之前先把开发环境备好
1. 注册火山引擎账号
去火山方舟注册一个账号,在模型广场找到 Doubao-Seed-Evolving 模型,创建好 API Key,开通模型服务。


2. IDE接入Doubao-Seed-Evolving模型
这次笔者使用的 Vibe Coding IDE同样是 Trae,平时用得比较熟练。打开 Trae 的模型管理页面,选择"新增自定义模型":

点火山引擎那一栏,选 Doubao-Seed-Evolving,然后把刚才拿到的 API Key 填进去。配置完,Trae 的 Agent 对话框里就能直接选 Seed-Evolving 模型了:


到这步,开发环境就齐活了。接下来就是真正"使唤"它的时候了,测测这模型到底能不能把笔者的那些游戏创意写出来~
二、小试牛刀:2D的Flappy Bird游戏,一次跑通
第一个游戏笔者选了最熟的 Flappy Bird。小时候躲在被窝里、在爸妈手机上偷偷玩的游戏之一。一只圆滚滚的小黄鸟,点一下扑腾一下,穿过绿色水管就得分。规则简单到离谱,但就是停不下来。
长大后再玩,总觉得少了点什么------一个人刷分,没人较劲,乐趣少一半。
所以笔者给模型提的需求是这样的:
"帮我用原生 HTML/CSS/JS 写一个 Flappy Bird,保留经典玩法,但加一个双人对战模式,两个人可以在同一个键盘上各控制一只鸟,比谁先死。"
但有个经验之谈:千万别把这种"大白话"直接丢给智能体。
我自己的习惯是,先让一个擅长文本处理的大模型(比如 DeepSeek)帮我把需求整理成结构清晰的 Prompt,再喂给写代码的模型。这一步看起来多花了两分钟,实际上能省下好几轮返工的时间。(相关经验笔者曾在博客文章: LangChain1.0实战之多模态RAG系统(四)------Trae Solo搭建部署多模态RAG前端(附AI编程实践指南)中分享)
DeepSeek 整理后的 Prompt 大概是这样的结构(完整版在文末 Github 源码里):
python
你是一名资深Web游戏开发工程师,精通HTML5、CSS3、JavaScript及Canvas 2D。
需要完整复现经典游戏Flappy Bird,并扩展双人对战模式。
一、游戏核心机制(参考原版Flappy Bird)
二、模式一:单人模式
三、模式二:双人模式(核心扩展)
四、功能与交互要求
结构清晰多了。我把这个 Prompt 喂给 Trae 里的 Doubao-Seed-Evolving。 按笔者以往用其他模型的经验,这种带状态管理、碰撞检测、两套输入逻辑的游戏,一般需要修改三四轮------要么两只鸟的物理参数不一样,要么碰撞盒算歪了。
但这次Doubao-Seed-Evolving 模型的效果比较惊艳, 第一次返回的代码,直接就能跑。 Seed-Evolving 把代码拆得很规整:bird.js 管小鸟的物理和动画,pipe.js 管水管的生成和回收,game.js 负责主循环和碰撞检测,main.js 管菜单和模式切换。双人模式下,一只鸟用空格键,另一只用 W 键,各自有独立的重力、速度和得分且具备相同的竞技环境。

男生那种奇怪的竞技心一下子被勾起来了。我拉着旁边同事试了一局,他用 up 我用 W,两只鸟在水管间上蹿下跳,最后我以两分之差惜败。那种"我明明能赢再来一把"的感觉,跟小时候趴在电脑前一模一样。

三、全面升级:3D城市赛车,稍有不顺
2D 游戏毕竟是平面的,数据结构和渲染逻辑都相对直接。我想给模型上点强度,于是把目标转向了 3D。
选赛车的动机很简单------打工人嘛,总想着去远方看看。东京的霓虹灯、黄昏时分的城市天际线、这些画面在脑海中循环了无数遍,现实中却总被工作、假期、预算各种拦住。
于是我提的需求是这样的:用 Three.js 做一个 3D 赛车躲避游戏,双向两车道,躲前方来车,速度随时间递增,要有城市天际线做背景,玩家输入城市名就自动加载对应的全景图。
还是老规矩,先让 DeepSeek 帮我润色成结构化 Prompt,然后喂给 Seed-Evolving。
你是一名资深Web 3D游戏开发工程师,精通Three.js、WebGL、JavaScript(ES6+)以及前端工程化。现在需要你开发一款3D城市赛车躲避游戏,核心机制围绕"沉浸式驾驶体验"和"动态难度递增"展开。请严格遵循以下需求完成开发:
一、游戏核心机制
二、沉浸式背景(核心亮点)
三、控制与交互
四、技术实现与项目结构
性能优化:
不过这一次输入后,没有直接成功,遇到了如下两个坑:
第一个坑是全景图加载 。模型一开始用的是 Wikimedia Commons 的图床,逻辑上没问题------搜城市名、拿图片、贴到天空球上。但实际一跑,北京、上海怎么都加载不出来,控制台一片红。排查了半天才发现,模型请求图片信息时漏了一个参数,导致拿不到图片宽高,所有候选图都被过滤掉了;就算拿到了,upload.wikimedia.org 在国内网络下还会超时。
第二个坑更隐蔽,是坐标系方向。一按开始,车子不是冲向屏幕深处,而是朝着我(摄像机)的方向"倒车",而且开着开着整辆车就飞出了天空球的范围,背景变成一片虚空。玩家车的运动方向是 +Z,摄像机也在 +Z 朝 -Z 看,路面却往 -Z 滚动,三个方向没对齐;更要命的是玩家坐标一直在累加,而道路是围绕原点循环的,开得越久离道路越远。
这种 bug 其实特别考验模型。它不是语法错误,也不是 API 用错了,而是对 3D 空间关系的理解出了偏差。换我是模型,光靠文字描述可能也很难脑补出这个画面。
不过 Seed-Evolving 的定位能力还行。我把现象描述给它,它能定位到问题在哪,然后给出修正方案:玩家固定在原点,让整个世界向身后滚动,所有道路块和建筑用模运算循环回收。
前前后后改了三四轮。方向对了、车不飞了、敌车生成逻辑也调顺了,还顺手把"左右车道不同时刷车"这个避免死局的机制补上了。
修复完之后的效果是这样的:黄昏的天空、远处错落的城市剪影、车灯在路面上拖出光带,敌车从前方驶来又从身后消失,速度表的数字一点点往上跳。输入"东京"如果能加载到全景图,还真有那么点首都高漂移的味道。

回过头看,虽然花了点功夫,但这件事让我对 Seed-Evolving 有了更立体的认识:它写常规逻辑很稳,但一旦涉及空间想象、第三方资源、网络环境这些"脏问题",还是需要人在回路里盯着。 这不是缺点------没有哪个工程师能不调试就上线。关键是它能不能听懂你的反馈、在多轮对话里持续收敛。这一点,它做到了。
四、美中不足:大模型在找资源这件事上,还可以做的更好!
做完 3D 游戏我有个明显的感受:大模型写代码本身已经相当能打了,但在"找资源"这件事上,还有不小的差距。
比如 Flappy Bird 项目里,Prompt 明确让它去网上搜像素风素材并下载到本地,结果它还是习惯性地用 CSS 和 Canvas 画了一只小鸟出来。能用,但不好看。
赛车游戏里也是。模型调了 Wikimedia 的公开 API 来搜城市全景图,方案本身没问题,但它不会主动判断这个图床在国内能不能访问、返回的图片比例适不适合做天空球。它只负责"把逻辑写对",至于"这个逻辑在真实网络环境下跑不跑得通",它不管。
这让笔者意识到一件事:代码逻辑是确定性的,但和真实世界打交道是不确定的。 资源加载超时怎么办?CDN 被墙了怎么办?图片格式不对怎么办?这些"脏活累活",目前的模型还不太会主动处理。
但这并不是吐槽。相反笔者觉得这是下一代 Coding Agent 最值得补强的方向。如果哪天模型能自己完成"搜资源 → 验证可用性 → 失败回退 → 换方案"这整套动作,那它才真正像一个工程师在干活,而不是一个只会写代码的工具。现在嘛,这一步还得自己来。
五、再造童年:4399回来了!
两个游戏做完,电脑里多了两个文件夹。每次想玩都得开命令行、输路径、切来切去,打开前那股兴奋劲已经消了一半。
突然想起小时候------那时候打开hao123 网址之家,找到4399小游戏,橙色的页面哗地弹出来,花花绿绿的小游戏图标挤满屏幕,排行榜上全是"爆款""热门""大家都在玩"。
要不,我也搓一个?我把需求丢给模型:做一个 4399 风格的小游戏平台首页,顶部橙色导航栏带 Logo 和搜索,下面是轮播 Banner,左侧分类栏和排行榜,中间是游戏卡片网格,点卡片用 iframe 打开游戏,还要有返回大厅、全屏、重玩按钮。
大概过了一小会儿------说实话我中间去倒了杯水------回来的时候,一个橙色的、看起来还真像那么回事的游戏平台已经摆在屏幕上了。
橙色主题色、卡片悬停上浮的动效、轮播图自动播放、分类联动、搜索实时过滤,甚至响应式布局都一并做好了。有那么一瞬间我恍惚了一下,那个粗糙的、热热闹闹的、属于小学暑假的网页,好像真的回来了。

不过更让笔者兴奋的是它的扩展性------以后每让模型写一个新游戏,只要往game.js文件里加一个配置,它就会自动出现在这个平台上,有封面、有分类、能搜索、能上榜。这种感觉就像小时候往游戏机里塞新卡带,你知道这个收藏会越来越大,能玩的东西会越来越多。
以上完整代码大家可见:github.com/TangBaron/4...
六、写在最后
一个小时、两个游戏、一个平台。平心而论,Doubao-Seed-Evolving 的表现超出了笔者的预期。一开始笔者只是想测测它能不能写点像样的东西,结果它不光写了,还让我在工位上玩了一下午,拉着同事比了两局。
从今天的表现来看,它更像一个反应快、基础扎实、但偶尔会在空间几何和网络资源上翻车的新人工程师。常规需求一次过,复杂需求多聊几轮也能收敛。关键是你得知道怎么跟它描述问题、怎么验证它给的结果、在它卡住的时候给它指对方向。
现在关于"AI 会不会取代程序员"的讨论很多。做完这一整套东西,笔者的感受反而更平静了。真正重要的从来不是写代码这一个动作,而是你想做什么、为什么做、做成什么样才算好。 Flappy Bird 是因为怀念小时候和朋友较劲的快乐,3D 赛车是因为心里藏着个去远方看看的念头,4399 是因为想找回那个打开浏览器就能兴奋一下午的童年。
这些动机、审美和判断,模型替不了你。但它能让你从"有个想法"到"有个能玩的东西"之间,少熬好几个夜。最后,还是那句话------
技术造不出童年,但它可以帮你,把童年再造一遍。