最近我建立了一个板球锦标赛模拟系统,遇到了一个有趣的游戏开发问题:不同板球锦标赛不能共享相同的进展逻辑。
我最初想建立一个通用的“联赛→淘汰赛”系统,并用几个参数配置它。但是,这很快变得混乱不堪。
例如:
ODI世界杯
- 联赛阶段
- 前四名晋级
- 半决赛
- 决赛
T20世界杯
- 4个小组,每组5支球队
- 超级8
- 半决赛
- 决赛
冠军杯
- 2个小组
- 每组前两名晋级
- 半决赛
- 决赛
IPL
- 联赛积分
- 前两名→资格赛1
- 3/4名→淘汰赛
- Q1胜者→决赛
- Q1负者→资格赛2
- 淘汰赛胜者→资格赛2
- Q2胜者→决赛
板球测试
- 与板球测试赛的模拟模型完全不同,因为比赛不是有限回合赛事。
解决方案是将锦标赛视为一个静态的屏幕序列,而不是一个赛事/状态系统,在这个系统中,下一个赛事是从当前锦标赛状态和之前的结果中派生出来的。
这也解决了几个边缘案例:
- 球队在淘汰赛中输掉后不应继续晋级。
- IPL季后赛的种子必须来自实际的联赛积分表。
- 超级8积分必须独立于之前的小组赛阶段。
- 球员需要与背景AI赛事共存,以保持积分的意义。
- NRR需要从实际得分中计算,而不是从结果中推断。
对我来说,最大的教训是UI shouldn't responsible for determining tournament progression。 UI应该渲染由锦标赛引擎产生的状态。
我在建立可玩板球选秀/模拟游戏Cricket XI时采用了这种方法:
https://cric-xi-simulation.vercel.app/
我很想知道其他游戏开发者如何处理类似问题。如果您建立了锦标赛/淘汰赛/联赛系统,是否将竞争视为状态机、赛事图、规则引擎或其他什么?
评论 (0)