展开全部

主编推荐语

利用Lua编程开发,专注于动作、动画和战术的游戏AI。

内容简介

游戏人工智能(游戏AI)是游戏开发的一个重要方面,在很大程度上决定了游戏产品的逼真程度和对玩家的吸引力,由此也得到游戏开发工程师越来越多的重视。

本书秉承把动画和运动系统直接集成到AI系统的方法,详细介绍了如何使用Lua语言及相关的技术和工具,编写和实现高质量的游戏AI。全书共9章,分别介绍了沙箱基础、创建和移动智能体、角色动画、意识控制、导航、决策制定、知识表达、感知和策略等主题。

本书适合于游戏开发工程师,特别是想要详细了解游戏AI开发的程序员阅读参考。

目录

  • 版权信息
  • 内容提要
  • 作者简介
  • 技术评审简介
  • 前言
  • 第1章 从构建沙箱开始
  • 1.1 AI沙箱简介
  • 1.1.1 理解沙箱
  • 1.1.2 项目文件组织
  • 1.1.3 预先做好的构建
  • 1.1.4 使用Visual Studio 2008/2010/2012/2013编译沙箱项目
  • 1.1.5 开源库
  • 1.1.6 开源工具
  • 1.1.7 Lua IDE-Decoda
  • 1.1.8 在Decoda中运行AI沙箱
  • 1.1.9 创建一个新的Decoda项目
  • 1.1.10 调试Lua脚本
  • 1.1.11 Decoda的Watch窗口
  • 1.1.12 Decoda的Call Stack窗口
  • 1.1.13 Decoda的Virtual Machines窗口
  • 1.1.14 同时调试Lua与C++代码
  • 1.1.15 Visual Studio——附加到进程
  • 1.1.16 Decoda——附加到进程
  • 1.1.17 Decoda——附加到系统调试器
  • 1.1.18 关联Lua脚本代码到Decoda
  • 1.1.19 Lua虚拟机
  • 1.1.20 Lua堆栈
  • 1.1.21 Lua基础类型
  • 1.1.22 元表
  • 1.1.23 元方法
  • 1.1.24 自定义类型
  • 1.1.25 C/C++调用Lua函数
  • 1.1.26 Lua调用C/C++函数
  • 1.1.27 创建自定义数据类型
  • 1.1.28 Demo框架
  • 1.2 小结
  • 第2章 创建并移动智能体
  • 2.1 新建一个沙箱项目
  • 2.2 创建文件结构
  • 2.3 扩展SandboxApplication类
  • 2.4 首次运行沙箱
  • 2.5 新建一个Decoda项目
  • 2.6 配置Decoda运行的可执行程序
  • 2.7 创建一个沙箱Lua脚本
  • 2.7.1 创建地板
  • 2.7.2 添加光源
  • 2.7.3 添加天空盒
  • 2.7.4 在沙箱中添加网格
  • 2.7.5 创建沙箱对象
  • 2.8 发射方块
  • 2.9 创建智能体Lua脚本
  • 2.9.1 创建视觉表象
  • 2.9.2 更新智能体的位置
  • 2.9.3 更新智能体的朝向
  • 2.10 智能体的属性
  • 2.10.1 朝向
  • 2.10.2 定位
  • 2.10.3 大小
  • 2.10.4 物理
  • 2.10.5 知识
  • 2.10.6 智能体的移动
  • 2.10.7 智能体转向力
  • 2.10.8 规避
  • 2.10.9 规避障碍物和其他智能体
  • 2.10.10 群组移动
  • 2.10.11 创建一群追随者
  • 2.10.12 转向力合计
  • 2.11 小结
  • 第3章 角色动画
  • 3.1 骨骼和网格
  • 3.1.1 网格骨骼
  • 3.1.2 加载一个动画网格
  • 3.1.3 显示骨骼
  • 3.2 附加网格到骨骼上
  • 给战士附加武器
  • 3.3 动画片段
  • 3.3.1 播放战士动画
  • 3.3.2 战士动画
  • 3.4 战士的姿势
  • 武器姿势
  • 3.5 操作动画
  • 3.5.1 启用和禁用动画
  • 3.5.2 循环动画
  • 3.5.3 动画的长度
  • 3.5.4 动画时间
  • 3.5.5 归一化时间
  • 3.5.6 重新开始动画
  • 3.5.7 播放非循环动画
  • 3.5.8 动画速率
  • 3.6 动画混合
  • 3.6.1 动画权重
  • 3.6.2 混合窗口
  • 3.6.3 混合曲线
  • 3.6.4 线性混合
  • 3.6.5 处理混合权重
  • 3.7 动画状态机(ASM)
  • 3.7.1 状态
  • 3.7.2 转换
  • 3.7.3 创建动画状态机
  • 3.7.4 创建辅助函数
  • 3.7.5 添加状态
  • 3.7.6 添加转换
  • 3.7.7 添加外部辅助函数
  • 3.7.8 强制设置状态
  • 3.7.9 请求状态
  • 3.7.10 更新动画状态机
  • 3.7.11 处理状态转换和状态请求
  • 3.7.12 更新运行中的动画
  • 3.7.13 动画状态机实例
  • 3.8 构造一个武器动画状态机
  • 3.9 构建战士的动画状态机
  • 3.10 更新动画状态机
  • 3.11 处理状态
  • 3.12 小结
  • 第4章 意识体控制
  • 4.1 创建身体
  • 4.1.1 创建战士
  • 4.1.2 附加动画网格到智能体
  • 4.1.3 创建障碍训练场
  • 4.2 为动画状态机添加回调
  • 4.2.1 处理回调
  • 4.2.2 为ASM添加回调
  • 4.2.3 更新ASM以调用回调函数
  • 4.3 让战士射击
  • 4.3.1 骨骼位置
  • 4.3.2 骨骼旋转
  • 4.3.3 创建粒子效果
  • 4.3.4 粒子方向
  • 4.3.5 对象删除
  • 4.3.6 碰撞效果回调
  • 4.3.7 发射子弹
  • 4.3.8 处理子弹碰撞效果
  • 4.3.9 射击
  • 4.4 让战士奔跑
  • 4.4.1 设置穿越障碍训练场的路线
  • 4.4.2 跑过障碍训练场
  • 4.5 创建大脑
  • 实现意识体控制的方法
  • 4.6 直接动画控制
  • 4.6.1 死亡状态
  • 4.6.2 空闲状态
  • 4.6.3 下落状态
  • 4.6.4 移动状态
  • 4.6.5 射击状态
  • 4.7 一个简单的有限状态机
  • 4.7.1 初始化智能体
  • 4.7.2 智能体FSM状态处理
  • 4.8 间接动画控制
  • 4.8.1 动画控制器
  • 4.8.2 命令
  • 4.8.3 命令队列
  • 4.8.4 操作命令
  • 4.8.5 姿势改变命令
  • 4.8.6 死亡命令
  • 4.8.7 下落命令
  • 4.8.8 空闲命令
  • 4.8.9 移动命令
  • 4.8.10 射击命令
  • 4.8.11 赋值成员函数
  • 4.8.12 初始化控制器
  • 4.8.13 添加命令处理函数
  • 4.8.14 更新控制器
  • 4.9 运行障碍训练场
  • 4.9.1 创建直接控制智能体
  • 4.9.2 创建间接控制智能体
  • 4.9.3 间接控制智能体初始化
  • 4.9.4 间接控制智能体更新
  • 4.9.5 间接控制智能体的控制
  • 4.9.6 产生一个间接控制的智能体
  • 4.10 动作延迟
  • 4.11 小结
  • 第5章 导航
  • 5.1 寻路
  • 5.2 创建导航网格
  • 5.2.1 配置导航网格
  • 5.2.2 可通行高度
  • 5.2.3 可通行半径
  • 5.2.4 可通行的攀爬高度
  • 5.2.5 可通行的斜坡角度
  • 5.2.6 最小区域面积
  • 5.2.7 构建导航网格
  • 5.2.8 绘制导航网格
  • 5.3 在导航网格中寻路
  • 5.3.1 路径查询
  • 5.3.2 查询结果
  • 5.3.3 随机导航路点
  • 5.4 路径信息
  • 5.5 为战士添加随机寻路
  • 5.5.1 更新智能体的路径
  • 5.5.2 绘制路径
  • 5.5.3 初始化导航网格
  • 5.5.4 随意移动的智能体
  • 5.6 创建更多的导航网格
  • 5.7 小结
  • 第6章 决策制定
  • 6.1 创建自定义类型
  • 6.2 智能体动作
  • 6.2.1 添加数据成员
  • 6.2.2 动作初始化
  • 6.2.3 动作更新
  • 6.2.4 动作清理
  • 6.2.5 动作的成员函数
  • 6.3 创建动作
  • 6.3.1 空闲动作
  • 6.3.2 死亡动作
  • 6.3.3 换弹药动作
  • 6.3.4 射击动作
  • 6.3.5 随机移动动作
  • 6.3.6 移动动作
  • 6.3.7 逃跑动作
  • 6.3.8 追逐动作
  • 6.4 求值器
  • 6.5 创建求值器
  • 6.5.1 常数求值器
  • 6.5.2 是否拥有弹药求值器
  • 6.5.3 是否有生命危险求值器
  • 6.5.4 是否有敌人求值器
  • 6.5.5 是否移动求值器
  • 6.5.6 是否存活求值器
  • 6.5.7 能否射击敌人求值器
  • 6.5.8 50比50机会求值器
  • 6.6 决策结构
  • 6.7 决策树
  • 6.7.1 分支
  • 6.7.2 决策叶节点
  • 6.7.3 分支求值
  • 6.8 构造一棵决策树
  • 创建分支
  • 6.9 创建一个决策树智能体
  • 6.9.1 决策树的优点
  • 6.9.2 决策树的缺点
  • 6.10 有限状态机
  • 6.10.1 状态
  • 6.10.2 转换
  • 6.10.3 有限状态机结构
  • 6.10.4 辅助函数
  • 6.10.5 添加状态和转换
  • 6.10.6 更新有限状态机
  • 6.10.7 添加实例函数
  • 6.11 构造有限状态机
  • 6.11.1 空闲状态
  • 6.11.2 移动状态
  • 6.11.3 随机移动状态
  • 6.11.4 射击状态
  • 6.11.5 逃跑状态
  • 6.11.6 死亡状态
  • 6.11.7 追逐状态
  • 6.11.8 换子弹状态
  • 6.12 创建一个有限状态机智能体
  • 6.13 有限状态机的优点
  • 6.14 有限状态机的缺点
  • 6.15 行为树
  • 6.15.1 行为树节点
  • 6.15.2 辅助函数
  • 6.15.3 更新行为树节点
  • 6.16 动作
  • 6.17 条件
  • 6.18 选择器
  • 6.19 序列
  • 6.20 创建行为树对象
  • 6.20.1 行为树辅助函数
  • 6.20.2 选择器计算
  • 6.20.3 序列计算
  • 6.20.4 节点计算
  • 6.20.5 继续行为树计算
  • 6.20.6 行为树的更新循环
  • 6.20.7 更新行为树
  • 6.21 构造一颗行为树
  • 6.21.1 死亡行为
  • 6.21.2 逃跑行为
  • 6.21.3 战斗行为
  • 6.21.4 换子弹行为
  • 6.21.5 射击行为
  • 6.21.6 追逐行为
  • 6.21.7 移动行为
  • 6.21.8 随机移动行为
  • 6.21.9 空闲行为
  • 6.22 创建行为树智能体
  • 6.23 行为树的优点
  • 6.24 行为树的缺点
  • 6.25 小结
  • 第7章 知识表达
  • 7.1 知识源
  • 7.1.1 创建知识源
  • 7.1.2 知识源求值
  • 7.2 黑板
  • 7.2.1 创建黑板
  • 7.2.2 添加和删除知识源
  • 7.2.3 知识源求值
  • 7.2.4 设置和返回黑板属性
  • 7.2.5 黑板的成员函数
  • 7.3 创建战士的知识源
  • 7.3.1 选择敌人
  • 7.3.2 选择逃离位置
  • 7.4 构造战士的黑板
  • 7.5 更新决策求值器
  • 7.6 更新行为动作
  • 7.6.1 死亡动作
  • 7.6.2 逃离动作
  • 7.6.3 空闲动作
  • 7.6.4 移动动作
  • 7.6.5 追逐动作
  • 7.6.6 换子弹动作
  • 7.6.7 射击动作
  • 7.7 小结
  • 第8章 感知
  • 8.1 事件
  • 8.1.1 属性
  • 8.1.2 发送事件
  • 8.1.3 接收事件
  • 8.2 管理事件
  • 8.2.1 分配智能体团队
  • 8.2.2 处理智能体通信
  • 8.2.3 事件类型
  • 8.3 创建智能体的感官
  • 8.3.1 初始化感官
  • 8.3.2 更新感官
  • 8.4 智能体视觉
  • 检测其他可见智能体
  • 8.5 智能体视觉事件
  • 8.5.1 看到新敌人的事件
  • 8.5.2 看到新的敌人死尸事件
  • 8.5.3 看到新的死亡队友事件
  • 8.6 处理新看到的智能体
  • 8.6.1 间歇性可见的智能体
  • 8.6.2 限制智能体可视性的更新
  • 8.6.3 创建事件处理
  • 8.6.4 添加事件处理函数
  • 8.7 智能体的听觉
  • 8.8 听觉事件
  • 8.8.1 子弹发射事件
  • 8.8.2 子弹碰撞事件
  • 8.9 处理听觉事件
  • 8.10 清理黑板中的事件
  • 8.11 清理听觉事件
  • 8.12 团队交流
  • 8.12.1 选择敌人事件
  • 8.12.2 位置更新事件
  • 8.12.3 撤退位置事件
  • 8.13 更新智能体行为
  • 8.13.1 选择敌人
  • 8.13.2 评估危险位置
  • 8.13.3 计算最佳逃离位置
  • 8.14 小结
  • 第9章 策略
  • 9.1 影响力地图
  • 9.1.1 单元格高度
  • 9.1.2 单元格宽度
  • 9.2 构造影响力地图
  • 9.2.1 配置
  • 9.2.2 导航网格的立体像素化
  • 9.3 绘制影响力地图
  • 9.4 访问影响力
  • 9.4.1 设置影响力
  • 9.4.2 获取影响力
  • 9.5 清除影响力
  • 9.6 传播影响力
  • 9.6.1 单元格惯性
  • 9.6.2 单元格衰减
  • 9.7 影响力地图的图层
  • 9.8 更新影响力地图
  • 9.9 战士的策略
  • 初始化和更新策略
  • 9.10 团队影响力评分
  • 9.10.1 初始化团队影响力
  • 9.10.2 更新团队影响力
  • 9.10.3 配置团队影响力
  • 9.11 危险区域评分
  • 9.11.1 利用智能体事件
  • 9.11.2 添加事件处理器
  • 9.11.3 初始化危险影响力
  • 9.11.4 更新危险影响力
  • 9.11.5 配置团队影响力
  • 9.12 小结
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

人民邮电出版社

人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。