1. 程式人生 > >視覺化的狀態機(FSM)

視覺化的狀態機(FSM)

      狀態機這個概念已經在網上的部落格和論壇中都已經說爛了,隨便一搜都有一大堆。相關的廢話就不多說了,在這裡主要是分享一下如何視覺化的設計狀態機,如何增強專案的靈活性。這裡通過一個生活中的電梯來了解一下狀態機。

電梯邏輯如下圖:


電梯一共五個狀態,停止,門開,上升,下降,超重報警,箭頭代表相關的事件。

下面通過視覺化的編輯器來設計這個狀態機:


編輯完以後可以立即進行除錯,右鍵狀態下面的事件即可進行觸發完成狀態的跳轉,每個狀態都可以新增相應的行為,這裡主要用列印行為來表現。


狀態機編輯完成以後可以匯出執行時的狀態機(字尾為*.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;
}
執行結果如下:



整個過程可以進行視覺化的編輯,視覺化的除錯,匯出,載入,執行等。。