帮我写一个状态机
好的,以下是一个简单的状态机:
// 定义状态
enum State {
START,
STATE1,
STATE2,
STATE3,
END
};
// 定义事件
enum Event {
EVENT1,
EVENT2,
EVENT3,
EVENT4,
EVENT5
};
// 定义状态转移表
State transitionTable[5][5] = {
/* EVENT1 EVENT2 EVENT3 EVENT4 EVENT5 */
/*START*/ {STATE1, STATE2, STATE3, STATE3, END},
/*STATE1*/ {STATE1, STATE2, STATE3, END, END},
/*STATE2*/ {STATE2, STATE3, STATE3, STATE1, END},
/*STATE3*/ {STATE3, STATE1, END, END, END},
/*END*/ {END, END, END, END, END}
};
// 定义状态机类
class StateMachine {
public:
StateMachine() : currentState(START) {}
void processEvent(Event event) {
currentState = transitionTable[currentState][event];
}
State getCurrentState() const {
return currentState;
}
private:
State currentState;
};
// 使用状态机
int main() {
StateMachine stateMachine;
stateMachine.processEvent(EVENT1);
stateMachine.processEvent(EVENT2);
stateMachine.processEvent(EVENT4);
State currentState = stateMachine.getCurrentState();
// 根据当前状态进行相应的操作
return 0;
}
这个状态机包含了5个状态和5个事件,使用一个二维数组来表示状态转移表,根据当前状态和事件即可得到下一个状态。在 processEvent
方法中,根据传入的事件更新当前状态。在 getCurrentState
方法中,返回当前状态。在主函数中,我们可以使用状态机的方法来处理事件并获取当前状态,然后根据当前状态进行相应的操作。
原文地址: http://www.cveoy.top/t/topic/bmbG 著作权归作者所有。请勿转载和采集!