有限狀態(tài)機(jī)就斤,(英語:Finite-state machine, FSM)充边,又稱有限狀態(tài)自動機(jī)庸推,簡稱狀態(tài)機(jī),是表示有限個狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學(xué)模型浇冰。狀態(tài)存儲關(guān)于過去的信息贬媒,它反映從系統(tǒng)開始到現(xiàn)在時刻輸入的變化;轉(zhuǎn)移指示狀態(tài)變更肘习,用必須滿足來確使轉(zhuǎn)移發(fā)生的條件來描述它际乘;動作是在給定時刻要進(jìn)行的活動描述。有多種類型的動作:
進(jìn)入動作(entry action):在進(jìn)入狀態(tài)時進(jìn)行漂佩;
退出動作:在退出狀態(tài)時進(jìn)行脖含;
輸入動作:依賴于當(dāng)前狀態(tài)和輸入條件進(jìn)行;
轉(zhuǎn)移動作:在特定轉(zhuǎn)移時進(jìn)行投蝉。
游戲引擎是有限狀態(tài)機(jī)最為成功的應(yīng)用領(lǐng)域之一养葵,由于設(shè)計良好的狀態(tài)機(jī)能夠被用來取代部分的人工智能算法,因此游戲中的每個角色或者器件都有可能內(nèi)嵌一個狀態(tài)機(jī)瘩缆」鼐埽考慮RPG游戲中城門這樣一個簡單的對象,它具有打開(Opened)庸娱、關(guān)閉(Closed)着绊、上鎖(Locked)、解鎖(Unlocked)四種狀態(tài)熟尉,如圖1所示归露。當(dāng)玩家到達(dá)一個處于狀態(tài)Locked的門時,如果此時他已經(jīng)找到了用來開門的鑰匙斤儿,那么他就可以利用它將門的當(dāng)前狀態(tài)轉(zhuǎn)變?yōu)閁nlocked靶擦,進(jìn)一步還可以通過旋轉(zhuǎn)門上的把手將其狀態(tài)轉(zhuǎn)變?yōu)镺pened腮考,從而成功地進(jìn)入城內(nèi)。
狀態(tài)玄捕、事件、轉(zhuǎn)換和動作的幾個基本概念棚放。
狀態(tài)(State)指的是對象在其生命周期中的一種狀況枚粘,處于某個特定狀態(tài)中的對象必然會滿足某些條件、執(zhí)行某些動作或者是等待某些事件飘蚯。
事件(Event)指的是在時間和空間上占有一定位置馍迄,并且對狀態(tài)機(jī)來講是有意義的那些事情。事件通常會引起狀態(tài)的變遷局骤,促使?fàn)顟B(tài)機(jī)從一種狀態(tài)切換到另一種狀態(tài)攀圈。
轉(zhuǎn)換(Transition)指的是兩個狀態(tài)之間的一種關(guān)系,表明對象將在第一個狀態(tài)中執(zhí)行一定的動作峦甩,并將在某個事件發(fā)生同時某個特定條件滿足時進(jìn)入第二個狀態(tài)赘来。
動作(Action)指的是狀態(tài)機(jī)中可以執(zhí)行的那些原子操作,所謂原子操作指的是它們在運(yùn)行的過程中不能被其他消息所中斷凯傲,必須一直執(zhí)行下去犬辰。