2008年1月14日,Alex J. Champandard
查看已发布的标题的AI源代码是从渠道中学习技巧的好方法。
这个新专栏可以帮助您学习各种游戏背后的代码,例如上周的 FEAR SDK。
Quake3雷神之锤3竞技场 是一个有趣的例子,因为它是完全开源的(工具除外),
这是一个世纪之交的AI引擎设计的一个很好的例子!
虽然严重,代码中包含一个功能完善的DT 机器人AI写在普通的老C ^ ;
当您了解语言的语法时,这是非常容易的。
除了一个简单的目标架构,您还可以在区域意识系统(AAS)和 寻路解决方案(也称为路由)
中找到一些坚实的技术。
下载并安装源代码
2005年,Quake 3是开源的,所以只要遵守GPL许可证中的条件,您就可以自由下载代码库。
但是,如果要运行游戏,则需要一些不包含的资源。
您的第一个选择是转向Id Software的代码和资产:
- 黄金版本是将这两款基于Q3的游戏捆绑在一起的好价值。
- 您也可以根据您编译的引擎版本获得演示级别并运行。
- 转到Id的下载页面,获取演示文件并将您的可执行文件放在正确的目录中。
或者,您还可以转到社区的来源和资产:
- 从ioquake3下载源码,ioquake3是独立mod场景后面的当前活动代码库。
- 如果要进一步使用,您会发现代码中的错误修复和改进。
- 对于资产,请转到OpenArena游戏。
- 基于Quake 3引擎,它将自己称为完全免费的游戏。
- 您也可以从ioquake3的网站上找到更多的型号。
一旦安装完成并且所有的文件都已解压缩,
你将有一个。\ code \目录 - 通常在你的游戏文件夹中。
截图1:在Quake 3中构成AI源代码的文件示例。
了解代码库
在游戏的基本目录中,您会找到一个名为quake3.sln的Visual Studio解决方案文件。
(您可以使用免费版本的VS.NET 2008 Express。)
该游戏还建立在许多其他* nix平台上,并具有标准Makefile。
AI代码的大部分位于./botlib/目录中,56个文件和大约1.1 Mb的代码。
AI有自己的图书馆,但主要解决方案包含在内。
还有./game/文件夹中也有一些游戏特定的AI逻辑。在雷神之锤 3中有关AI的注意事项:
- 该代码是普通的ANSI C而不是C ++。
- 然而,它是用相对结构化的方法编写的,
- 所以对于熟悉C风格语法的大多数面向对象的开发人员来说,
- 应该是可以访问的。
- 其实呢,代码看起来相对无噪音,相比之下许多C ++引擎呢!
- 引擎代码本身的架构已经成为一种标准的方法,
- 基本上是从客户端和服务器上分割游戏逻辑。
- 但是这里特别有用的是,整个引擎设计为支持机器人作为多人角色,
- 这需要良好的代码分层。
- 来自Quake 3的AI可以追溯到当有一个专门的AI程序员是罕见的。
- 这意味着您应该能够更容易地了解AI代码的结构,而不是更现代化的引擎。
对于这些文件,有几件事要注意:
- 名为be_aas _ *的文件[h,c]包含导航代码,也称为 区域 意识 系统 。
- 这占整个AI的50%以上的代码行。
- 单个文件be_ea.c提供了机器人可以执行的所有基本操作的包装器。
- 然而,这些动作的实现是在引擎本身完成的,因为玩家执行与机器人相同的动作。
- 文件be_ai *。[h,c]包含AI逻辑本身,但实现分为./code/botlib/和./code/game/目录。
- 该支持库代码似乎是在指定的文件升_ * [H,C] ,这是整个引擎使用的约定。
- 特别是您将找到用于序列化数据结构和从脚本加载简单设置的代码。
截图2:在Quake 3 Arena中 快速 Death 的动作。
基本要点
浏览代码时,尤其要注意以下几个部分。
区域意识系统
Quake 3的机器人以其AAS导航系统而闻名。
基本上,分析了水平的结构,用于提取可导航的空间(例如可步行的表面,游泳区域)的体积。
一个过程然后通过模拟它们中的每一个的 潜在运动 来分析 这些 区域 以 进行 连接,
然后将这些区域聚集在一起以允许分层路径寻找。
缓存路由
Quake 3使用AAS图中的一种寻路方式(在be_aas_route。[h,c]中),
它依赖于各个区域。
在这些群集中,预先计算并存储到常用目的地的路径供以后使用。
基于堆栈的目标架构
在文件be_ai_goal。[h,c]中,您将发现使用堆栈来实现动态目标。
特别地,每个目标具有模糊激活值(可以使用遗传算法来优化)。
该堆栈用于跟踪要做的事情,这允许人工智能解决简单的谜题,并轻松地优先考虑其行为。
主要AI例程
在系统的顶层,有一个传统的状态机,建立在基于目标的堆栈上。
您将在文件名ai_dmq3。[h,c]的项目的游戏部分找到此逻辑。
当您习惯于面向对象的C ++方法时,令人惊奇的是,一切都非常简单明了;
有一个bot_state_t数据结构和一系列实现状态机的不同部分的全局函数。
总而言之,Quake 3 是 开发商 想要查看商业AI的好地方。
这当然不是一个微不足道的实现,
但它可能很简单,你可以制作一个全功能的AI引擎,并在游戏中发货(翻译可能有误 )。
保持关注,以AiGameDev.com为雷神之锤3机器人的设计进行更深入的分析。
事实上,有一个关于这个主题的整篇论文,你可以在论坛的这个主题中找到
(需要注册和介绍)。