簡單輕量狀態機

2021-10-02 05:32:15 字數 3834 閱讀 5273

keystate 狀態類

namespace fsm

#endregion

///

/// 子狀態名稱拼接符

///

public

const

char childsplitchar =

'\\'

;///

/// 狀態名

///

private

string _name;

///

/// 狀態名稱

///

protected

string name

』符號");

}if(_name !=

value)}

}///

/// 狀態方法

///

protected action changestateaction

///

/// 子狀態

///

protected dictionary<

string

, keystate> childstates

=new

dictionary

<

string

,keystate

>()

;///

/// 獲取子狀態索引

///

///

///

protected

keystate

this

[string statenamepath]

else

} state = _state;}if

(state ==

null

)throw

newexception

($"$找不到指定的狀態");

return state;}}

///

/// 狀態資料上下文

///

public

object currentcontext

protected

keystate()

///

/// 建立狀態機

///

///

///

public

keystate

(string statename, action<

object

> changestateaction)

///

/// 建立帶多個子狀態的狀態機

///

///

///

public

keystate

(string statename,

params keystate[

] childstates)

}///

/// 新增多個子狀態機

///

///

public

virtual

void

addstate

(params keystate[

] multistates)

}///

/// 新增乙個子狀態機

///

///

public

virtual

void

addstate

(keystate state)

狀態")

; childstates.

add(state.name, state);}

///

/// 新增乙個子狀態機

///

///

///

public

virtual

void

addstate

(string statename, action changestateaction)

=>

addstate

(new

keystate

(statename, changestateaction));

///

/// 執行狀態機改變方法

///

///

public

virtual

void

onchangestate

(object context)

}}

keyfsm 狀態管理類

namespace fsm

///

/// 上乙個狀態機完整名稱

///

public

string laststate

///

/// 當前狀態機完整名稱

///

private

newstring name;

///

/// 當前狀態機完整名稱

///

public

string currentstate

}}///

/// 初始化狀態機

///

///

///

public

void

initstate

(string statename,

object context =

null)"

);else

}///

/// 更改狀態

///

///

///

public

void

changestate

(string statename,

object context =

null

)///

/// 更改狀態,更改失敗時回退狀態

///

/// 回退狀態

/// 更改狀態

/// 資料上下文

/// null執行成功,執行失敗,返回異常內容

public

exception

changestate

(string backstatename,

string newstatename,

object context =

null

)catch

(exception exc)

return error;

}///

/// 更改失敗時回退狀態

///

/// 回退狀態

/// 更改狀態

/// 執行失敗,返回異常內容

/// 資料上下文

/// true執行成功,false執行失敗

public

boolean

changestate

(string backstatename,

string newstatename,

outexception exception,

object context =

null

)///

/// 呼叫該方法,無效

///

///

[obsolete

("呼叫該方法,無效"

,true)]

public

override

void

onchangestate

(object context)

}}

狀態機簡單介紹

可以把狀態機的要素分為4個要素,即 現態 條件 動作 次態。現態 和 條件 是因,動作 和 次態 是果。1 現態 是指當前所處狀態 2 條件 又稱為 事件 當條件被滿足時,將會觸發乙個動作,或者執行一次狀態的遷移。3 動作 條件滿足後執行的動作。動作不是必須的,當條件滿足後,也可以不執行任何動作,直...

狀態機 狀態機0

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

python 狀態機 Python 狀態機

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