设计面向游戏的人工智能(第 3 部分)

作者:Donald Kehoe

战术和战略人工智能 (AI)


上次谈到游戏主角(智能代理,简称 IA)时,他们已经能够观察周围情况并能够判断前进方向。在本文中,我将向大家介绍如何提高代理的智能级别。代理现已能够处理即时情况。现在,大家正在努力实现人工智能。人工智能具有丰富功能,能够处理各种工作。


战术人工智能


战术人工智能的作用是协调游戏中智能代理组的工作。这种人工智能的实施对许多类型的游戏都至关重要。战术第一人称射击 (FPS) 游戏中的小队以及实时战略游戏中的单元组都使用战术方法。小组更加高效,因为组员能够相互支持,作为一个整体开展行动,一起获取和分享信息。

战术人工智能的概念以小组动力为基础,需要游戏跟踪不同的实体小组。每个小组需要与单个成员分开进行更新。您需要使用专用的更新模块实施更新,该模块能够跟踪不同的小组及其目标和组成。然而,这种方法需要为引擎开发一个单独的系统,因此我更喜好使用组长方法 (group captain method)

您可为单个小组分配空军上校的角色。小组中的每个其他成员都需要听从组长指挥,根据组长的命令采取相应行动。组长全面负责实施整个小组的战术人工智能计算。

小组移动: 路径查找


实体移动是一个实施区域,可通过小组动力进行改进。智能代理用作一个单元可提升移动的效率和逼真度。

路径查找较为耗时,即使使用预计算的路径图和多线程人工智能进行加速也无效。小组动力可大幅减轻路径查找系统的压力。

当单元小组获得了行动目标(通过玩家或人工智能指令),最接近目标的单元被设置为组长,所有其他成员都需要跟随组长。当组长被替换时,它需要查询路径系统。借助路径信息,组长可以达到目标。小组中的所有其他单元只需要跟随组长,无论组长要去哪里。

小组移动:阵型


由于小组作为一个集体采取行动,因此您能够成功减轻路径系统的负载。遗憾的是,各单元的行动方式较为松散,缺乏组织性。输入阵型。借助阵型,小组能够以规则的图案开展行动,如方阵(历史模拟)或三角形(Codemaster《霸王(Overlord*)》中的士兵开展行动的方式,如图 1 所示)。


图 1. 在《霸王》中,士兵(红色着装者)在听到玩家(身披盔甲者)的命令之后会以编队形式集体行动。

编队的设置非常简单,而且是对组长概念的延伸。在编队中,每个成员都有一个不可或缺的特定角色。编队组建完成后,每个成员都有特定站位,就像单个成员被指定为组长一样。编队中每个成员的站位都需要与其他成员保持相对距离。

让我们以《霸王》中的士兵为例。他们以金字塔编队开展行动。在图 2 中,组长“C”只需按照路径行动。成员 1 将在目标成员“C”的后方偏左位置以设定速度行进,成员 2 需与成员 1 保持一致。成员 3 完全以成员 1 而非组长为行动导向。小组中的每位成员都需要以这种编队方式开展行动。


图 2. 三角形行动编队设置

小组战术


战术不仅仅指以编队形式行进,而且注重团队并肩作战。组长负责团队的规划和协调工作。毕竟,保护小组成员的生命是指挥官的职责所在。

小组战术的实施需使用以往文章探讨的系统,如基于规则的系统或有限状态机 (FSM)。下面列举一些有关典型小组行动的示例(见图 3):

  • 治疗支持。有些游戏具有医疗兵或牧师等治疗支持角色,例如,游戏中的医疗兵需要了解小组成员的健康水平。组长可根据相关信息安排战斗。例如,组长可命令医疗兵守护在可能受到火力攻击的组员附近。
  • 侦察。《深入敌后:雷神战争 (Enemy Territory: Quake Wars)》*等游戏中,相关角色可为其他组员提供侦察服务。在这款游戏中,侦察兵可以部署雷达以提供有关敌军行动的信息。即使没有雷达,任何被战斗人员发现的敌人将被添加到整个团队中的小组雷达。如欲接近未覆盖的区域,可派遣人员潜入未知区域侦察敌方阵地。经过乔装打扮的任何侦察兵可轻松完成这一任务。
  • 掩护火力。当某区域受到周全防御时,支持人员可以提供掩护火力,集中攻击敌人防御部队,尽可能延长与他们的交战时间,以便到达攻击目标。
  • 牺牲。当敌方攻击火力异常密集且人员牺牲不可避免,应考虑组织敢死队。负责关键任务的小组成员(如某些情况下的工兵)需要受到保护,具体方式包括优先攻击以己方工兵为打击目标的敌方人员,以及参与火线狙击,保护工兵的生命安全。



 
图 3. 在 Id Software* 和 Splash Damage, Ltd.* 开发的《深入敌后:雷神战争》中,小组动力包括五种不同角色的士兵。

另一个可帮助小组的分析级别是针对每位小组成员能力的自我分析。组长需要了解小组在哪些情况下能够有效作战,小组何时具备优势以及何时撤退。

例如,Blizzard 的《星际争霸 (Starcraft)》*等战略游戏包含飞行部队和地面部队。并非每个地面部队都能攻击飞行部队。每个小组都需要了解自身是否具备这一攻击能力。如果小组不具备任何可攻击飞行部队的部队,那么当飞行部队来袭时最好逃跑。即使能够攻击飞行部队的部队数量不多,只要支持部队能够为攻击飞行部队的部队提供治疗服务或支援,那么最好与飞行部队顽强对抗。

实体能力的多样性及具备实体能力的部队数量可用于衡量小组在不同情况下的战斗力。考虑这些因素能够大幅增强战斗力。


战略人工智能


至此,我介绍了实体和实体小组可如何应对艰难的作战环境。现在,我将介绍人工智能的更大意义。战略人工智能是更高级别的人工智能,可用于指挥整个军队和制定指导战略。

战略人工智能最常用于实时战略 (RTS) 游戏,但正日益频繁地用于战术 FPS 游戏。玩家控制的指挥官可以使用自身的系统,或设置为空实体系统,即没有场地或图形,但会进行更新并具有思考能力。

指挥官将由等级规则系统和 FSM 指导,它们用于管理多种元素,如资源收集、研究技术树、构建军队等。在多数情况下,游戏元素的这种基本维护不需要太多实际思考能力。而与其他玩家进行互动则需要智能。
战略人工智能的基本要素可用于支持这类互动(或战斗)。指挥官需要了解游戏地图,以找到玩家,识别关键点(如障碍),构建防御系统,并分析其他玩家的防御策略。具体如何执行并不明确,但决策地图能够发挥重要作用。

决策地图

决策地图是二维阵列,类似于游戏地图。阵列中的每个单元对应着游戏中的一个区域,并具有关于该区域的重要信息。这些地图可用于帮助您的战略人工智能针对整个游戏制定有效决策。

资源地图

资源地图包含战略游戏中资源的位置信息。了解资源集中在地图的什么位置可影响指挥官的许多决策,例如在哪部署扩充或卫星基地(指挥官基地附近的资源),敌方可能在哪部署其扩充(他们基地附近的资源)以及可能需要争夺的阵地(中间资源)。

计算潜在的可用资源还可影响支持哪些部队以及如何部署军队。如果资源缺乏,那么指挥官在为每个部队安排任务时需要更谨慎,因为补充兵员可能较少。如果资源充裕,那么指挥官便可实施积极作战战略,动员大量兵员或组建强大的作战部队。

进攻地图

这些地图包含有关指挥官目标的信息,例如敌军基地位置、地图目标(炸毁、保护、攻击等)位置、指挥官军队的要素(主要基地、英雄部队等)。掌握这些信息可帮助指挥官合理部署军队。需要保护的据点应该被防御工事环绕,并安排小分队始终驻守在这些据点附近。找到攻击目标后便可对防御工事进行测试。必须通过分析目标周围的防御工事找到最佳的攻破策略。这是军事游戏冲突地图的基础。

冲突地图

冲突地图(见图 4)的使用和更新频率远高于前述地图。冲突地图可在整个关卡中跟踪战斗的发生场所。无论何时与敌军战斗,士兵都需要使用关键信息及时更新冲突地图:

  • 冲突类型。部队和/或建筑物
  • 部队能力。攻击地面和/或空中力量
  • 数量。遭遇的敌军数量
  • 兵力。相关区域的破坏潜力

通过分析这些信息,可确定以下情况:

  • 当敌人发动攻击时,人工智能将能判定部署的防御措施是否有效,防御措施是得到启用还是被忽略,以及冲突是否发生在防御目标附近。然后,人工智能可以适当改变防御工事的布局和结构。
  • 在攻击敌人(最好有侦察兵提供协助)时,快速找到敌军防御工事的弱点。如果路径有利于避免冲突或最大限度减少冲突,您便可以实施最佳的军队部署战略。
  • 对抗措施是否适当取决于敌军军事能力的组成。因为多数战略游戏试图在各部队之间保持某种平衡,所以电脑将能够确定突破不同据点防御措施所需的部队数量和类型。


 
图 4. 某地形上的冲突地图示例。红色越黑,遭遇的冲突越多。

构建和应用地图

我以前说过,这些地图由指挥官的部队构建。它们属于规则的一部分,旨在引导人工智能尽快派遣侦察兵探秘敌军阵地,以开始构建地图。卓越的人工智能应该定期确保这些地图处于最新状态。在游戏开始时,只有少数部队具有这些地图,因此游戏引擎更新比较容易。当游戏正在激烈进行时,大量部队同时提供信息,这可能会影响游戏的运行性能。
确保决策地图快速得到维护并不太难,通过将决策地图系统集成到其线程中便可做到。事实上,人工智能控制的每位玩家都应该具有自己的线程,以处理自己的一套决策地图。如果所有的实体都分解为多个线程,那么性能便会得到真正提升。决策地图线程只需要处理并行化实体更新消息中的请求。


总结


智能系统采用的最基本形式是基于规则的系统。该系统需充分利用人工智能特性,因为实际的智能性较低。一组预设行为用于确定游戏实体的行为。对于各种行为,总体结果可以是不明显的行为系统。

游戏世界的智能代理开始形成。您能够借助其基本能力开展侦察和行动,并增强决策和行为的有效性。您的智能代理现在能够在游戏扮演更主动的角色,而不是仅仅被动应对局势变化。您能够为玩家创建更聪明和难以对付对手,反过来,厉害的玩家能够取得出色的成绩。

本系列到此结束。下篇文章将重点介绍将多线程应用于人工智能。您甚至将获得一些实用高效的算法来运行人工智能,随着应用于更多的实体,它们将不可避免地变得日益复杂。如果希望您的系统能够满足增长的需求,您需要利用多核处理器。下篇文章将介绍通过简单改动代码,获取多线程优势。



作者简介


Donald “DJ” Kehoe:作为新泽西理工学院信息技术项目的导师,DJ 开拓了游戏开发领域的专业化之路,并教授该项目中有关游戏架构、编程和关卡设计的许多课程,以及集成 3D 显卡与游戏的课程。目前他正在攻读生物医学工程博士学位,运用游戏和虚拟现实来增强神经肌肉康复的效果。

Para obtener información más completa sobre las optimizaciones del compilador, consulte nuestro Aviso de optimización.