基於狀態機的遊戲框架

2021-09-07 11:27:32 字數 1647 閱讀 5080

有限狀態機就是乙個具有有限數量狀態,

而且可以依據對應的操作從乙個狀態變換到還有乙個狀態。

而在同一時刻僅僅能處在一種狀態下的智慧型體。

英文:finite state machine

簡稱:fsm

最簡單的狀態機:if-else

實際上if-else就是乙個最有兩種狀態的狀態機。各自是true和false

當兩種情況不能滿足我們的需求時,我們能夠用if-else if -...-else,

只是,為了方便,我們能夠使用switch-case取代

首先,定義一組不同的狀態,我們能夠使用巨集定義或者列舉:

enum estate;

定義乙個物件,儲存當前的狀態:

estate curstate = estate_min;

如今,就能夠在switch中檢測當前的狀態,並做出對應的處理

void update()

}

然後對每種狀態做不同的處理,

void onstateone()

void onstatetwo()

...

比如,對於乙個野怪。狀態一時,能夠讓它來回走動,並檢測是否有英雄單位靠近。

當檢測到有英雄靠近時,轉換為狀態二,攻擊英雄。

全部,我們還須要乙個轉換狀態的函式

void convertostate(estate dststate)

上面的狀態機是基於c語言的實現方式,當出現乙個新的狀態時,須要改動對應的**,

這樣的遊戲框架結構,使用與一般的小遊戲。

當遊戲規模較大,邏輯非常複雜後。在switch結構就會變得非常複雜。

以下是一種用利用物件導向的多型性實現的一種狀態機。

首先,我們須要定義乙個狀態的基類,並定義乙個純虛函式。

這個純虛函式用來處理當前狀態的一些邏輯。

class basestate

};

然後,我們定義乙個狀態機類。來控制狀態的轉換

class fsm

void update()

protected:

basestate* m_curstate;

};

這種話我們假設須要加入乙個新的狀態,僅僅須要新加乙個類,繼承自basestate就能夠了。

比如:定義乙個monster

class monster

protected:

fsm* m_sfm;

};

再定義兩個狀態類,在當中執行當前狀態的函式。並檢測狀態是否發生變化,

假設狀態變化了,則切換到其它狀態。

class statemove:basestate

void execute()

};class statefight:basestate

void execute()

};

這樣,乙個基於狀態機的遊戲框架就ok了。

基於狀態機的遊戲框架

有限狀態機就是乙個具有有限數量狀態,並且能夠根據相應的操作從乙個狀態變換到另乙個狀態,而在同一時刻只能處在一種狀態下的智慧型體。英文 finite state machine 簡稱 fsm 最簡單的狀態機 if else 實際上if else就是乙個最有兩種狀態的狀態機,分別是true和false ...

QT狀態機框架

qt的state machine framework是在qt4.6中引入的,其理論基礎是harel的statechart,通過定義一系列的可能狀態,以及系統如何在這些狀態中進行轉換 transitions between states 來描述整個狀態機的執行。qt的狀態機體系主要包括三部分模組 光有...

狀態機 狀態機0

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