狀態機 狀態機0

2021-06-29 13:19:07 字數 1311 閱讀 1332

近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術

個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不

是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,

而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過

這種模式是把狀態切換條件放到各個具體的狀態中,算是硬編碼到**邏輯

最初的設計,演化,提煉,到最後實現乙個可以輕鬆擴充套件的版本,在最後一

這裡為什麼標題是狀態機0,因為這裡不會涉及到**部分,主要是講一些

偏概念性的東西,包括:狀態,有限狀態機,事件

狀態:指物質系統所處的狀況,由一組物理量來表徵。

通俗點說,如戰鬥場景中的怪,有攻擊狀態,待機狀態,行走狀態,中毒狀態

有限狀態機:是乙個裝置,或者是乙個裝置模型,具有有限數量的狀態,它可以

在任何給定的時間根據輸入進行操作,使得從乙個狀態變換到另乙個狀態,或者

是促使乙個輸出或者一種行為的發生。乙個有限狀態機在任何瞬間只能處在一種狀態。

通俗點說就是有限狀態機內部封裝了狀態的切換,根據外部事件去切換狀態。

事件:事件是可以被物件識別的操作,如按下確定按鈕,選擇某個單選按鈕或者核取方塊。

每一種控制項物件有自己可以識別的事件,如窗體的載入、單擊、雙擊等事件,編輯框

(文字框)的文字改變事件,等等。

三者的關係:事件觸發物件狀態的變換,通常情況下,有限狀態機在接收到外部事件後,

會根據外部的事件引數,匹配狀態間變換的規則,決定是否進行狀態變換。

簡單流程:事件--->狀態機--->匹配狀態切換規則--->是(切換狀態):否(保持原狀態)

舉個栗子:

早上a開車去上班,a進了車庫走向車,開啟了車門,進了駕駛座,拿出車鑰匙啟動了車,

系上安全帶,踩了油門將車開出了車庫,往公司的方向行駛,一路上鳥語花香,哦不,是車水

馬龍,前面的車減速,a踏了剎車踏板,車速慢慢降下來,最後停了下來,等紅燈。。。。

此處省略好多字,因為這是個漫長的過程,經過n久的塞車,a到了公司樓下的車庫,拔出了車

鑰匙。。。。。

分析:用鑰匙啟動車(事件),(經過車內部的轉換變為)啟動狀態

踩油門使車行駛(事件),(經過車內部的轉換變為)行駛狀態

踏了剎車踏板(事件),(經過車內部的轉換變為)剎車狀態

拔出鑰匙停車(事件),(經過車內部的轉換變為)停車狀態

(ps:物件導向的封裝性在這裡體現出來了,車只是提供介面,封裝了內部的複雜的變換,

只是呼叫一下介面就能輕鬆變換行為狀態,封裝的意義也在此)

先講到這裡,不多扯,下來一篇會開始講戰鬥中兵種的狀態初步設計

python 狀態機 Python 狀態機

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

0 狀態機模組

gui涉及到挺多的狀態改變 以前一直用 if.else 來判斷 最近讀了設計模式 發現有個狀態模式 隨後發現了狀態機這個東西 python的狀態機模組挺多的 不過好像很多都不更新了.推薦2個狀態機模組 但是也沒有太深入的使用經驗 就跑跑例子 以後有更詳細的pyqt例子再補上 1 pip instal...

狀態機小記

工作上有個功能模組用到了類似狀態機的東東,於是上網科普了一番。狀態機是由一系列輸入驅動,然後系統由其中一種狀態轉換為另一種狀態並產生某種輸出,這樣子的乙個系統叫做狀態機。狀態機分為兩種,一種是輸出只和系統狀態有關,叫做摩爾狀態機,另一種是輸出和輸入以及系統狀態都相關,叫做公尺莉狀態機。有關輸入 狀態...