前言

  实现游戏AI,可以用有限状态机(FSM)或者分层有限状态机(HFSM),这两个实现都比较简单,只需要实现一个个状态之间的跳转函数即可,你可以用switch或者if实现,都是比较容易实现的。行为树实现可难要难点 ,本文就用行为树来研究小猫的AI实现。

行为树简介

  行为树就是一个树结构,只是对树的节点有不同的定义,主要分为行为节点和控制节点。

  行为节点就是叶子节点,是游戏主体最终执行的行为。

  控制节点就是控制哪些行为节点执行以及怎样执行,又分为:

  选择节点:

      所有子节点依次执行,任何一个返回true,就停止并返回true,否则返回false。

 

  顺序节点:

      所有子节点依次执行,任何一个返回false,就停止并返回false,否则返回false。

  并行节点又分为:

    并发选择节点:

      所有子节点同时执行,有一个节点返回true,就返回true。

    并发顺序节点:

      所有子节点同时执行,有一个节点返回false,就返回false。

例子

  如下图,AINodeDes为树结构的所有节点的描述,后面也将根据这个描述建立真正的树形结构。

  

  如下图,AINodeRegMgr类是一个辅助类,最终将填充AINodeHelper中的type2Create和type2Name变量,AINodeHelper将用这两个变量来建立内存中真正树形结构。

  如下图,AINodeBase为所有节点的根节点,AISelectNode为选择节点 ,AISequenceNode为顺序节点,其它的为不同的叶子节点,负责最终行为的执行。

  如下图,每隔10秒,就会对行为主体执行一次操作。比如,这是一个人,他可能会高兴或者忧伤,在不同的情绪状态的时候他可以有不同的行为,这些行为的随机性,由随机函数确定。

源码

  https://git.oschina.net/zkzk945/BehaviorTree.git