分享:大家有没有状态机的简单+实用的封装?
(转帖)最近写的游戏老是有switch + call function.<br/>于是使用表格把它们包起来,但是写得多了,还是做了个简单的封装: <p></p><p><br/>class CTestState<br/>{<br/>public:<br/>friend class CStateMachine<CTestState>;<br/>enum MYSTATE<br/>{<br/>EM_S1 = 0,<br/>EM_S2 = 1<br/>};</p><p>CTestState () { m_state.SetCaller(this); }//: m_state(this) {}<br/>CStateMachine<CTestState> m_state; //状态机对象<br/><br/>void Run();<br/>void OnEvent();<br/>private:<br/>void MainState ( const EM_MACHINE_STATE &state ) {}<br/>void MainState2( const EM_MACHINE_STATE &state );<br/>};</p><p>CStateMachine<CTestState>::MYDATA CStateMachine<CTestState>::s_info[] = {<br/>{CTestState::EM_S1, &CTestState::MainState, false},<br/>{CTestState::EM_S2, &CTestState::MainState2,true}<br/>};</p><p>void CTestState::MainState2 (const EM_MACHINE_STATE &state )<br/>{<br/>switch (state)<br/>{<br/>case EM_MS_INIT:<br/>cout << "MainState Init!" << endl;<br/>break;<br/>case EM_MS_RUN:<br/>cout << "MainState Running!" << endl;<br/>break;<br/>case EM_MS_DESTORY:<br/>cout << "MainState Destory!" << endl;<br/>break;<br/>}<br/>}</p><p>int main(int argc, char* argv[]) <br/>{ <br/>CTestState test;<br/>test.m_state.SafeSwitch( CTestState::EM_S1 );<br/>test.m_state.SafeSwitch( CTestState::EM_S2 );<br/>test.m_state.SafeSwitch( CTestState::EM_S1 );<br/>test.m_state.Call();<br/>return 0;<br/>}</p>
页:
[1]