視覺化的狀態機(FSM)
阿新 • • 發佈:2019-01-27
狀態機這個概念已經在網上的部落格和論壇中都已經說爛了,隨便一搜都有一大堆。相關的廢話就不多說了,在這裡主要是分享一下如何視覺化的設計狀態機,如何增強專案的靈活性。這裡通過一個生活中的電梯來了解一下狀態機。
電梯邏輯如下圖:
電梯一共五個狀態,停止,門開,上升,下降,超重報警,箭頭代表相關的事件。
下面通過視覺化的編輯器來設計這個狀態機:
編輯完以後可以立即進行除錯,右鍵狀態下面的事件即可進行觸發完成狀態的跳轉,每個狀態都可以新增相應的行為,這裡主要用列印行為來表現。
狀態機編輯完成以後可以匯出執行時的狀態機(字尾為*.runtime_fsm);
在專案中使用可以通過以下程式碼進行呼叫
執行結果如下:#include "Fsm/inc/Fsm.h" #include <iostream> using namespace BehaviorTreeRuntime; int main() { Fsm* fsm = new Fsm(); fsm->LoadFromFile("../ProjData/Export/Lift.runtime_fsm"); fsm->Start(); std::cout << "請輸入下列事件進行電梯狀態切換:" << "Up," << "Down," << "Open," << "Close," << "Arrive," << "OverLoad," << "Normal" << std::endl; std::string event; while (1) { std::cin >> event; if (event == "q") break; std::cout << "電梯當前狀態: "; if (!fsm->HandleEvent(event)) { std::cout << "電梯不能響應該事件->" << event << std::endl; } } return 1; }
整個過程可以進行視覺化的編輯,視覺化的除錯,匯出,載入,執行等。。