首页 > 代码库 > 《游戏人工智能编程案例精粹》读书笔记—状态驱动智能体设计

《游戏人工智能编程案例精粹》读书笔记—状态驱动智能体设计

一个有限状态机是一个设备,或是一个设备模型,具有有限数量的状态,它可以在任何给定的时间根据输入进行操作,使得从一个状态变换到另一个状态,或者是促使一个输出或者一种行为的发生。一个有限状态机在任何瞬间只能处于一种状态。

状态变换表

状态变换表是一个条件和那些条件导致的状态的表,这个表可以被智能体在规则的间隔内训问,使得它能基于从游戏环境中接收到刺激进行必须的状态转换。

image

内置的规则

每个状态模块依靠自身的逻辑来决定它是否应该运行自己变换到一个替代状态,智能体只向外部提供操作和获取自身属性的函数,状态模块通过智能体提供的函数来找到必要的信息以处理规则。

这个方法的实现是将状态封装成对象,包含推动状态变换需要的逻辑。此外,所有状态对象共享一个通用的接口:一个称为 State 的纯虚类。这里提供一个简单接口的版本。

class State{public:    virtual void Execute (Troll *troll) = 0;};

想象一个 Troll 类,它具有成员变量表示特征,如健康、发怒、毅力等,还一个接口允许客户训完并调整那些值。一个 Troll 类可以被赋予有限状态机的功能性,只要增加一个指向 State 类继承对象的实例的指针和允许用户改变指针指向的实例的方法。

class Troll{    /*省略的属性*/    State *m_pCurrentState;public:    /*省略的属性的接口*/    void Update()    {        m_pCurrentState->Execute(this);    }    void ChangeState(const State *pNewState)    {        delete m_pCurrentState;        m_pCurrentState = pNewState;    }};

当 Troll 类的更新方法被调用时,它反过来用 this 指针调用当前状态类型中的 Execute 函数,一个 Troll 类当更新时有怎样的行为可以完全依赖于当它当前状态的逻辑。用实例可以最佳地阐明这一点,让我们创建一堆状态,使 Troll 在感到危险时可以从敌人身边逃跑,并且当它感到安全时变为睡觉。