內容簡介
     《遊戲人工智能編程案例精粹(修訂版)》是遊戲人工智能方麵的經典之作,暢銷多年。它展示瞭如何在遊戲中利用專業人工智能技術,並針對實際睏難問題,給齣瞭強有力的解決方法。
  《遊戲人工智能編程案例精粹(修訂版)》主要講述如何使遊戲中的角色具有智能的技術。本書首先介紹遊戲角色的基本屬性(包括速度、質量等物理屬性)及常用數學方法。接著,深入探討遊戲智能體狀態機的實現。通過簡單足球遊戲實例,本書給齣用狀態機實現遊戲AI的例子。在圖論部分,本書詳細介紹圖在遊戲中的用途及各種不同的圖搜索算法,並用一章的篇幅討論瞭遊戲中路徑規劃是如何完成的。此外,本書還對目標驅動的智能體的實現、觸發器與模糊邏輯在遊戲中的運用進行瞭討論。為使智能體行為更加豐富、靈活、易於實現,本書還介紹瞭遊戲腳本語言的優點,並以Lua腳本語言為例進行瞭說明。
  《遊戲人工智能編程案例精粹(修訂版)》適閤對遊戲AI開發感興趣的愛好者和遊戲AI開發人員閱讀和參考。     
作者簡介
     Mat
  Buckland是一位自由職業程序員和技術作傢。他在20世紀80年代為ZX
  Spectrum編寫Waddington’s
  Monopoly的時候,對AI産生瞭興趣,多年以來,他對於讓計算機“思考”的熱情絲毫沒有減退。他是AI
  Techniques
  for
  Game
  Programming一書的作者,也是專注於AI教程的知名網站ai-junkie.com的創始人。他是AI
  Interface
  Standards
  Committee的成員,還是European
  Game
  Developers
  Conference圓桌會議的主持人。       
內頁插圖
          目錄
   第1章 數學和物理學初探 
 1.1 數學 
 1.1.1 笛卡爾坐標係 
 1.1.2 函數和方程 
 1.1.3 三角學 
 1.1.4 矢量 
 1.1.5 局部空間和世界空間 
 1.2 物理學 
 1.2.1 時間 
 1.2.2 距離 
 1.2.3 質量 
 1.2.4 位置 
 1.2.5 速度 
 1.2.6 加速度 
 1.2.7 力 
 1.3 總結  
 第2章 狀態驅動智能體設計 
 2.1 什麼是有限狀態機 
 2.2 有限狀態機的實現 
 2.2.1 狀態變換錶 
 2.2.2 內置的規則 
 2.3 West World項目 
 2.3.1 BaseGameEntity類 
 2.3.2 Miner類 
 2.3.3 Miner狀態 
 2.3.4 重訪問的狀態設計模式 
 2.4 使State基類可重用 
 2.5 全局狀態和狀態翻轉(State Blip) 
 2.6 創建一個StateMachine類 
 2.7 引入Elsa 
 2.8 為你的FSM增加消息功能 
 2.8.1 Telegram的結構 
 2.8.2 礦工Bob和Elsa交流 
 2.8.3 消息發送和管理 
 2.8.4 消息處理 
 2.8.5 Elsa做晚飯 
 2.8.6 總結  
 第3章 如何創建自治的可移動遊戲智能體 
 3.1 什麼是自治智能體 
 3.2 交通工具模型 
 3.3 更新交通工具物理屬性 
 3.4 操控行為 
 3.4.1 Seek(靠近) 
 3.4.2 Flee(離開) 
 3.4.3 Arrive(抵達) 
 3.4.4 Pursuit(追逐) 
 3.4.5 Evade(逃避) 
 3.4.6 Wander(徘徊) 
 3.4.7 Obstacle Avoidance(避開障礙) 
 3.4.8 Wall Avoidance(避開牆) 
 3.4.9 Interpose(插入) 
 3.4.10 Hide(隱藏) 
 3.4.11 Path Following(路徑跟隨) 
 3.4.12 Offset Pursuit(保持一定偏移的追逐) 
 3.5 組行為(Group Behaviors) 
 3.5.1 Separation(分離) 
 3.5.2 Alignment(隊列) 
 3.5.3 Cohesion(聚集) 
 3.5.4 Flocking(群集) 
 3.6 組閤操控行為(Combining Steering Behaviors) 
 3.6.1 加權截斷總和(Weighted Truncated Sum) 
 3.6.2 帶優先級的加權截斷纍計(Weighted Truncated Running Sum with Prioritization) 
 3.6.3 帶優先級的抖動(Prioritized Dithering) 
 3.7 確保無重疊 
 3.8 應對大量交通工具:空間劃分 
 3.9 平滑  
 第4章 體育模擬(簡單足球) 
 4.1 簡單足球的環境和規則 
 4.1.1 足球場 
 4.1.2 球門 
 4.1.3 足球 
 4.2 設計AI 
 4.2.1 SoccerTeam類 
 4.2.2 場上隊員 
 4.2.3 守門員 
 4.2.4 AI使用到的關鍵方法 
 4.3 使用估算和假設 
 4.4 總結  
 第5章 圖的秘密生命 
 5.1 圖 
 5.1.1 一個更規範化的描述 
 5.1.2 樹 
 5.1.3 圖密度 
 5.1.4 有嚮圖(Digraph) 
 5.1.5 遊戲AI中的圖 
 5.2 實現一個圖類 
 5.2.1 圖節點類(GraphNode Class) 
 5.2.2 圖邊類(GraphEdge Class) 
 5.2.3 稀疏圖類(SparseGraph Class) 
 5.3 圖搜索算法 
 5.3.1 盲目搜索(Uninformed Graph Searches) 
 5.3.2 基於開銷的圖搜索(cost-based graph searchs) 
 5.4 總結  
 第6章 用腳本,還是不用?這是一個問題 
 6.1 什麼是腳本語言 
 6.2 腳本語言能為你做些什麼 
 6.2.1 對話流 
 6.2.2 舞颱指示(Stage Direction) 
 6.2.3 AI邏輯 
 6.3 在Lua中編寫腳本 
 6.3.1 為使用Lua設置編譯器 
 6.3.2 起步 
 6.3.3 Lua中的石頭剪子布 
 6.3.4 與C/C++接口 
 6.3.5 Luabind來救援瞭! 
 6.4 創建一個腳本化的有限狀態自動機 
 6.4.1 它如何工作? 
 6.4.2 狀態(State) 
 6.5 有用的鏈接 
 6.6 並不是一切都這麼美妙 
 6.7 總結  
 第7章 概覽《掠奪者》遊戲 
 7.1 關於這個遊戲 
 7.2 遊戲體係結構概述 
 7.2.1 Raven_Game類 
 7.2.2 掠奪者地圖 
 7.2.3 掠奪者武器 
 7.2.4 彈藥(Projectile) 
 7.3 觸發器 
 7.3.1 觸發器範圍類(TriggerRegion) 
 7.3.2 觸發器類(Trigger) 
 7.3.3 再生觸發器(Respawning Trigger) 
 7.3.4 供給觸發器(Giver-Trigger) 
 7.3.5 武器供給器(Weapon Givers) 
 7.3.6 健康值供給器(Health Giver) 
 7.3.7 限製生命期觸發器(Limited Lifetime Trigger) 
 7.3.8 聲音通告觸發器(Sound Notification Trigger) 
 7.3.9 管理觸發器:觸發器係統(TriggerSystem)類 
 7.4 AI設計的考慮 
 7.5 實現AI 
 7.5.1 製定決策(Decision Making) 
 7.5.2 移動(Movement) 
 7.5.3 路徑規劃(Path Planning) 
 7.5.4 感知(Perception) 
 7.5.5 目標選擇(Target Selection) 
 7.5.6 武器控製(Weapon Handling) 
 7.5.7 把所有東西整閤起來 
 7.5.8 更新AI組件 
 7.6 總結  
 第8章 實用路徑規劃 
 8.1 構建導航圖 
 8.1.1 基於單元 
 8.1.2 可視點 
 8.1.3 擴展圖形 
 8.1.4 導航網 
 8.2 《掠奪者》遊戲導航圖 
 8.2.1 粗顆粒狀的圖 
 8.2.2 細粒狀的圖 
 8.2.3 為《掠奪者》導航圖添加物件 
 8.2.4 為加速就近查詢而使用空間分割 
 8.3 創建路徑規劃類 
 8.3.1 規劃到達一個位置的一條路徑 
 8.3.2 規劃路徑到達一個物件類型 
 8.4 節點式路徑或邊式路徑 
 8.4.1 注釋邊類示例 
 8.4.2 修改路徑規劃器類以容納注釋邊 
 8.4.3 路徑平滑 
 8.4.4 降低CPU資源消耗的方法 
 8.5 走齣睏境狀態 
 8.6 總結  
 第9章 目標驅動智能體行為 
 9.1 勇士埃裏剋的歸來 
 9.2 實現 
 9.2.1 Goal_Composite::Process Subgoals 
 9.2.2 Goal_Composite::Remove AllSubgoals 
 9.3 《掠奪者》角色所使用的目標例子 
 9.3.1 Goal_Wander 
 9.3.2 Goal_TraverseEdge 
 9.3.3 Goal_FollowPath 
 9.3.4 Goal_MoveToPosition 
 9.3.5 Goal_AttackTarget 
 9.4 目標仲裁 
 9.4.1 計算尋找一個健康物件的期望值 
 9.4.2 計算尋找一種特殊武器的期望值 
 9.4.3 計算攻擊目標的期望值 
 9.4.4 計算尋找地圖的期望值 
 9.4.5 把它們都放在一起 
 9.5 擴展 
 9.5.1 個性 
 9.5.2 狀態存儲 
 9.5.3 命令排隊 
 9.5.4 用隊列編寫腳本行為 
 9.6 總結  
 第10章 模糊邏輯 
 10.1 普通集閤 
 集閤運算符 
 10.2 模糊集閤 
 10.2.1 用隸屬函數來定義模糊的邊界 
 10.2.2 模糊集閤運算符 
 10.2.3 限製詞 
 10.3 模糊語言變量 
 10.4 模糊規則 
 10.4.1 為武器的選擇設計模糊語言變量 
 10.4.2 為武器的選擇設計規則集 
 10.4.3 模糊推理 
 10.5 從理論到應用:給一個模糊邏輯模塊編碼 
 10.5.1 模糊模塊類(FuzzyModule) 
 10.5.2 模糊集閤基類(FuzzySet) 
 10.5.3 三角形的模糊集閤類 
 10.5.4 右肩模糊集閤類 
 10.5.5 創建一個模糊語言變量類 
 10.5.6 為建立模糊規則而設計類 
 10.6 《掠奪者》中是如何使用模糊邏輯類的 
 10.7 庫博方法 
 10.7.1 模糊推理和庫博方法 
 10.7.2 實現 
 10.8 總結  
 附錄A C++模闆 
 附錄B UML類圖 
 附錄C 設置你的開發環境  
 跋 
 參考文獻       
前言/序言
       
				 
				
				
					《遊戲人工智能編程案例精粹(修訂版)》:探索智能交互的無限可能  在這個日新月異的數字娛樂時代,遊戲早已不僅僅是簡單的消遣,而是一種沉浸式的體驗,是虛擬世界中復雜互動的藝術。而驅動這些虛擬世界栩栩如生、充滿挑戰與驚喜的核心,便是日益精進的遊戲人工智能(AI)。《遊戲人工智能編程案例精粹(修訂版)》並非一本介紹具體遊戲開發流程的教程,它更像是一扇通往遊戲 AI 深度探索的窗口,為讀者呈現的是一套精選的、經過實踐檢驗的 AI 編程思想與方法論。本書將目光聚焦於“精粹”,旨在提煉齣遊戲 AI 領域中最具價值、最能體現智能交互本質的編程範例,並以修訂版的形式,注入最新的技術洞察和更成熟的理論闡述,力求為廣大遊戲開發者、AI 研究者以及對遊戲智能充滿好奇的讀者,提供一份詳實且富有啓發性的參考。  深入剖析智能行為的基石:路徑查找與導航  在任何一個虛擬的遊戲世界中,智能角色的移動都是其最基本也是最核心的行為之一。無論是敵人追擊玩傢,隊友協同作戰,還是NPC在城鎮中自然地穿梭,背後都離不開高效且智能的路徑查找與導航係統。《遊戲人工智能編程案例精粹(修訂版)》將深入剖析這一基礎但至關重要的領域。  本書不會止步於介紹 A 算法的錶麵原理,而是會深入探討其在各種復雜遊戲場景下的優化與應用。例如,在大型開放世界遊戲中,如何高效地構建和維護尋路圖(Navigation Mesh),如何在動態變化的地圖環境中實時更新尋路信息,以及如何處理大規模尋路請求的性能瓶頸,這些都是本書將著力解答的疑問。我們會探討如何結閤 A 算法與其他啓發式搜索方法,例如 Jump Point Search,以在特定地形和遊戲類型中獲得更優的性能。  此外,本書還將拓展到更復雜的導航技術。例如,在需要精細控製角色行為的遊戲中,如策略遊戲或模擬經營遊戲,簡單的點對點尋路可能無法滿足需求。我們將介紹如何運用行為樹(Behavior Trees)與路徑查找相結閤,讓角色在執行復雜任務的同時,能夠根據環境變化和目標狀態,動態規劃其移動路徑。我們還會討論如何實現動態避障,讓角色能夠智能地規避移動過程中的障礙物,甚至預測其他角色的移動軌跡,從而實現流暢自然的避讓。對於需要高度交互性的角色,如在動作遊戲中,本書還將觸及基於速度場的導航(Flow-based Navigation)和人工勢場法(Artificial Potential Fields),解釋它們如何在實時動態的環境中引導角色進行平滑的移動和集結點。  構建多樣的智能體:決策與規劃的藝術  除瞭移動,讓遊戲角色擁有“思考”和“決策”的能力,是構建令人信服的智能體的關鍵。《遊戲人工智能編程案例精粹(修訂版)》將花費大量篇幅,係統地闡述遊戲 AI 的決策與規劃機製。  本書的核心章節將圍繞著決策樹(Decision Trees)和有限狀態機(Finite State Machines, FSMs)展開。但我們不會停留在這些經典方法的簡單實現,而是會深入分析它們在設計模式上的演進,例如如何構建層次化的決策樹,如何實現狀態之間的平滑過渡,以及如何避免 FSMs 帶來的“狀態爆炸”問題。我們將通過具體的案例,展示如何利用這些工具來模擬簡單敵人的巡邏、搜尋、攻擊等基本行為。  更進一步,本書將重點介紹行為樹(Behavior Trees)作為一種更靈活、更強大的決策框架。我們將詳細講解行為樹的節點類型(如 Sequence, Selector, Parallel, Decorator, Condition, Action),並演示如何將行為樹應用於復雜的遊戲 AI 設計,例如控製一個具有多種攻擊模式、防禦策略和逃跑意圖的敵人。本書將提供一係列使用行為樹構建復雜 AI 邏輯的實用案例,包括如何讓角色在不同情況下選擇不同的技能,如何實現小隊協作的戰術行為,以及如何設計具有學習能力的 NPC。  除瞭行為樹,本書還將探討更高級的規劃技術,如有限自動機(Finite Automata)和基於效用(Utility-based)的 AI。我們將解釋如何利用有限自動機來模擬具有更細粒度狀態轉移的 AI,例如需要精確控製技能釋放時機的角色。而基於效用 AI 的章節,則會展示如何讓 AI 根據當前環境的“效用值”來做齣最優選擇,這在需要 AI 能夠權衡利弊、做齣長期規劃的遊戲中尤為重要。例如,在資源管理或戰略部署方麵,基於效用 AI 可以讓角色更有效地分配資源,做齣最優的戰略決策。  理解玩傢行為:感知與反饋的機製  一個真正“智能”的遊戲 AI,不僅需要自身的決策能力,還需要能夠理解和響應玩傢的行為。因此,《遊戲人工智能編程案例精粹(修訂版)》將深入探討遊戲 AI 的感知與反饋機製。  本書將講解如何通過各種傳感器來模擬 AI 的“感官”。例如,如何設計視綫檢測(Line of Sight)和聽覺檢測(Auditory Detection),讓 AI 能夠察覺到玩傢的存在和活動。我們會探討如何利用碰撞檢測(Collision Detection)和觸發器(Triggers)來感知玩傢與環境的交互。  更重要的是,本書將深入分析 AI 如何根據感知到的信息做齣反應。這涉及到模式識彆(Pattern Recognition)和意圖推斷(Intent Inference)等概念。例如,AI 如何根據玩傢的移動速度、攻擊模式來判斷其意圖,並做齣相應的戰術調整。我們將通過實例,展示如何設計能夠適應玩傢行為的 AI,例如當玩傢采取某種戰術時,AI 會自動調整其防禦策略或反擊模式。  此外,本書還將探討 AI 的“學習”能力,雖然不是嚴格意義上的機器學習,但通過一些程序化的學習方法,可以讓 AI 在遊戲過程中逐漸優化其行為。例如,通過記錄玩傢的行為模式,AI 可以調整其難度麯綫,或者在多人遊戲中,AI 可以根據不同玩傢的特點來調整其對策。我們將介紹一些簡單的策略,如基於規則的強化學習,如何讓 AI 在重復的遊戲過程中,逐漸學會更有效的策略。  營造真實世界的模擬:群體行為與協同  現代遊戲中的群體行為和智能體之間的協同,是提升遊戲體驗沉浸感的重要因素。《遊戲人工智能編程案例精粹(修訂版)》將提供一套係統的方法論,來設計和實現令人信服的群體 AI。  本書將從簡單的“群體聚集”(Flocking)和“群體跟隨”(Boids)算法入手,解釋如何通過簡單的規則來模擬鳥群、魚群等自然界中的群體行為。我們將深入分析 Craig Reynolds 的 Boids 模型,並探討其在遊戲中的應用,例如模擬城市中人群的移動,或者軍隊的集結。  更進一步,本書將探討如何在群體 AI 中融入更復雜的協作行為。例如,在策略遊戲中,如何讓小隊單位協同作戰,互相支援,實現戰術配閤。我們將介紹如何利用行為樹或狀態機來設計群體 AI 的指揮係統,讓群體中的個體能夠根據整體目標和周圍環境,做齣協同的決策。  本書還將涉及“博弈論”(Game Theory)在群體 AI 中的應用。例如,如何設計能夠進行“囚徒睏境”博弈的 NPC,或者在多人遊戲中,如何讓 AI 模擬齣閤作與背叛的復雜互動。這將有助於構建更具策略性和深度的遊戲體驗。  不僅僅是代碼:AI 的設計原則與倫理思考  《遊戲人工智能編程案例精粹(修訂版)》深知,一個優秀的遊戲 AI 不僅僅是技術實現,更需要深刻的設計理念和對倫理的考量。《遊戲人工智能編程案例精粹(修訂版)》將超越純粹的技術講解,引導讀者思考 AI 設計中的關鍵原則。  本書將探討如何平衡 AI 的挑戰性與玩傢的樂趣。過強的 AI 可能會讓玩傢感到挫敗,而過弱的 AI 則會破壞遊戲的代入感。我們將介紹如何通過難度麯綫的設計、AI 的“作弊”機製(巧妙地利用遊戲規則)以及玩傢反饋機製,來找到這個微妙的平衡點。  此外,本書還將觸及遊戲 AI 的倫理問題。例如,如何避免 AI 産生不良的歧視性行為,如何確保 AI 的設計不會對玩傢造成心理上的負麵影響,以及在設計具有自主學習能力的 AI 時,如何進行有效的約束和引導。這些思考將幫助開發者們構建更負責任、更受歡迎的遊戲。  修訂版的價值:洞察與前瞻  《遊戲人工智能編程案例精粹(修訂版)》的“修訂”二字,意味著本書並非一成不變的陳述,而是吸收瞭近年來遊戲 AI 領域的新進展與新思考。本書在原有經典案例的基礎上,增加瞭對機器學習在遊戲 AI 中新興應用的探討,例如如何利用強化學習(Reinforcement Learning)來訓練更智能的 AI 代理,如何使用深度學習(Deep Learning)來處理更復雜的感知任務,例如圖像識彆和自然語言處理,從而為遊戲中的 NPC 賦予更強大的智能。  本書也將審視當前遊戲 AI 發展趨勢,例如程序化生成內容(Procedural Content Generation)與 AI 的結閤,以及如何利用 AI 來創造更具動態性、更具適應性的遊戲世界。讀者將從中獲得關於遊戲 AI 未來發展方嚮的寶貴洞察。  總而言之,《遊戲人工智能編程案例精粹(修訂版)》是一本獻給所有緻力於在虛擬世界中創造生命、賦予智能的開發者的寶典。它以精選的案例為載體,以深入淺齣的方式,揭示瞭遊戲 AI 的核心技術與設計哲學。閱讀本書,你將不再隻是一個代碼的編寫者,而將成為一個虛擬智能的設計者,一個能夠創造齣讓玩傢驚嘆、讓虛擬世界充滿活力的藝術傢。