2018-07-24状态机
class StateIdle : public State
{
【2018-07-24状态机】public:
StateIdle(FSM* fsm) : State(fsm) {}
int test_counter = 0;
void OnStateEnter() {
cout << "---- Idle Enter" << endl;
test_counter = 0;
}
void OnStateTick() {
cout << "Idle Tick" << endl;
// 模拟一个定时状态转移。在实际工程中是根据需求逻辑写的
test_counter++;
if (test_counter == 5)
{
fsm->Trans(State_Attack);
}
}
void OnStateExit() { cout << "==== Idle Exit" << endl;
}
};
class StateAttack : public State
{
public:
StateAttack(FSM* fsm) : State(fsm) {}
void OnStateEnter() { cout << "---- Attack Enter" << endl;
}
void OnStateTick() { cout << "Attack Tick" << endl;
}
void OnStateExit() { cout << "==== Attack Exit" << endl;
}
};
class StateGoHome : public State
{
public:
StateGoHome(FSM* fsm) : State(fsm) {}
void OnStateEnter() { cout << "---- GoHome Enter" << endl;
}
void OnStateTick() { cout << "GoHome Tick" << endl;
}
void OnStateExit() { cout << "==== GoHome Exit" << endl;
}
};
int main()
{
// 构造状态机
FSM* fsm = new FSM();
State* stateIdle = new StateIdle(fsm);
State* stateAttack = new StateAttack(fsm);
State* stateGoHome = new StateGoHome(fsm);
fsm->Register(State_Idle, stateIdle);
fsm->Register(State_Attack, stateAttack);
fsm->Register(State_GoHome, stateGoHome);
fsm->SetInitState(State_Idle);
// 将状态机Tick放入程序主循环中, 仅示范
while (true)
{
fsm->Tick();
sleep(1);
}
return 0;
}
推荐阅读
- Java基础-高级特性-枚举实现状态机
- 136.|136. Single Number
- 【Tomcat源码阅读分享】—(5)Tomcat中的ClassLoader
- 如何理解es6中的class,以及class中的constructor函数
- 关于|关于 java.lang.NoClassDefFoundError: com.umeng.analytics.d的问题
- Panda|Panda Class 中班生活之开学Day3.
- objc_class|objc_class 中 cache 原理分析
- 数据结构|C++技巧(用class类实现链表)
- 2018-07-24|2018-07-24 电影《鸟人》随想
- 416.|416. 分割等和子集