有限状态机的编写(游戏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类当更新时又怎样的行为可以完全依赖与他的当前状态的逻辑
(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类当更新时又怎样的行为可以完全依赖与他的当前状态的逻辑
相关文章推荐
- 有限状态机(FSM)--游戏AI学习笔记
- 打游戏时领悟了“向死而生”,这个AI算法真的不虚强化学习
- 跟着BOY学习开发cocos2d-x 游戏 实战篇(1)之 loading 界面编写
- 学习开发cocos2d-x 游戏 实战篇(2)之 欢迎 界面编写
- Head First Java (第二版)学习记录 5 - 编写程序 DotCom 初级游戏
- 三. 学习Unix/Linux编程之事件驱动编程:编写一个视频游戏
- cocos2d-x游戏开发系列教程-坦克大战游戏之敌方坦克AI的编写
- cocos2d-x游戏开发系列教程-坦克大战游戏之敌方坦克AI的编写
- 小羊驼和你一起学习cocos2d-x与lua之五(lua编写cocos2d-x游戏)
- 树莓派学习系列5——使用python编写简单的游戏程序
- 跟着BOY学习开发cocos2d-x 游戏 实战篇(1)之 loading 界面编写
- Jim's游戏外挂学习笔记2—适时编写个读取状态的小程序增加一下士气
- 实现简易而强大的游戏AI——FSM,有限状态机
- (Tensorflow1.0)强化学习实现游戏AI(Demo_1)
- 深入浅出的强化学习笔记(二)——使用OpenAI Gym实现游戏AI
- 游戏外挂编写学习总结
- Jim's游戏外挂学习笔记2——适时编写个读取状态的小程序增加一下士气
- C#学习编写的飞行棋游戏
- 游戏中的 AI 学习笔记(数学基础--矢量)
- 使用增强学习AI玩赛车游戏(Gym-TORCS)