您的位置:首页 > 编程语言

状态机简介

2010-03-22 16:23 120 查看
 

有限状态机

      有限状态机(Finite
State Machine,缩写为FSM)是游戏业所使用的最古老的也是最普遍的技术,几乎所有的游戏都或多或少地采用了它。正因为其太简单和太古老了,有些人觉得它不配被归类为AI技术,说它更像是一种通用的程序组织形式和思维方法。这种说法也有一定道理。但FSM确实高效实用,是一切更高级的AI技术的基础。
      简单地说,一个FSM就是一个拥有一系列可能状态的实体,其中的一个状态是当前状态。这个实体可以接受外部输入,然后根据输入和当前状态来决定下一步该转换到什么目标状态,转换完成后,目标状态就成为了新的当前状态。如此循环往复,实体和外部就这么交互下去,实体的状态就不停地改变着。

      目前,大多数游戏的AI,特别是FPS类型的游戏,都是基于我们上面所介绍的FSM技术的。当然游戏中的FSM比上面的例子复杂得多,NPC可能有几十个状态,状态转换法则也更严谨,共同构成了NPC的复杂的行为系统,使得玩家在和NPC对抗时觉得NPC的确有两下子,不可等闲视之。在编程时,用C语言的分支和循环语句就可实现上面的简单FSM。但复杂的FSM,一般要用C++写一个通用的FSM类,然后根据不同的外部数据决定NPC的不同行为。也可以将FSM以矩阵的方式来实现,或将其存储在外部文件中。这样游戏设计师就可以用FSM编辑器自己编辑NPC的行为系统,然后将其FSM存在文件里,由程序自动读取运行测试,然后再进行修改和调整,而无需程序员的介入了。
 

      总结起来,FSM的优点如下:易于理解,易于编程,特别是易于纠错。如果测试游戏时发现NPC行动异常,只要在编译纠错时跟踪其状态变量就可以了。采用FSM的游戏,NPC决策速度比较快(因为是确定性的行为系统)。
 
 

模糊状态机

      FSM虽然有那么多优点,但它还有个致命的弱点:它只能处理确定性的情况。使用FSM建立的NPC的行为系统太规范了,很容易被玩家识破。于是人们想到了是否能把不确定性引入NPC的行为系统中,这样一来NPC的行为就有更多变化了。于是另一种方法应运而生,这就是模糊状态机(fuzzy
state machine,缩写为FuSM)。
      FuSM的基本思想就是在FSM基础上引入不确定性。在FSM中,只要知道了外部输入和当前状态,就可确定目标状态。而在FuSM中,即使知道了以上两点,也无法确定目标状态,而是有几个可能的目标状态。究竟转换到什么状态,则由概率决定。我们前面所示的NPC的FSM中警觉状态到追逐状态的转换,改成FuSM后,如图18-5所示。
      我们可以看到,在FuSM中,当NPC处于警觉状态时,如果敌人迫近到可驱逐范围内,我们并不确定NPC是否转换到追逐状态还是躲避状态。而是根据概率,80%的情况下NPC会进入追逐状态,有20%的情况NPC会躲避。这样一来,NPC的行为就复杂多了,游戏性也更丰富了。
我们还可以看到,这个NPC是一个比较勇敢的NPC。它在80%的情况下都是勇往直前,只有20%的情况会退缩,而我们只需要改变FuSM中概率的设定,NPC就可以拥有不同的行为特征。比如说把80%和20%调换一下,则NPC会成为一个比较胆怯的NPC。它在80%的情况下会躲藏,只有20%的情况会迎着敌人上去,而NPC行为特征的改变,是在不影响FuSM基本结构的条件下,简单地改变其概率设定而完成的。这是FuSM的一大优势!因为这样一来我们可以设计几个简单的通用的FuSM,然后通过不同的概率设定(俗称的阈值)产生各种各样行为各异的NPC。这可真是事半功倍!因为如果只用FSM的话,则每种NPC都要构造自己独有的FSM,工作量太大了。
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息