狀態機簡單介紹

2022-08-21 13:48:13 字數 1590 閱讀 8521

可以把狀態機的要素分為4個要素,即:現態、條件、動作、次態。

「現態」和「條件」是因,「動作」和「次態」是果。

(1)現態:是指當前所處狀態;

(2)條件:又稱為「事件」。當條件被滿足時,將會觸發乙個動作,或者執行一次狀態的遷移。

(3)動作:條件滿足後執行的動作。動作不是必須的,當條件滿足後,也可以不執行任何動作,直接遷移到新狀態。

(4)次態:條件滿足後要遷移往的新狀態。「次態」是相對於「現態」而言的,「次態」一旦被啟用,就轉變成新的「現態」了。

(1)狀態框:用方框表示狀態,包括所謂的「現態」和「次態」;

(2)條件及遷移箭頭:用箭頭表示狀態遷移的方向,並在該箭頭上標註觸發條件;

(3)節點圓圈:當多個箭頭指向乙個狀態時,可以用節點符號(小圓圈)連線彙總;

(4)動作框:用橢圓框表示;

(5)附加條件判斷框:用六角菱形框表示;

首先我們畫出他的狀態遷移圖:

然後我們畫出狀態遷移表:

注意使用狀態機的時候不要出現兩種錯誤:1、「偽態」2、「漏態」

(1)「偽態」:把某個「程式動作」當成一種「狀態」來處理。

(2)「漏態」:在狀態劃分時漏掉一些狀態。

ps:區分狀態和偽態:(看兩者的本質)

「動作」是不穩定的,即使沒有條件的觸發,「動作」一旦執行完畢就結束了;

「狀態」是相對穩定的,如果沒有外部條件的觸發,乙個狀態會一直持續下去。

前面介紹的是一種簡單的狀態結構。它只有一級,並且只有一維,它的結構圖如下所示:

如果有必要,我們可以建立更複雜的狀態機模型。如:

狀態機可以是多級的。在分層的多級狀態機系統裡面,乙個「父狀態」下可以劃分多個「子狀態」,這些子狀態共同擁有上級父狀態的某些共性,同時又各自擁有自己的一些個性。

狀態機也可以是多維的。從不同的角度對系統進行狀態的劃分,這些狀態的某些特性是交叉的。比如,在按照按鍵和顯示劃分狀態的同時,又按照系統的工作程序做出另一種狀態劃分。這兩種狀態劃分同時存在,相互交叉。從而構成了二維的狀態結構空間。

說明一下,每一維的狀態都需要用乙個狀態變數(暫存器)來表示。

最後我想說一下:不管是什麼樣子的程式寫成狀態機,只有乙個原則,那就是簡單的才是最有效的!!

狀態機 狀態機0

近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術 個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不 是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...

Verilog語言介紹狀態機

狀態暫存器由一組觸發器組成,用來記憶狀態機當前所處的狀態,狀態的改變只發生在時鐘的跳變沿。狀態是否改變 如何改變,取決於組合邏輯f的輸出,f是當前狀態和輸入訊號的函式。狀態機的輸出是由輸出組合邏輯g提供的,g也是當前狀態和輸入訊號的函式。狀態機設計方法 假設一天的生活有4個狀態 睡覺 學習 吃飯 娛...

python 狀態機 Python 狀態機

class statemachine def init self self.handlers 狀態轉移函式字典 self.startstate none 初始狀態 self.endstate 最終狀態集合 引數name為狀態名,handler為狀態轉移函式,end state表明是否為最終狀態 de...