1. 程式人生 > >卅川的狀態機之路(創作中,不定時上傳)

卅川的狀態機之路(創作中,不定時上傳)

rom 不同的 大學 核心 追溯 選擇 有限狀態機 span 任務

川的第一篇幹貨,將從講述FSM(有限狀態機)開始。

川第一次接觸狀態機這種東西,還得追溯到剛到暢遊工作,破解了別的遊戲的代碼(遊戲程序就是這麽沒節操和底線,嗯!)才知道有這麽個東西的。雖然大學學習過相關思想,可是第一次見了真材實料還是很震撼的(請原諒我用"震撼"這個詞,因為我理想中的程序,就應該和機械一樣各司其職分工明確,然後才能正確運行得到結果)。

現在有很多論調,當然集中的也只是一些特定的環境下,有限狀態機已經不合時宜了,覺得低效且無法完整實現功能(比如最近就看過幾篇文章,關於遊戲AI,大家似乎對之前使用FSM去實現很有些看法)。可是正如排序算法一樣,快排再快,也一樣有去寫選擇排序的人(僅僅是打比方,非要跟我掰扯快排和選擇的速度和應用場景我也沒辦法)。

FSM並不一定執行效率最高,但是以工程的角度來看,FSM卻可以比較清晰地闡述程序運行流程(請註意"比較",因為我也見過一個總邏輯分成2-30個狀態的,那就簡直是天書了)。

所以,來看一個核心問題:什麽是有限狀態機?川不想去網上搬一堆關於有限狀態機的定義,他們都對,但是並不是我的思想。

FSMFinite-state machine)是有限狀態機的縮寫,全稱中的machine,那可是機器啊餵!所以還想什麽呢,FSM就是一臺用代碼構建的機器呀(不得不說,我到現在都對工程制圖學念念不忘,漂亮機械圖紙在我眼中就是藝術品)!既然是機器,它就會運轉,去完成它在被設計制造出來之後被賦予的任務。舉個栗子:城市道路都願意開自動擋(因為省事兒呀,面對堵車時候那一腳又一腳的離合絕對是對左腿強有力的鍛煉),它的變速箱就是一臺機器,它需要在我們開車時根據我們行駛的路況、速度變更不同的擋位(否則要麽發動機帶不動汽車,要麽就等著燒機油吧,哈哈)。

好吧,扯了一堆有的沒的。狀態機就是在不同的狀態不同的條件下,去執行對應狀態或條件下代碼的機器(如有需要,請自行深入了解,攤手)。

卅川的狀態機之路(創作中,不定時上傳)