您的位置:首页 > 大数据 > 人工智能

有限状态机的编写(游戏AI学习)

2011-04-04 16:41 381 查看
[align=center]FSM有限状态机的编写[/align]
(1)相比if--else--then 状态逻辑它的优点:
编写快速简单,易于调试,很少的计算开销,直觉性,灵活性
(2)视频游戏中常常把状态封装成对象,包含推动状态转变所需要的逻辑
状态接口:
State类
class State
{
public:
virtual void Execute(Troll* troll);
};
Troll 巨魔类
为巨魔类赋予有限状态机的功能性,只需增添一个指向State类继承对象的实例指针(State* m_pCurrentState)和允许用户改变指针的指向实例的方法(ChangeState())
(3)一个简单的实例

Code:

class State

{

public:

virtual void Execute(Troll* troll);

};

class Troll// 巨魔类

{

State* m_pCurrentState;

public :

void Update()

{

m_pCurrentState->Execute(this);

}

void ChangeState(const State* pNewState)

{

delete m_pCurrentState;

m_pCurrentState = pNewState;

}

};

class State_RunAway:public State//逃跑(当前状态的逻辑为逃跑)

{

public :

void Execute(Troll* troll)

{

if(troll->isSafe())

{

troll->ChangeState(new State_Sleep);

}

else

{

troll->MoveAwayFromEnemy();

}

}

};

class State_Sleep: public State//睡觉(当前状态的逻辑为睡觉)

{

public :

void Execute(Troll* troll)

{

if(troll->isThreatened())

{

troll->ChangeState(new State_RunAway);

}

else

{

troll->Snore();

}

}

};

(4) Troll类更新时,他会反过来用this指针调用当前状态类型的Execute方法。Troll类当更新时又怎样的行为可以完全依赖与他的当前状态的逻辑
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: