从零搭建 Pokemon Auto Chess 私服:8 人对战自走棋的本地跑通指南
【免费下载链接】pokemonAutoChessPokemon Auto Chess Game. Made by fans for fans. Open source, non profit. All rights to the Pokemon Company.项目地址: https://gitcode.com/GitHub_Trending/po/pokemonAutoChess
Pokemon Auto Chess 是一款开源、非盈利的宝可梦自走棋网页游戏:最多 8 人同场组局,你负责摆棋子和配羁绊,战斗由服务器自动推演。这篇指南带你把整套服务跑起来,并讲清实时同步、战斗推演和部署运维三条关键线。
🚀 快速上手:三步跑起本地服务器
第 1 步,拉代码并装依赖(要求 Node 24 以上):
git clone https://gitcode.com/GitHub_Trending/po/pokemonAutoChess cd pokemonAutoChess && npm install第 2 步,填好 .env。项目只依赖两个外部服务:MongoDB(存玩家资料、战绩,本地装一个或免费用 Atlas 均可)和 Firebase(负责登录认证)。在根目录建.env,写入MONGO_URI和 8 个FIREBASE_*变量即可;数据库里建一个名为dev的库、botv2空集合,并把 db-commands/botv2.json 导入进去,否则匹配不到机器人。
第 3 步,启动:
npm run assetpack npm run dev浏览器打开http://localhost:9000/,能看到大厅、备战与对战三个界面。assetpack会把散落的贴图打包成图集,客户端跑不起来时十有八九是漏了这步。
🧠 核心机制拆解:一局 8 人局是怎么跑起来的
Colyseus 房间:状态同步的中枢
整个服务器是 Colyseus 框架(一个 Node.js 实时多人游戏服务器框架)驱动的。一局游戏对应一个 Room,状态放在带@schema标记的类里——Colyseus 会自动对比每一帧前后状态,只把变化的字段推给客户端,而不是每次全量广播。客户端侧就是"订阅状态 + 发命令"两件事:
client.onMessage("update", (state) => render(state)) // 收到增量更新 client.send("update", action) // 玩家操作以命令形式发给服务器命令集中在 app/rooms/commands/,按大厅、备战、对战、锦标赛分成 4 个文件,和 app/rooms/states/ 里的状态一一对应。
战斗推演:确定性模拟,能力各占一个文件
对战开始后,8 名玩家的行动由 app/core/simulation.ts 驱动:每个 tick 按速度结算行动队列,移动、攻击、使用能力依次执行,客户端只做回放渲染,不做裁决——这是保证"你看到的和我看到的战斗结果一致"的关键。能力系统拆成了 app/core/abilities/ 下 400 多个单文件(flame-thrower.ts、moonblast.ts……),加一个新能力不需要碰核心代码。另外 app/models/precomputed/ 存放预计算的宝可梦与羁绊数据,改完配置要跑npm run precompute重新生成。
📦 部署与工程化:环境变量、构建与扩容
环境变量只有一组:MONGO_URI+ 6 个 Firebase SDK 字段 + 2 个服务账号密钥(FIREBASE_CLIENT_EMAIL、FIREBASE_PRIVATE_KEY)。无论上 Render、Heroku 还是 Koyeb,都是在平台的环境变量面板里填这 9 个值。
构建链路:客户端走 esbuild(node esbuild.js --build),服务端走 tsc,产物统一落在app/public/dist/,启动命令是node ./app/public/dist/server/app/index.js。
扩容有两条路:
- 物理机/VPS:ecosystem.config.js 用 PM2 fork 模式按 CPU 核数起多实例(注意不能用 cluster 模式),
deploy-live-1到deploy-live-4四个脚本对应四台生产机; - 容器化:Dockerfile 是三阶段构建,docker-compose.yaml 顺带起了一个本地 MongoDB,配好 Firebase 后
docker compose up -d一条命令全搞定。
🛠️ 避坑与调优:三条踩过的路
现象:云上构建成功后,游戏里缺图标和贴图。原因:assetpack打包步骤在 Heroku/Render 的构建环境里经常静默失败。解法:本地跑通npm run build,把产物提交进仓库,再删掉构建脚本里的assetpack(deployment/README.md 里有完整步骤)。
现象:能进大厅,但机器人始终不满 8 人、开不了局。原因:botv2集合是空的,服务器无机器人可调度。解法:用 MongoDB Compass 把db-commands/botv2.json导入botv2集合,重启服务。
现象:想改玩家数据没有管理入口。原因:默认角色没有后台权限。解法:到usermetadatas表把自己的角色改成ADMIN。
写在最后
跑完这三步,你手里就是一个可以加规则、改数值、开社群的完整自走棋服务。后续可以从 app/core/simulation.ts 的战斗主循环读起,或照 deployment/ 里的教程把私服挂到公网。几点提示:
- 项目完全开源(GPL v3),修改能力、羁绊配置前建议先跑一遍
npm run precompute; - 这是粉丝作品,版权归 The Pokémon Company 所有,商用前请留意仓库声明;
- 遇到问题优先翻
app/config/下的配置类文件,大部分"怪行为"都能在那里找到答案。
【免费下载链接】pokemonAutoChessPokemon Auto Chess Game. Made by fans for fans. Open source, non profit. All rights to the Pokemon Company.项目地址: https://gitcode.com/GitHub_Trending/po/pokemonAutoChess
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考