ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

一份代码跑在三个世界:World of ClaudeCraft确定性模拟核与IWorld接缝架构深度解析

一份代码跑在三个世界:World of ClaudeCraft确定性模拟核与IWorld接缝架构深度解析 一份代码跑在三个世界World of ClaudeCraft确定性模拟核与IWorld接缝架构深度解析【免费下载链接】world-of-claudecraft项目地址: https://gitcode.com/gh_mirrors/wo/world-of-claudecraftWorld of ClaudeCraft 是一款免费、开源的经典风格浏览器 MMO它最迷人的工程设计在于同一份 TypeScript 确定性模拟核src/sim/同时驱动三个世界——权威多人联机服务器、本地离线单机世界和无头强化学习 RL 训练环境三者之间只隔着一层名为IWorld的接缝架构。同一种子、同一世界、处处一致这就是一份代码跑在三个世界的全部秘密。三个世界一份模拟代码 在理解接缝之前先看看这份代码到底跑在哪三个世界里世界宿主入口运行方式 权威多人服务器server/game.ts同一份Sim在 Node 中运行Postgres 持久化账号 离线浏览器单机src/main.ts开发服务器下的本地单人 Sim无服务器权威 无头 RL 环境headless/env_server.tsPython 通过 Gym 接口驱动真实游戏三个宿主各自执行new Sim(...)加载的是完全相同的游戏逻辑战斗、仇恨表、掉落、地形、宠物、拍卖行。你看到的行为必须处处一致——这正是整个架构存在的意义详见根目录 CLAUDE.md 的 One sim, three hosts 章节。确定性模拟核让世界可以回放的 4 条铁律 所谓确定性模拟deterministic simulation指在相同输入下永远产生相同输出。src/sim/ 通过四条铁律实现它且每条都有自动化测试守卫tests/architecture.test.ts 会扫描每一个 sim 文件1. 固定 20Hz 心跳世界有自己的时钟模拟以固定 20 次/秒的节奏推进DT 1/20定义在 src/sim/types.ts 中。真实时间、帧率、网络抖动都不参与游戏逻辑——客户端 20Hz 上报移动意图服务器按固定节拍结算一切战斗、仇恨与掉落。这就像游戏世界内置了一块不走时的钟。2. 唯一的随机源mulberry32 的 Rng 类整个模拟中禁止Math.random、Date.now、performance.now所有随机数必须经过 src/sim/rng.ts 中的Rng类mulberry32 算法。掷骰子有先后顺序顺序相同则结果逐位一致——测试体系甚至用随机抽取顺序一致性parity gate见 tests/parity来证明重构前后行为逐字节相同。3. 同一种子同一个世界世界种子被唯一地写死在 src/sim/world_seed.tsWORLD_SEED 20061。地形高度是坐标 种子的纯函数服务器、浏览器客户端、RL 环境都 import 同一个常量任何宿主都无法偷偷长出一个不一样的世界。4. 零 DOM 依赖sim 不认识浏览器src/sim/ 不 import 任何 Three.js / DOM 模块在 Node 和浏览器中原样运行。这是它能在服务器和 headless 环境里活下来的前提。IWorld 接缝渲染层与游戏世界的唯一对话窗口 如果模拟核是心脏IWorld 就是神经。规则只有一条src/render/和src/ui/只与 IWorld 对话永远不直接引用Sim或ClientWorld。这个接缝seam由 src/world_api/ 下 38 个按领域切分的 facet 接口组成再由桶文件src/world_api.ts通过extends重新聚合entity_roster.ts实体、玩家、移动输入combat.ts技能施放、普攻quests.ts任务日志与交任务market.ts世界市场买卖guild_bank.ts公会银行……以及副本、宠物、交易、邮件、坐骑等全部玩法面两个具体实现结构性地满足同一份 IWorld离线Sim本地世界本体直接实现在线ClientWorldsrc/net/不持有真实世界而是镜像服务器快照——把 20Hz 推送的快照帧翻译成 IWorld 可读的状态把玩家动作翻译成命令帧发回服务器。新增功能的标准动作在对应的 facet 文件加成员 → 在Sim和ClientWorld两边都实现 → 同步更新 tests/world_api_parity.test.ts 钉死的成员清单。三道门禁测试快照往返、命令子集、双世界一致性保证接缝永不漂移。命令协议与版本协商滚动部署也能安全失败客户端能发什么命令全部定义在 src/world_api.ts 的COMMAND_NAMES单一词表中200 个只增不改的 wire token服务器分发端与客户端发送端 import 同一张表——客户端发的每个命令都被证明是服务器可分发的。而ONLINE_WORLD_LAYOUT_VERSION 45这个布局纪元号则处理更微妙的问题一旦权威城镇布局或必需快照形状变化新旧版本混跑会直接拒绝握手fail closed宁可提示游戏与服务器版本不兼容也不让玩家走进一个渲染与伤害不一致的世界。三个世界如何各得其所 世界一权威服务器——客户端只是画师在线模式下服务器是唯一真相所有战斗、掉落、任务进度、经济结算都在服务器的那份Sim里发生客户端以约 120 码的兴趣范围接收快照加每玩家事件本地只负责渲染与预测手感。作弊者改本地内存对不起结果早已在服务器上算好。世界二离线单机——开发者与读者的透视眼pnpm run dev启动开发服务器后选择 Play Offline即可在浏览器里得到一个无账号、无服务器权威的本地世界从 1 级出生地 Eastbrook Vale 一路练到等级上限。对想读懂这份 399 个文件的模拟核的开发者来说这是逐行活体解剖的最佳方式。世界三无头 RL 环境——让 AI 练级headless/ 的env_server.ts把同一份Sim暴露成 Gymnasium 兼容的环境观察向量来自 src/sim/obs.ts 的encodeObs动作空间由ACTIONS/applyAction定义Python 侧绑定见 python/wow_env.py 与示例 python/example_random_agent.py。因为模拟核确定且无 UI 依赖RL 训练中的每一步都是可复现的录像训练数据不掺水。动手体验三步进入这个架构 git clone https://gitcode.com/gh_mirrors/wo/world-of-claudecraft cd world-of-claudecraft pnpm install --frozen-lockfile pnpm run dev然后打开http://localhost:5173选择 Play Offline 进入本地世界想跑权威服务器则pnpm run server想训一个 AI 玩家则pnpm run env。写在最后 World of ClaudeCraft 给所有游戏开发者的启示可以浓缩成两句话把游戏逻辑收敛为一个确定性的、零 UI 依赖的模拟核再用一个按领域切分、双端镜像的接缝接口IWorld隔离真实世界与网络镜像世界。于是同一份代码既能撑起多人的权威服务器又能退化为离线单机的解剖标本还能变身 AI 训练场——三个世界一份心跳种子 20061处处相同。【免费下载链接】world-of-claudecraft项目地址: https://gitcode.com/gh_mirrors/wo/world-of-claudecraft创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表