内容简介
     《游戏人工智能编程案例精粹(修订版)》是游戏人工智能方面的经典之作,畅销多年。它展示了如何在游戏中利用专业人工智能技术,并针对实际困难问题,给出了强有力的解决方法。
  《游戏人工智能编程案例精粹(修订版)》主要讲述如何使游戏中的角色具有智能的技术。本书首先介绍游戏角色的基本属性(包括速度、质量等物理属性)及常用数学方法。接着,深入探讨游戏智能体状态机的实现。通过简单足球游戏实例,本书给出用状态机实现游戏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 的核心技术与设计哲学。阅读本书,你将不再只是一个代码的编写者,而将成为一个虚拟智能的设计者,一个能够创造出让玩家惊叹、让虚拟世界充满活力的艺术家。