|
談到人工智能(AI),這個話題就太大了;大學里有《人工智能教程》專門講這方面的知識,什么大名鼎鼎的人工神經(jīng)網(wǎng)絡(luò)、遺傳算法等等均可一窺究竟,這里如贅述似乎有些班門弄斧,我們暫且丟它一邊去吧。
本節(jié),我的主要目的是與大家共同探討AI在RPG游戲中的應用。看過之前教程的朋友一定不會陌生,A*算法就是其中的一個重要組成部分;而本系列Demo中則使用了更為高級的改進型A*算法,不僅優(yōu)化了性能,同時也大幅提升了玩家的操控體驗。除此之外,AI更常見于RPG游戲中的角色,接下來我將引領(lǐng)大家循著AI的足跡,逐步探尋Silverlight網(wǎng)頁游戲中的AI系統(tǒng)設(shè)計與Demo實現(xiàn)。
以一份網(wǎng)上見到的AI系統(tǒng)設(shè)計文檔作為開始,我們不妨首先分析下它的主體思路,大可斷定其為直觀的解析當前國內(nèi)即時類MMORPG主流角色AI設(shè)計:以古老而傳統(tǒng)的有限狀態(tài)機FSM(Finite State Machine)固定決策樹AI為原型,簡單而直接。當然,為了讓游戲體驗更加有趣且不至于顯得一成不變,我會考慮引入基于Random的各類概率機制,即使用隨機性和靈活性更強一些的模糊狀態(tài)機FuSM(Fuzzy State Machine)。所有非控角色的行為完全無規(guī)律可循難道不會更吸引人嗎?
有了大體思路后,接下來我們要做的就是將復雜而龐大的AI系統(tǒng)簡化,使之更好理解并最終轉(zhuǎn)化成Silverlight游戲程序代碼。縱橫剖析,我更青睞于按照策略AI (tactic)與行為AI (action)兩部分予以劃分。所謂“策略AI”即角色何時采取何種決策,而“行為AI”則為角色按決策執(zhí)行何種行動。
基于以上方案,我首先在角色控件的內(nèi)部添加一個計時器用于AI邏輯循環(huán),其中策略AI間隔3秒執(zhí)行一次,用于敵對角色的搜捕(索敵);行為AI與角色動作切幀率同步,根據(jù)實時情判斷應該執(zhí)行警戒/追擊/攻擊/轉(zhuǎn)向/逃逸/或其他等行動;而這兩種AI在角色控件中分別對應兩個事件,對于主角來說,玩家的操作已相當于主角的策略,因此主角只需注冊行為AI事件,而其他非控角色則需要同時兼具兩者以具備完整的AI能力:
/// <summary>
/// 動作(幀)切換時觸發(fā)
/// </summary>
public event EventHandler ActionTrigger;
/// <summary>
/// 以1秒為基礎(chǔ)單位的時間間隔觸發(fā)器
/// </summary>
public event EventHandler<IntervalTriggerArgs> IntervalTrigger;
/// <summary>
/// 間隔觸發(fā)器參數(shù)
/// </summary>
public class IntervalTriggerArgs : EventArgs {
public int Count { get; set; }
}
int tickCount = 0;
IntervalTriggerArgs intervalTriggerArgs = new IntervalTriggerArgs();
void intervalTrigger_Tick(object sender, EventArgs e) {
intervalTriggerArgs.Count = tickCount;
if (IntervalTrigger != null) { IntervalTrigger(this, intervalTriggerArgs); }
tickCount = tickCount == Int32.MaxValue ? 0 : tickCount + 1;
}
NET技術(shù):Silverlight 2.5D RPG游戲技巧與特效處理:(十一)AI系統(tǒng),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。