首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 開發 WPF/Silverlight 動畫與遊戲系列教程(二十九):AI 追蹤者——怪物智能實作

     編輯:關於C#

前言

主角功能完善,怪物仍是靜止靶子。賦予精靈 AI(人工智能),以「追蹤者」為基礎:發現敵對→鎖定→移動攻擊→目標逃跑則持續追擊。佔 MMORPG AI 80% 以上。本節實作怪物追蹤者 AI。

重構:方法通用化

主角與怪物同為 QXSpirit,將移動、攻擊、尋路等方法加入 QXSpirit spirit 參數,把 Leader 改為 spirit,所有精靈復用。例 ArriveTarget:

private bool ArriveTarget(QXSpirit spirit) {
    return (Super.storyboard.ContainsKey(spirit.Name) && SpiritStoryBoard(spirit.Name).GetCurrentProgress(spirit) == 1);
}

用字典管理所有精靈動畫板:Dictionary<string, Storyboard> storyboard。移動時檢查鍵值存在否,不存在則新建。Lambda 取得指定 Storyboard:

private Storyboard SpiritStoryBoard(string key) {
    return Super.storyboard.Single(x => x.Key == key).Value;
}

停止/死亡時移除 Storyboard 釋放資源。

AI 啟動邏輯

每怪物賦予索敵範圍 SeekRange。玩家進入該圓形區域(中心怪物座標,半徑 SeekRange)即鎖定攻擊。用輔助執行緒(1 秒掃描一次)實現「引怪易、甩怪難」:距離 < SeekRange 即引怪;距離 > SeekRange 持續 1 秒才甩怪。邏輯:

private void RefreshFace() {
    if (spirit.VLife != 0 && Super.InCircle(Leader.X, Leader.Y, spirit.X, spirit.Y, spirit.SeekRange) && IsOpposition(spirit, Leader)) {
        spirit.LockObject = Leader.Name;
    } else {
        spirit.LockObject = null;
    }
}

測試成果

怪物具備索敵與戰鬥 AI。下節將呈現魔法盛宴,敬請期待。

出處:https://alamiye010.cnblogs.com/

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved