#ifndef G_AI_STATEMACHINE_HPP #define G_AI_STATEMACHINE_HPP #include <boost/noncopyable.hpp> #include "State.hpp" using namespace boost; namespace g { namespace ai { template<class T> class StateMachine : public noncopyable { public: StateMachine(T *t): owner(t), currentstate(NULL), prevousstate(NULL), globalstate(NULL) {} virtual ~StateMachine(){} public: inline void SetCurrentState(State<T> *s){currentstate = s;} inline void SetGlobalState (State<T> *s){globalstate = s;} inline void SetPreviousState(State<T> *s){prevousstate = s;} void Update() { if(globalstate == NULL) globalstate->Execute(owner); if(currentstate == NULL) currentstate->Execute(owner); } void ChangeState(State<T> *s) { prevousstate = currentstate; currentstate->Execute(owner); currentstate = s; currentstate->Enter(owner); } inline void UndoState(){ChangeState(prevousstate);} public: State<T>* GetCurrentState(); State<T>* GetGlobalState(); State<T>* GetPreivousState(); bool IsThat()const; private: State<T> *currentstate; State<T> *prevousstate; State<T> *globalstate; T *owner; }; } }; #endif 代码如下:涉及设计模式和boost。。。 参考 游戏人工智能编程案例一书 #ifndef G_AI_STATE_HPP #define G_AIPSTATE_HPP namespace g { namespace ai { template<class T> class State { public: virtual ~State(){} virtual void Enter(T *)=0; virtual void Execute(T *)=0; virtual void Exit(T *)=0; }; } }; #endif 未完待续!