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