大家都说用OpenClaw和Hermes等AI工具可以写代码写游戏,但这也不是网传的那么简单,一句话帮我写一个xxx游戏AI就可以直接完成的,它写出来的可能不是你想要的,除非是一些超级简单的游戏(如:贪吃蛇,2048这种)。稍微复杂的游戏或项目,核心还是你自己要有清晰的想法和迭代意愿,AI是超级助手,不是全自动工厂。设计文档比代码重要,我们先要确定自己想要什么,完善好游戏设计文档。
一、写游戏设计文档
先确认好游戏类型,写一个极简的游戏项目文档,可以让AI给个文档模板,或直接让AI以询问问答的方式来一起完成,IA会写先理个模板,让要需要你填写的部分以选择或询问的方式问出来,回答完成后可以让AI生成一份游戏项目文档了。
写一个2D肉鸽游戏,用引导询问的对话方式,帮我完成游戏设计文档

二、游戏项目文档
根据AI完善的游戏项目,并保存到本地文件中,基本包含以下内容:
1. 项目基础信息
- 游戏类型:第三人称射击+肉鸽(Roguelike)
- 核心玩法:
- 1~4人组队进入随机生成的地牢关卡
- 玩家控制角色在固定视角内移动和射击,每层清怪→选技能/遗物→下一层→Boss战→结算
- 肉鸽核心:随机关卡生成 + 获得金币/随机奖励 + 单局死亡重开
- 单局时长:15-30分钟
- 技术栈:
- 服务端:Go 1.26.2+(
gorilla/websocket),登录用HTTP,游戏内用WebSocket - 客户端:Cocos Creator 3.8.x + TypeScript
- 通信协议:Protobuf + WebSocket(二进制帧)
- 存储:PostgreSQL(业务数据)+ Redis(在线状态/房间缓存)
- 部署:Docker分离部署
- 服务端:Go 1.26.2+(
- 目标:商业化,首期交付可运行Demo(支持4人联机+2层地牢+3种技能)
2. 服务器架构设计
采用分阶段演进策略,先单进程跑通,再按需拆分微服务:
2.1 两个阶段的架构图
阶段 1(Demo版):单进程 monolith
┌──────────────────────────────────────┐
│ GameServer (单进程) │
│ ┌─────────┐ ┌───────────────────┐ │
│ │ HTTP │ │ WebSocket Handler │ │
│ │ (登录) │ │ (游戏逻辑) │ │
│ └─────────┘ └───────────────────┘ │
│ ┌─────────────────────────────────┐ │
│ │ RoomManager (房间管理/内存) │ │
│ │ BattleLogic (战斗结算) │ │
│ │ DungeonGenerator (关卡生成) │ │
│ └─────────────────────────────────┘ │
│ ┌─────────────────────────────────┐ │
│ │ PostgreSQL (持久化) │ │
│ │ Redis (在线状态/房间缓存) │ │
│ └─────────────────────────────────┘ │
└──────────────────────────────────────┘
阶段 2(上线版):按需拆分微服务
┌──────────┐ ┌──────────┐ ┌──────────┐
│ LoginSrv │ │ GateSrv │ │ GameSrv │
│ (HTTP) │────>│ (WS网关) │────>│ (大厅) │
└──────────┘ └────┬─────┘ └──────────┘
│ ┌──────────┐
└──────────>│ RoomSrv │
│ (战斗) │
└──────────┘
2.2 服务职责
| 服务 | 职责 | 通信方式 |
|---|---|---|
| LoginSrv | 注册/登录/Token签发 | HTTP(对外) |
| GateSrv | WS连接管理/心跳/路由转发 | WebSocket(对外)+ gRPC(内部) |
| GameSrv | 大厅/背包/技能/活动/排行榜 | gRPC(内部) |
| RoomSrv | 房间生命周期/战斗逻辑/关卡生成 | gRPC(内部) |
| ConsoleSrv | 后台管理/数据统计/封禁 | HTTP(内部管理) |
2.3 存储选型
| 存储 | 用途 | 选型理由 |
|---|---|---|
| PostgreSQL | 玩家数据/背包/技能/充值记录 | 关系型数据,事务支持,成熟稳定 |
| Redis | 在线玩家列表/房间状态缓存/匹配队列 | 高频读写,TTL自动过期 |
| 日志 | 结构化日志输出到文件,按天轮转 | Demo阶段不需要Kafka,文件+ELK即可 |
3. 客户端模块划分
3.1 场景架构
Cocos Creator 项目结构:
assets/
├── scenes/
│ ├── LoginScene.scene # 登录/注册
│ ├── LobbyScene.scene # 大厅/匹配/背包
│ ├── DungeonScene.scene # 地牢战斗(核心)
│ └── SettlementScene.scene # 结算/技能选择
├── scripts/
│ ├── network/
│ │ ├── WebSocketManager.ts # WS连接/重连/心跳
│ │ ├── ProtoManager.ts # Protobuf编解码
│ │ └── MessageDispatcher.ts # 消息路由
│ ├── managers/
│ │ ├── GameManager.ts # 全局状态单例
│ │ ├── AudioManager.ts # 音效/BGM
│ │ ├── PoolManager.ts # 节点池复用
│ │ └── EventManager.ts # 事件总线
│ ├── battle/
│ │ ├── BattleController.ts # 战斗主控
│ │ ├── PlayerController.ts # 玩家输入→指令发送
│ │ ├── EntityStateSync.ts # 状态帧接收→插值渲染
│ │ └── SkillSystem.ts # 技能表现/特效
│ ├── dungeon/
│ │ ├── DungeonGenerator.ts # 接收种子→生成地图
│ │ ├── RoomLoader.ts # 房间模板加载
│ │ └── MonsterAI.ts # 怪物表现层AI
│ ├── ui/
│ │ ├── HUDPanel.ts # 血条/技能栏
│ │ ├── SkillSelectPanel.ts # 技能三选一
│ │ └── SettlementPanel.ts # 结算面板
│ └── data/
│ ├── ConfigTables.ts # 配置表加载(技能/怪物/关卡)
│ └── PlayerData.ts # 本地玩家数据缓存
└── resources/
├── prefabs/ # 预制体
├── textures/ # 贴图
├── audio/ # 音频
└── anim/ # 动画剪辑
3.2 网络层设计
WebSocketManager(单例,场景切换不销毁):
├── 连接管理
│ ├── connect(url, token) # 带Token的WS握手
│ ├── disconnect() # 主动断开
│ └── reconnect() # 自动重连(指数退避,最多5次)
├── 心跳
│ ├── 每15秒发送 C2S_Heartbeat
│ └── 30秒无响应触发重连
├── 消息收发
│ ├── send(msgId, payload) # Protobuf编码→发送
│ └── onMessage回调→MessageDispatcher路由
└── 断线恢复
├── 本地缓存未确认指令队列(最多50条)
└── 重连后发送 C2S_Reconnect(roomId, lastFrameSeq)
3.3 数据驱动
- 战斗内:轻量ECS模式(Entity=节点,Component=脚本组件,System=BattleController调度)
- 战斗外:传统MVC(Manager管理数据,UI面板监听刷新)
- 不引入第三方ECS框架,直接用Cocos Creator原生Component
4. 通信协议设计(Protobuf)
4.1 消息分类与编号
| 范围 | 模块 | 消息ID范围 |
|---|---|---|
| 1000-1099 | 登录/认证 | C2S_Login, S2C_LoginResult, C2S_Heartbeat |
| 1100-1199 | 大厅/匹配 | C2S_JoinRoom, S2C_RoomInfo, C2S_Ready, S2C_GameStart |
| 1200-1299 | 战斗同步 | C2S_PlayerInput, S2C_BattleFrame, S2C_DamageNotify |
| 1300-1399 | 技能/遗物 | C2S_SelectSkill, S2C_SkillOffer, S2C_RelicAcquired |
| 1400-1499 | 掉落/结算 | S2C_DropItem, C2S_PickUp, S2C_Settlement |
| 1500-1599 | 背包/商店 | C2S_OpenBag, S2C_BagInfo, C2S_BuyItem |
4.2 关键消息结构
// ===== 登录 =====
message C2S_Login {
string account = 1;
string password = 2; // 客户端SHA256后传输
int32 platform = 3; // 1=Windows 2=iOS 3=Android
}
...
5. 肉鸽核心机制设计
5.1 关卡生成
地牢生成流程:
1. 服务端生成随机种子(dungeon_seed)
2. 基于种子确定:每层房间数、房间类型、怪物配置
3. 房间类型池:普通战斗 / 精英战斗 / 商店 / 宝箱 / Boss
4. 每层结构:入口 → [2-4个房间] → 出口(通往下一层)
5. 客户端接收种子 + 房间列表,渲染地图
5.2 技能系统
技能池机制:
- 初始:玩家选择1个基础技能进入地牢
- 每清完一层:从技能池随机抽取3个技能,玩家选1个
- 技能池:根据当前层数和已选技能权重计算
- 技能升级:相同技能再次选择 → 升级(伤害+30%/范围+20%)
- 技能稀有度:普通(60%) / 稀有(30%) / 传说(10%)
其他游戏系统功能,可以后面完善
6. 非功能要求
| 指标 | Demo阶段 | 上线阶段 |
|---|---|---|
| 并发连接 | 单机50 | 单机500 |
| 操作延迟 | < 200ms | < 100ms |
| 状态同步频率 | 10Hz | 20Hz |
| 断线恢复 | 2分钟内重连保留房间 | 5分钟 |
| 防外挂 | 关键逻辑服务端校验 | + 指令频率检测 + 行为分析 |
| 包体大小 | < 50MB | < 100MB |
| 内存占用 | 服务端 < 512MB | 单Room进程 < 2GB |
三、分阶段
等完善游戏文档后,就可以让AI开始写代码了,当然,也不能让AI一次全写完,也要分阶段。写完、测试验证后,然后再开始下一个阶段。安游戏可以简单分为几个步骤,一步一步处理,过程中也可以调整:
Phase 1:基础通信
- Protobuf协议定义(登录/房间/战斗/结算 全量消息)
- Go HTTP登录接口(注册/登录/Token签发)
- Go WebSocket连接管理(连接/断开/心跳)
- Cocos Creator WebSocketManager封装
- 登录场景UI + 连接测试
- 日志系统迁移至
github.com/zngw/golib/log
Phase 2:房间与同步
- 房间创建/加入/准备/开始
- 状态同步框架(服务端10Hz广播 BattleFrame)
- 客户端插值渲染(EntityStateSync)
- 玩家移动:输入→服务端计算→广播→插值显示
Phase 3:战斗核心
- 地牢关卡生成(种子→房间布局→怪物配置)
- 怪物AI(巡逻/追击/攻击)
- 伤害计算(服务端权威)
- 技能系统(释放/冷却/特效表现)
- 掉落物生成与拾取
- DungeonScene战斗场景
Phase 4:肉鸽机制
- 技能三选一(每层结算后触发)
- 遗物系统
- 死亡/观战/全灭结算
- 胜利结算 + 金币/技能解锁持久化
- SettlementScene结算场景
Phase 5:打磨与发布
- 断线重连恢复
- 音效/BGM
- 技能特效打磨
- 配置表系统(技能/怪物/关卡 Excel→JSON)
- Docker部署 + 打包发布
四、让AI开始执行
每个Phase拆成独立prompt,AI只做当前Phase的事:
项目背景:读取本地游戏项目文档
当前阶段目标:Phase1
要求:
1. 只实现当前阶段的代码,不要提前写后续阶段
2. 给出完整可运行的代码,不要省略
3. 每个文件标注完整路径
4. 提供手动验证步骤(怎么跑起来、怎么测试)
5. 遇到技术选型问题,优先选成熟稳定方案
输出格式:
- 文件清单 + 每个文件的完整代码
- 依赖安装命令
- 运行命令
- 验证步骤
完成后等我确认再进入下一阶段。
到此就可以一步一步开始写游戏了,只不过,OpenClaw和Hermes都不能编辑Cocos Creator 的UI,只能写代码,写好后要自己在UI中布局,调用代码。不过可以让AI生成一些可用的UI图片。
我现在已经写完Phase2了,边写边改边优化。。。
评论区