我正在创建一个板球经理统计游戏。我需要创建游戏的逐球模拟。比赛/球的结果将受到球员统计数据和其他外部因素(如天气或所选战术)的影响。
我一直在阅读大多数游戏都可以实现为状态机,这听起来很吸引我,但因为我是板球新手,所以我无法将这款游戏设想为状态机。
Ball应该是状态机还是比赛或球员还是全部3。我也不确定我将如何编排这个状态机(通过事件)。
我也很难确定状态和过渡。任何帮助将不胜感激。
我正在创建一个板球经理统计游戏。我需要创建游戏的逐球模拟。比赛/球的结果将受到球员统计数据和其他外部因素(如天气或所选战术)的影响。
我一直在阅读大多数游戏都可以实现为状态机,这听起来很吸引我,但因为我是板球新手,所以我无法将这款游戏设想为状态机。
Ball应该是状态机还是比赛或球员还是全部3。我也不确定我将如何编排这个状态机(通过事件)。
我也很难确定状态和过渡。任何帮助将不胜感激。
所以这就是我从你的问题中所理解的 - 你的板球经理游戏将根据球员的统计数据(投球手的技能/经验、击球手的技能/经验、守备/守门员统计数据等)和其他相关变量来逐个模拟比赛. 据我了解,这将更像是一个算法引擎,而不是板球比赛的视觉表现。
现在回答你的问题,首先,我不相信你正在以正确的方式看待 FSM。FSM 是一段代码,其设计使得在其生命周期的任何时候,它都处于许多可能的执行状态之一。每个状态都可以并且通常具有(这就是它的重点)不同的更新例程。此外,每个状态都可以根据预定义的触发器/事件转换到另一个状态。您需要了解的是,状态对同一实体实施不同的行为。
现在,“大多数游戏都可以实现为状态机”——不是“一个”状态机,而是一整套状态机。游戏中的几个管理器类、渲染器、游戏对象、菜单系统,或多或少的一切都在其自身的状态机上运行。为了这个例子的目的,想象一个游戏角色,比如说拳击手。你会在“CBoxer”(?)类中找到的一些状态是“Blocking”、“TakingHit”、“Dodge”、“RightUpper”、“LeftHook”等等。
但请记住,FSM 更像是一种设计结构——一种设想手头问题解决方案的方法。您不必一定要使用它们。你可以在没有状态机的情况下制作一个完整的游戏(我认为 :))。但是 FSM 使您的代码设计非常直观和直接,坦率地说,在任何规模合适的项目中都很难找到它。
我建议你看一下 FSM 的一些代码示例。一旦你明白了它背后的想法,你会发现自己到处都在使用它们 :)
作为第一步,你应该通过板球规则和你的球结果模型来总结以前的球如何影响给定的球。
然后确定你需要跟踪什么,以及使用状态机来表示它是否方便。例如,作为 FSM 跟踪统计数据通常不是很方便。
考虑到这些信息,您应该能够构建模型。您需要跟踪的信息可能是状态机或特定状态的内部值。球之间的相互作用将决定从一台机器到另一台机器循环的转换和事件。