精选案例 · Agent / 实践案例
🎴 Cube Draft — 游戏王在线轮抽对战系统
这个案例围绕「🎴 Cube Draft — 游戏王在线轮抽对战系统」记录了一条真实 AI 实践线索,正文重点集中在「项目概述」「技术架构」,适合先按任务意图阅读再判断复用。
案例速读
README 标题「🎴 Cube Draft — 游戏王在线轮抽对战系统」下已经出现运行/配置路径、脚本或接口线索、结果证据,正文重点集中在「项目概述」「技术架构」,比纯概念介绍更适合进入精选阅读流。 这篇案例的阅读价值在于,它把真实任务、模型辅助过程和可迁移做法放在同一个上下文里,读者可以从 「🎴 Cube Draft — 游戏王在线轮抽对战系统」、「项目概述」、「技术架构」、「AI 辅助开发过程」 进入正文。
- 建议重点看 可参考其中的运行与配置路径、包含可迁移的命令、脚本或接口线索、已有结果或观测证据可用于判断复用价值。结合 Agent / 实践案例 和「任务驱动用户、AI 实践者」这一受众定位,它更适合作为任务检索后的精读材料,而不是只看一句短摘要后快速跳过。
- 正文目录和原始材料仍然是判断依据;导读只帮助你更快定位阅读重点。
- 看点
- 🎴 Cube Draft — 游戏王在线轮抽对战系统
- 读者
- 任务驱动用户、AI 实践者
- 复用
- 可参考其中的运行与配置路径
- 结构
- 12 个目录入口
原文内容
🎴 Cube Draft — 游戏王在线轮抽对战系统
项目地址:私有仓库
关键词:Node.js、WebSocket、WASM、ocgcore、neos-ts、ygopro 协议
项目概述
从零开发一套完整的游戏王(Yu-Gi-Oh!)在线轮抽(Cube Draft)系统,包含轮抽引擎、卡组构筑、卡牌数据库、在线对战等完整功能链。支持多人房间模式,所有流程均可在浏览器中完成。
技术架构
┌─────────────────────────────────────────────────────┐
│ 用户浏览器 │
│ ┌─────────────┐ ┌──────────────────────────────┐ │
│ │ 轮抽/组卡 UI │ │ neos-ts 图形化对战前端 │ │
│ │ (HTML/CSS/JS)│ │ (TypeScript/React) │ │
│ └──────┬──────┘ └──────────────┬───────────────┘ │
│ │ │ │
└─────────┼────────────────────────┼────────────────────┘
│ HTTP/JSON │ ygopro 二进制 WS
▼ ▼
┌──────────────────────────────────────────────────────┐
│ Node.js 后端 │
│ ┌──────────┐ ┌────────────────┐ ┌───────────────┐ │
│ │ 轮抽引擎 │ │ 对战桌管理器 │ │ ygopro 协议 │ │
│ │ │ │ (座位/卡组验证) │ │ 适配器/relay │ │
│ └──────────┘ └────────┬───────┘ └───────┬───────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────┐ │
│ │ DuelSession (ocgcore WASM) │ │
│ │ ┌───────────────────────┐ │ │
│ │ │ koishipro-core.js │ │ │
│ │ │ └─ libocgcore.wasm │ │ │
│ │ └───────────────────────┘ │ │
│ └─────────────────────────────┘ │
└──────────────────────────────────────────────────────┘
AI 辅助开发过程
Phase 1:从零搭建轮抽引擎
用时:约 3 天
描述:从空白项目开始,先搭建基础框架。AI 生成了 WebSocket 通信层、房间管理和基本轮抽逻辑(卡包分配、轮转选牌、计时器)。这部分 AI 出力最大,因为需求描述可以非常精确。
典型 Prompt:
“用 Node.js 写一个 WebSocket 房间管理器,支持创建房间、加入房间、离开房间。房间有 owner、players 数组、状态(waiting/drafting/playing)。每个玩家有昵称和座位号。”
结果:AI 直接生成可工作的代码,只需要微调边界条件。轮抽引擎的卡包生成、洗牌、轮转算法也都是 AI 写的,只改了一次 bug(轮次方向反转)。
Phase 2:卡组构筑与 YDK
用时:约 2 天
描述:最繁琐但 AI 最擅长的部分——卡牌搜索、拖拽交互(drag & drop)、YDK 导入/导出格式解析、剪贴板集成。这些功能纯手工写很烦,但每个功能点都很清晰,AI 一口一个。
亮点:AI 生成的 YDK 导出代码直接兼容 YGOPro 的 .ydk 格式,无需任何修改。拖拽交互也是 AI 一手包办。
Phase 3:ocgcore 对战引擎集成
用时:约 5 天(最耗时)
描述:集成 koishipro-core.js(ocgcore 的 WASM 封装)需要处理大量底层细节:WASM 加载、卡牌数据注册、Lua 脚本加载、DuelSession 状态管理。这里 AI 生成的框架代码占了 ~70%,但调试花了大量时间。
关键 Bug 记录:
| Bug | 根因 | 修复 |
|---|---|---|
WASM newCard() 崩溃 |
Node 22 与旧版 Emscripten 不兼容 | 切到 Node 20 LTS |
| 卡牌 Abort | 224 张卡片中 20 张缺少 Lua 脚本 | 下载完整脚本包 + stub |
| “版本不匹配” 误导 | ErrorType 枚举值差 1 | 修正 +1 偏移 |
| 路径导致脚本加载失败 | __dirname 深度计算错误 |
修正 .. 层数 |
| CDN 资源加载失败 | neos.config 指向外网 CDN | 全部改为本地路径 |
Phase 4:ygopro 二进制协议适配器
用时:约 2 天
描述:最让我惊喜的部分。需要写一个二进制协议适配器,在 neos-ts 的 ygopro 二进制协议和 cube-draft 的 JSON 协议之间做翻译。
AI 直接生成的协议适配器代码(~300 行)几乎零修改就通过了测试。包括:
- Stoc 包编码(长度前缀 + 类型字节 + payload)
- 6 种 CTOS 消息的解析(PLAYER_INFO、JOIN_GAME、UPDATE_DECK、HS_READY、RESPONSE、SURRENDER)
- 8 种 STOC 消息的构建(JOIN_GAME、DUEL_START、GAME_MSG、DUEL_END 等)
为什么 AI 擅长这个?因为协议转换是"规则明确的翻译工作"——输入输出格式固定,没有模糊地带。AI 的 pattern matching 能力在这里完美发挥。
Phase 5:前端集成与 Bug 修复
用时:约 3 天
描述:集成 neos-ts 前端,解决各种真实环境问题。AI 在分析 crash 日志方面帮了大忙,发给 AI 几百行的 WASM 栈回溯,它能迅速提取关键信息。
最终成果
| 功能 | 状态 |
|---|---|
| 轮抽引擎(多人房间、计时、自动轮抽) | ✅ |
| 卡组构筑(拖拽、搜索、YDK 导入/导出) | ✅ |
| 卡牌数据库(SQLite + 卡图 API) | ✅ |
| 对战桌管理(座位分配、就绪检测、卡组提交) | ✅ |
| ocgcore 对战引擎(DuelSession 完整封装) | ✅ |
| ygopro 二进制协议适配 | ✅ |
| neos-ts 图形化对战前端 | ✅ |
| 轮抽→对战全流程打通 | ✅ |
一些数字
- 代码量:约 6000 行(新增)
- AI 生成占比:~80%
- 人工调试占比:~60%(时间上)
- Bug 总数:30-40 个
- 开发到 MVP:不到 2 周
- 效率提升:约 3-5x
经验和教训
AI 擅长的
- 翻译工作:二进制协议 ↔ JSON,跨语言 API 封装
- UI 交互:拖拽、弹窗、表单等标准交互
- 数据处理:卡组验证、格式解析、排序搜索
- 框架代码:WebSocket 处理器、路由、中间件
AI 不擅长的
- 架构决策:给出"合理但不最优"的方案,需要人工把关
- 环境兼容性:Node 版本、WASM 二进制兼容性——AI 的上下文不够
- 复杂状态调试:WebSocket 连接时序、多窗口同步——AI 视野有限
- 安全考虑:不会主动考虑端口暴露、输入验证、资源泄露
关键心得
需求描述的精度决定 AI 输出的质量。 同样是描述一个功能:
❌ “写一个 WebSocket 处理函数” ✅ “写一个 ygopro 二进制协议处理函数,接收 2 字节长度 + 1 字节类型 + payload,解析 CTOS_RESPONSE 消息并透传到 duel.setResponse()”
花时间打磨 prompt,比花时间修 AI 生成的 Bug 划算得多。