从Quake 3源代码分析AI Bot库

从Quake 3源代码分析AI Bot库

2008年1月14日,Alex J. Champandard

查看已发布的标题的AI源代码是从渠道中学习技巧的好方法。这个新专栏可以帮助您学习各种游戏背后的代码,例如上周的FEAR SDK。

地震3竞技场是一个有趣的例子,因为它是完全开源的(工具除外),这是一个世纪之交的AI引擎设计的一个很好的例子!虽然严重,代码中包含一个功能完善的死亡比赛机器人AI写在普通的老C ^ ; 当您了解语言的语法时,这是非常容易的。除了一个简单的目标架构,您还可以在区域意识系统(AAS)和寻路解决方案(也称为路由)中找到一些坚实的技术。

下载并安装源代码

2005年,Quake 3是开源的,所以只要遵守GPL许可证中的条件,您就可以自由下载代码库。但是,如果要运行游戏,则需要一些不包含的资源。您的第一个选择是转向Id Software的代码和资产:

  1. 从Id的FTP服务器下载完整的Quake 3 源代码。当前版本是1.32b,它与最新的补丁一起使用。
  2. 要获得游戏并运行所有必要的资源,您可以使用完整版本的游戏。黄金版本是将这两款基于Q3的游戏捆绑在一起的好价值。
  3. 您也可以根据您编译的引擎版本获得演示级别并运行。转到Id的下载页面,获取演示文件并将您的可执行文件放在正确的目录中。

或者,您还可以转到社区的来源和资产:

  1. 从ioquake3下载源码,ioquake3是独立mod场景后面的当前活动代码库。如果要进一步使用,您会发现代码中的错误修复和改进。
  2. 对于资产,请转到OpenArena游戏。基于Quake 3引擎,它将自己称为完全免费的游戏。您也可以从ioquake3的网站上找到更多的型号。

一旦安装完成并且所有的文件都已解压缩,你将有一个。\ code \目录 - 通常在你的游戏文件夹中。

截图1:在Quake 3中构成AI源代码的文件示例。

了解代码库

在游戏的基本目录中,您会找到一个名为quake3.slnVisual 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中快速死亡的动作。

基本要点

浏览代码时,尤其要注意以下几个部分。

区域意识系统
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机器人的设计进行更深入的分析。事实上,有一个关于这个主题的整篇论文,你可以在论坛的这个主题中找到(需要注册和介绍)。

你可能感兴趣的:(quake3,quake3,3d,john,carmack,游戏,代码分析)