游戏人工智能编程案例精粹(修订版)

游戏人工智能编程案例精粹(修订版)

赞助商:FreeBuf官方

价格:17金币

已售:0剩余:99

产品描述

内容提要:

  《游戏人工智能编程案例精粹(修订版)》是游戏人工智能方面的经典之作,畅销多年。它展示了如何在游戏中利用专业人工智能技术,并针对实际困难问题,给出了强有力的解决方法。   《游戏人工智能编程案例精粹(修订版)》主要讲述如何使游戏中的角色具有智能的技术。本书首先介绍游戏角色的基本属性(包括速度、质量等物理属性)及常用数学方法。接着,深入探讨游戏智能体状态机的实现。通过简单足球游戏实例,本书给出用状态机实现游戏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圆桌会议的主持人。

编辑推荐:

游戏开发畅销经典图书,提供权威专业解决方案

媒体评论:

“本书不仅是一本适合游戏编程初学者的入门教材,对于高级程序员或专家也是一个不错的选择。本书简洁明了,内容几乎覆盖AI方面所有重要学科,从基础数学和物理到图论年和Lua脚本编写,再到为程序员创建一些极为精妙的代理行为所需的工具,等等。本书在软件工程方面的内容同样也值得借鉴。演示游戏在代码实例中使用了我们极为熟悉的设计模式。我要将此书推荐给所有游戏程序员。这是一本很值得一读的书,它传播着奇思妙想!”    ——Chris Keegan    英国Climax Studios公司技术总监,《恶灵骑士》开发者之一    “本书的问世,为许多难题提供了权威的专业解决方案,比如移动和朝向问题。Mat引导读者为真实的游戏构建坚实的基石。本书对于初涉AI领域的人来说是必备之选,对于经验丰富的专家,书中也提供了很多技巧。我要是在8年前就能读到这本书就好了。”    ——Jeff Orkin   英国Monolith Productions公司AI架构师,《无人永生2》、《恐惧》开发者之一   “……将许多真正有用的信息以一种让我不感到头昏的方式美妙地组合在了一起。”   ——Gareth Lewis 英国Lionhead Studios公司项目主管,《黑与自2》开发者之一    “本书的每一章都是由浅入深地介绍一项游戏人工智能技术,并围绕该技术给出大量的代码和文字实例。本书通俗易懂,通过将理论知识应用于自己的系统开发,或者通过扩展并理解某环境下的代码实例,你可以加深对游戏人工智能编程的理解。本书把每个独立的技术点组合在一起,形成各种各样的完整游戏环境。在这些环境下,你可以很好地理解一个庞大的游戏架构下的各个互动系统之间的关系。”    ——Mike Ducker 英国Lionhead Studios公司AI架构师,《神鬼寓言》开发者之一    “通过一些容易模仿且描述得很好的实例,Mat向我们展示了如何使用大部分只有专业AI程序员才会使用的技术。对于初学者来说,这正是一本很棒的导论;而如果你是经验丰富的程序员,它同样也是一本极佳的参考手册。    ——Eric Martel 法国育碧游戏公司AI程序师,《孤岛惊魂》(XBox)开发者之一

目录:

目 录

第1章 数学和物理学初探 1
1.1 数学 1
1.1.1 笛卡尔坐标系 1
1.1.2 函数和方程 2
1.1.3 三角学 8
1.1.4 矢量 13
1.1.5 局部空间和世界空间 19
1.2 物理学 20
1.2.1 时间 20
1.2.2 距离 21
1.2.3 质量 21
1.2.4 位置 21
1.2.5 速度 21
1.2.6 加速度 23
1.2.7 力 27
1.3 总结 29

第2章 状态驱动智能体设计 31
2.1 什么是有限状态机 32
2.2 有限状态机的实现 33
2.2.1 状态变换表 34
2.2.2 内置的规则 35
2.3 West World项目 37
2.3.1 BaseGameEntity类 38
2.3.2 Miner类 38
2.3.3 Miner状态 39
2.3.4 重访问的状态设计模式 40
2.4 使State基类可重用 45
2.5 全局状态和状态翻转(State Blip) 46
2.6 创建一个StateMachine类 47
2.7 引入Elsa 49
2.8 为你的FSM增加消息功能 50
2.8.1 Telegram的结构 51
2.8.2 矿工Bob和Elsa交流 52
2.8.3 消息发送和管理 52
2.8.4 消息处理 56
2.8.5 Elsa做晚饭 57
2.8.6 总结 61

第3章 如何创建自治的可移动游戏智能体 63
3.1 什么是自治智能体 63
3.2 交通工具模型 64
3.3 更新交通工具物理属性 67
3.4 操控行为 68
3.4.1 Seek(靠近) 68
3.4.2 Flee(离开) 69
3.4.3 Arrive(抵达) 69
3.4.4 Pursuit(追逐) 70
3.4.5 Evade(逃避) 72
3.4.6 Wander(徘徊) 72
3.4.7 Obstacle Avoidance(避开障碍) 74
3.4.8 Wall Avoidance(避开墙) 78
3.4.9 Interpose(插入) 80
3.4.10 Hide(隐藏) 81
3.4.11 Path Following(路径跟随) 83
3.4.12 Offset Pursuit(保持一定偏移的追逐) 84
3.5 组行为(Group Behaviors) 85
3.5.1 Separation(分离) 86
3.5.2 Alignment(队列) 87
3.5.3 Cohesion(聚集) 88
3.5.4 Flocking(群集) 89
3.6 组合操控行为(Combining Steering Behaviors) 90
3.6.1 加权截断总和(Weighted Truncated Sum) 91
3.6.2 带优先级的加权截断累计(Weighted Truncated Running Sum with Prioritization) 91
3.6.3 带优先级的抖动(Prioritized Dithering) 93
3.7 确保无重叠 94
3.8 应对大量交通工具:空间划分 96
3.9 平滑 99

第4章 体育模拟(简单足球) 102
4.1 简单足球的环境和规则 102
4.1.1 足球场 104
4.1.2 球门 105
4.1.3 足球 106
4.2 设计AI 110
4.2.1 SoccerTeam类 112
4.2.2 场上队员 118
4.2.3 守门员 131
4.2.4 AI使用到的关键方法 136
4.3 使用估算和假设 144
4.4 总结 144

第5章 图的秘密生命 146
5.1 图 146
5.1.1 一个更规范化的描述 147
5.1.2 树 148
5.1.3 图密度 148
5.1.4 有向图(Digraph) 148
5.1.5 游戏AI中的图 149
5.2 实现一个图类 153
5.2.1 图节点类(GraphNode Class) 154
5.2.2 图边类(GraphEdge Class) 155
5.2.3 稀疏图类(SparseGraph Class) 156
5.3 图搜索算法 157
5.3.1 盲目搜索(Uninformed Graph Searches) 158
5.3.2 基于开销的图搜索(cost-based graph searchs) 172
5.4 总结 183

第6章 用脚本,还是不用?这是一个问题 185
6.1 什么是脚本语言 185
6.2 脚本语言能为你做些什么 186
6.2.1 对话流 188
6.2.2 舞台指示(Stage Direction) 188
6.2.3 AI逻辑 189
6.3 在Lua中编写脚本 190
6.3.1 为使用Lua设置编译器 190
6.3.2 起步 191
6.3.3 Lua中的石头剪子布 197
6.3.4 与C/C++接口 199
6.3.5 Luabind来救援了! 206
6.4 创建一个脚本化的有限状态自动机 213
6.4.1 它如何工作? 213
6.4.2 状态(State) 216
6.5 有用的链接 218
6.6 并不是一切都这么美妙 218
6.7 总结 219

第7章 概览《掠夺者》游戏 220
7.1 关于这个游戏 220
7.2 游戏体系结构概述 221
7.2.1 Raven_Game类 222
7.2.2 掠夺者地图 222
7.2.3 掠夺者武器 224
7.2.4 弹药(Projectile) 225
7.3 触发器 226
7.3.1 触发器范围类(TriggerRegion) 227
7.3.2 触发器类(Trigger) 228
7.3.3 再生触发器(Respawning Trigger) 229
7.3.4 供给触发器(Giver-Trigger) 230
7.3.5 武器供给器(Weapon Givers) 230
7.3.6 健康值供给器(Health Giver) 231
7.3.7 限制生命期触发器(Limited Lifetime Trigger) 231
7.3.8 声音通告触发器(Sound Notification Trigger) 232
7.3.9 管理触发器:触发器系统(TriggerSystem)类 232
7.4 AI设计的考虑 234
7.5 实现AI 235
7.5.1 制定决策(Decision Making) 235
7.5.2 移动(Movement) 236
7.5.3 路径规划(Path Planning) 236
7.5.4 感知(Perception) 236
7.5.5 目标选择(Target Selection) 240
7.5.6 武器控制(Weapon Handling) 241
7.5.7 把所有东西整合起来 244
7.5.8 更新AI组件 245
7.6 总结 247

第8章 实用路径规划 248
8.1 构建导航图 248
8.1.1 基于单元 248
8.1.2 可视点 249
8.1.3 扩展图形 249
8.1.4 导航网 250
8.2 《掠夺者》游戏导航图 251
8.2.1 粗颗粒状的图 251
8.2.2 细粒状的图 253
8.2.3 为《掠夺者》导航图添加物件 253
8.2.4 为加速就近查询而使用空间分割 254
8.3 创建路径规划类 255
8.3.1 规划到达一个位置的一条路径 256
8.3.2 规划路径到达一个物件类型 257
8.4 节点式路径或边式路径 260
8.4.1 注释边类示例 261
8.4.2 修改路径规划器类以容纳注释边 261
8.4.3 路径平滑 263
8.4.4 降低CPU资源消耗的方法 267
8.5 走出困境状态 277
8.6 总结 279

第9章 目标驱动智能体行为 280
9.1 勇士埃里克的归来 281
9.2 实现 283