《游戏人工智能编程案例精粹(修订版)》的配套资源是非常出色的。它提供了丰富而实用的内容,涵盖了游戏编程和人工智能的重要主题。这些资源包括代码示例、案例分析、实战练习等,可以帮助读者深入理解人工智能在游戏开发中的应用。配套资源还提供了详细的注释和解释,使得读者可以轻松地理解和应用所学知识。这套配套资源不仅适合初学者入门,也对于有一定基础的开发者提供了进一步提升的机会。无论是对于人工智能还是游戏编程的学习者来说,这些资源都是一本宝贵的参考书。
编辑推荐
亚马逊连续多年游戏开发畅销图书游戏开发图书的经典之作AI技术在游戏中应用的经典案例合集针对实际难题提供权威的专业解决方案引导读者学习使用C 变成语言设计、编程和实现游戏人工智能的过程读者可以从http://www.jblearning.com/catalog/9781556220784/下载本书的配套示例代码。
内容简介
《游戏人工智能编程案例精粹(修订版)》是游戏人工智能方面的经典之作,畅销多年。它展示了如何在游戏中利用专业人工智能技术,并针对实际困难问题,给出了强有力的解决方法。 《游戏人工智能编程案例精粹(修订版)》主要讲述如何使游戏中的角色具有智能的技术。本书首先介绍游戏角色的基本属性(包括速度、质量等物理属性)及常用数学方法。接着,深入探讨游戏智能体状态机的实现。通过简单足球游戏实例,本书给出用状态机实现游戏AI的例子。在图论部分,本书详细介绍图在游戏中的用途及各种不同的图搜索算法,并用一章的篇幅讨论了游戏中路径规划是如何完成的。此外,本书还对目标驱动的智能体的实现、触发器与模糊逻辑在游戏中的运用进行了讨论。为使智能体行为更加丰富、灵活、易于实现,本书还介绍了游戏脚本语言的优点,并以Lua脚本语言为例进行了说明。 《游戏人工智能编程案例精粹(修订版)》适合对游戏AI开发感兴趣的爱好者和游戏AI开发人员阅读和参考。
作者简介
Mat Buckland是一位自由职业程序员和技术作家。他在20世纪80年代为ZX Spectrum编写Waddington’sMonopoly的时候,对AI产生了兴趣,多年以来,他对于让计算机“思考”的热情丝毫没有减退。他是AI Techniques forGame Programming一书的作者,也是专注于AI教程的知名网站ai-junkie.com的创始人。他是AIInterface Standards Committee的成员,还是European Game DevelopersConference圆桌会议的主持人。
目录
- 第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 withPrioritization)
- 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 设置你的开发环境
- 跋
- 参考文献