KPL BP Simulator
王者荣耀 BP 模拟器,20 步状态机由服务端唯一裁定,Go + React 全栈实现
它是什么
一个单机版 BP(Ban/Pick)推演工具,一个人分饰两角把一整场 BP 走完。虽然是自己跟自己下棋,但后端是按真实实时对战的架构写的,没有为了省事把规则塞进前端。
关键设计
- 服务端唯一裁定:20 步回合归属由后端状态机决定,前端只跟随「当前扮演方」切换主题色与空槽闪烁,客户端改不了规则
- REST 提交 + WebSocket 下行:动作走 REST,WebSocket 只做纯下行状态快照,并按幂等合并,避免双通道各自算状态的经典坑
- 每步落库:
ban_pick_action记录每一步,重开页面或重启后端都能按操作回放重建房间,未结束的比赛可以接着打 - 规则建模:英雄八种可用状态由
heroStatus()/heroCan()统一计算,全局 BP 记忆、元流之子五选一这类不对称权限都收敛在引擎里,前端只负责渲染权限 - 可扩展接缝:
mode=solo|dual预留双人对战,系列赛比分、选边、赛制(BO5/BO7)已经落库
我的收获
最花时间的不是写接口,而是把「限制跟队伍走、不跟颜色走」这类规则想清楚——规则一旦有歧义,前后端就会各理解一套。最后是先把状态机画明白,再写代码。