Вы можете реализовать простые переходы состояний с помощью одной переменной состояния, например, если вы хотите циклически переключаться между состояниями start-> part1-> part2-> end, вы можете использовать enum для отслеживания текущего состояния и оператор switch для кода, который вы хотите запустить в каждом состоянии.
enum state { start=1, part1, part2, end} mystate;
// ...
mystate = start;
do {
switch (mystate) {
case start:
// ...
case part1:
// ...
case part2:
// ...
if (part2_end_condition) mystate = end; // state++ will also work
// Note you could also set the state back to part1 on some condition here
// which creates a loop
break;
}
} while (mystate != end);
Для более сложных переходов состояний, которые зависят от нескольких переменных, вы должны использовать таблицы / массивы следующим образом:
var1 var2 var_end next_state
0 0 0 state1
0 1 0 state2
1 0 0 state3
1 1 0 state4
-1 -1 1 state_end // -1 represents "doesn't matter" here