【C++】50.编程中切换状态的【有限状态机】
對于有限狀態機的知識,這里推薦淺墨毛星云大佬的博客【游戲設計模式】之三 狀態模式、有限狀態機 & Unity版本實現,博客里做了具體的代碼講解。
狀態機是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。有限狀態機是其中最簡單的成員。
以下是我看了該博客之后的一點心得:
對于有很多狀態切換的功能,我們可能會不假思索的使用if-else直接把所有可能的情況都列舉出來,這樣會產生一大堆代碼,并且因為漏掉某個細節,然后又修補bug,添加代碼,進而就會破壞代碼結構。
這種方式明顯不可取。
雖然if-else和switch-case有時候可以通用,但是某些時候,輸入不是表達式或者是沒有定義成枚舉型的,所以這種情況下就使用if-else,例如if(num>5)你定義成什么東西轉化成switch-case?如果刻意定義成bool轉化成switch-case反而會更麻煩。
而switch-case只能是針對"表達式",例如數字、枚舉和bool型,case 3:、case KEY_UP:、case true:。
-
我們一般思維就是,輸入來了什么動作,我們就根據這個輸入動作,來具體分析這個輸入動作在各種狀態下分別做什么處理,可能會需要使用很多的bool型的狀態值(如果你使用了枚舉定義這些狀態值,就不需要這些bool狀態值了),這是if-else的做法。
-
但是,我們可以換一種思維方式,先判斷當前是在什么狀態(多種狀態值可以定義成枚舉型)下,然后再根據輸入動作來進行相應的處理,可能會簡潔高效很多。這就是switch-case的方法。
兩種方法你自己實踐一下,在相對復雜的狀態切換操作下,我們要想一下,怎樣的邏輯會使得代碼更簡潔,然后搭配switch-case使用,代碼肯定可以更簡潔。
至于淺墨大佬博客最后講解的狀態模式,博客中我沒有看得很明白,就不做記錄了。
總結
以上是生活随笔為你收集整理的【C++】50.编程中切换状态的【有限状态机】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数学与算法】凸函数、凸集、凸函数的一二
- 下一篇: 【数学与算法】支持向量机、线性判别 详细