【讨论】有限状态机的代码一般如何设计?
- C/C++ code
// 维护输入状态和输出状态的类class FSMstate{public: // 构造函数 FSMstate(int iStateID,unsigned usTransitions); ~FSMstate(); // 获取当前状态的ID int GetID() { return m_iStateID; } // 向数组中增加状态转换 void AddTransition(int iInput,int iOutputID); // 从数组中删除一个状态转换 void DeleteTransition(int iOutputID); // 进行状态转换并得到输出状态 int GetOutput(int iInput);private: unsigned m_usNumberOfTransition; // 状态的最大数 int* m_piInputs; // 维护输入状态数组 int* m_piOutputState; // 维护输出状态数组 int m_iStateID; // 当前状态};比如:
输入状态: 输出状态:
鼠标未停靠 渲染按钮正常的纹理
鼠标停靠 渲染按钮被停靠的纹理
左键按下 渲染按钮被压下的纹理
左键弹起 渲染按钮正常的纹理
角色未进势力范围 怪物若无其事
角色攻击 怪物反击并掉血
怪物攻击 角色掉血
角色使用加血技能 角色生命增加
怪物生命为0 怪物死亡
这是我对FSM的一点点认识,不知道描述的对不对。
状态机这东西说来简单,就是当前状态,输入状态和输出状态。
但是问题是代码应如何设计。如何应用。
拿出来讨论讨论,请教请教各位熟悉的朋友。。
[解决办法]