最近我建立了一个板球锦标赛模拟系统,遇到了一个有趣的游戏开发问题:不同板球锦标赛不能共享相同的进展逻辑。

我最初想建立一个通用的“联赛→淘汰赛”系统,并用几个参数配置它。但是,这很快变得混乱不堪。

例如:

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/

我很想知道其他游戏开发者如何处理类似问题。如果您建立了锦标赛/淘汰赛/联赛系统,是否将竞争视为状态机、赛事图、规则引擎或其他什么?