简单使用有限自动机

最近写程序碰到一个问题,主要就是关于实时运行程序的状态转化,虽然可以将动作与状态写在一起解决,总是感觉不妥,于是上网找了一些资料学习了一下,写了一个有限自动机的类,将动作与状态分离,使用方便了许多。

类设计基本是照搬某篇E文资料中的。

 

class FSMstate 
{
public:
 int  GetID();         //得到本StateID
 void AddTransition(int iInput, int iOutputID); //增加转化
 void DeleteTransition(int iOutputID);   //删除转化
 int  GetOutput(int iInput);      //得到某个转化

 void InitState(int iStateID, unsigned usTransitions); //初始化
 void Release();           //释放空间
 FSMstate(int iStateID, unsigned usTransitions);
 FSMstate();
 virtual ~FSMstate();
 
private:
    unsigned m_usNumberOfTransitions;//状态最大数
    int   *m_piInputs;   //输入数组
    int   *m_piOutputState;  //输出状态数组
    int   m_iStateID;    //本状态标识符
};

class FSMclass 
{
public:
 FSMstate * CreateFSMstate(int iStateID, unsigned usTransitions);  //创建用于Add

    int  GetCurrentState() { return m_iCurrentState; }     //返回当前状态ID
    void SetCurrentState(int iStateID) { m_iCurrentState = iStateID; } //设置当前状态ID
   
 FSMstate* GetState(int iStateID);  //返回FSMstate对象指针
    void AddState(FSMstate* pState);  //增加状态对象指针
    void DeleteState(int iStateID);  //删除状态对象指针

 int  StateTransition(int iInput); //转换状态。

 void Release();
 FSMclass(int iStateID); //初始化状态
 FSMclass();
 virtual ~FSMclass();
 
private:
 vector<FSMstate *> m_states;  //包括了状态机的所有状态
    int m_iCurrentState; //当前状态的ID
};

使用时实例化一个FSMclass,然后创建FSMstate,用AddTransition()方法把有限自动机的输入输出添加进去,然后用FSMclass类的AddState方法添加状态就完成了。用这个类管理有限状态机确实方便。如果做游戏的话,可能会对有限自动机使用比较多吧。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值