ai引擎中最簡單的狀態機

2021-04-23 11:30:10 字數 773 閱讀 4808

所謂狀態機,可以用兩個類來表示

第乙個類:狀態(描述每個狀態)

第二個類:狀態機(管理狀態)

舉個例子:一架坦克有兩個狀態

狀態一:隨意移動

狀態二:開炮

當坦克處於狀態一時,如果有敵軍坦克進入射程,則進入狀態二

當坦克處於狀態二時,如果敵軍坦克離開射程,則進入狀態一

這就可以用兩個基類,兩個派生表示。

class 狀態基類

class 隨意移動狀態 : public 狀態基類

}class 開炮狀態 : public 狀態基類

}class 狀態機//這個是用來管理所有狀態的

}離開所有狀態();

新增狀態(狀態x)

每幀邏輯更新()

private:

vector《狀態基類*> 狀態列表; 

狀態基類* 當前狀態 

}這樣,當坦克處於隨意移動狀態時,每幀迴圈就呼叫隨意移動狀態的->每幀邏輯更新();控制坦克隨機移動。

那麼,如何判斷並設定坦克該處於哪個狀態呢?

用乙個aicontrol類將狀態機包裹起來並判斷目前坦克應該處於哪個狀態,然後呼叫狀態機的-》進入狀態()。

class aicontrol

每幀邏輯更新()否則}

private:

坦克 m_坦克

狀態機 m_狀態機   

}設定好aicontrol了以後,在遊戲邏輯裡怎麼呼叫呢?

只要在遊戲迴圈邏輯函式裡

這就是最簡單的乙個狀態機……呵呵

狀態機簡單介紹

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

tcp 擁塞控制引擎 狀態機

tcp核心 流量控制 擁塞控制 流量控制 滑動視窗來實現,防止接收方能夠處理過來 擁塞控制 防止過多的包被傳送到網路中,避免出現網路負載過大 說一說 擁塞控制 擁塞控制狀態機的狀態有五種,分別是open,disorder,cwr,recovery和loss狀態 四個演算法為慢啟動,擁塞避免,擁塞發生...

簡單輕量狀態機

keystate 狀態類 namespace fsm endregion 子狀態名稱拼接符 public const char childsplitchar 狀態名 private string name 狀態名稱 protected string name 符號 if name value 狀態方...