我的状态机遇到了困难.我使用一个函数,它根据输入参数oldState和两个输入参数返回新状态.
在这个函数中,我有很多嵌套的开关案例.我宁愿使用2x2转换矩阵,但不知道如何使用它.我确实使用状态和输入从状态图中创建了一个转换表.
但是我如何使用2暗淡的exaclty.阵列transition_table[3][4]?
你说你现在有这样的事情:
StateType transition (StateType old, InputType one, InputType two) {
//... nested switch statements
return new_state;
}
Run Code Online (Sandbox Code Playgroud)
所以,你需要的是一个三维数组:
#define MAX_STATES 12
#define MAX_INPUT_VAL 2
StateType transitionTable[MAX_STATES][MAX_INPUT_VAL][MAX_INPUT_VAL] = {
{ { StateA, StateB },
{ StateC, StateD } },
{ { StateE, StateF },
{ StateG, StateH } },
{ { StateI, StateJ },
{ StateK, StateL } },
//...
};
Run Code Online (Sandbox Code Playgroud)
然后你会像这样过渡:
new_state = transitionTable[StateIndex(old)][one][two];
Run Code Online (Sandbox Code Playgroud)
所以,假设StateIndex(StateC)返回2,那么:
old = StateC;
new_state = transitionTable[StateIndex(old)][1][0];
assert(new_state == StateK);
Run Code Online (Sandbox Code Playgroud)
会导致new_state持有StateK.
| 归档时间: |
|
| 查看次数: |
2690 次 |
| 最近记录: |