《游戏人工智能编程案例精粹》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(美)巴克兰德著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2012
  • ISBN:9787115291134
  • 页数:362 页
图书介绍:本书主要讲述如何使游戏中的角色具有智能的技术。首先介绍游戏角色的基本属性(包括速度、质量等物理属性)及常用数学方法。接着,深入探讨游戏智能体状态机的实现。最后,通过游戏实例,给出用状态机实现游戏AI的例子。

第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.3West 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.1Raven 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

9.2.1 Goal_Composite::Process Subgoals 285

9.2.2 Goal_Composite::Remove AllSubgoals 286

9.3《掠夺者》角色所使用的目标例子 287

9.3.1 Goal_Wander 287

9.3.2 Goal_TraverseEdge 288

9.3.3 Goal_FollowPath 290

9.3.4 Goal_MoveToPosition 292

9.3.5 Goal_AttackTarget 293

9.4目标仲裁 295

9.4.1计算寻找一个健康物件的期望值 297

9.4.2计算寻找一种特殊武器的期望值 298

9.4.3计算攻击目标的期望值 299

9.4.4计算寻找地图的期望值 300

9.4.5把它们都放在一起 300

9.5扩展 301

9.5.1个性 301

9.5.2状态存储 303

9.5.3命令排队 306

9.5.4用队列编写脚本行为 308

9.6总结 309

第10章 模糊逻辑 310

10.1普通集合 312

集合运算符 312

10.2模糊集合 313

10.2.1用隶属函数来定义模糊的边界 313

10.2.2模糊集合运算符 315

10.2.3限制词 316

10.3模糊语言变量 316

10.4模糊规则 317

10.4.1为武器的选择设计模糊语言变量 318

10.4.2为武器的选择设计规则集 320

10.4.3模糊推理 320

10.5从理论到应用:给一个模糊逻辑模块编码 327

10.5.1模糊模块类(FuzzyModule) 327

10.5.2模糊集合基类(FuzzySet) 328

10.5.3三角形的模糊集合类 329

10.5.4右肩模糊集合类 330

10.5.5创建一个模糊语言变量类 331

10.5.6为建立模糊规则而设计类 333

10.6《掠夺者》中是如何使用模糊逻辑类的 338

10.7库博方法 339

10.7.1模糊推理和库博方法 341

10.7.2实现 342

10.8总结 342

附录A C++模板 343

附录B UML类图 349

附录C 设置你的开发环境 357

跋 359

参考文献 361