
本指南旨在提供一种简单且对新手友好的机器人逃跑控制方法,并创建一个易于扩展和修改的基础框架。 简介 本指南旨在提供一种简单且对新手友好的机器人逃跑控制方法,并创建一个易于扩展和修改的基础框架。 首先,我们将了解一些大多数玩家刚开始玩游戏时会遇到的典型逃跑模块,并展示它们在我们将要创建的系统中会是什么样子。然后,通过一个示例来说明我在选择AI数值时所使用的数学依据,最后创建我以前某个AI的逃跑模块。最后,我提出一些可以扩展的想法,让这个模块更加一致。 常见的新手模块 大多数玩家遇到的第一个逃跑模块看起来与以下模块类似。

它们能清晰呈现条件与结果,在调试时非常好用。但对我来说,它们很难进行调整,而且我无法“感受”到它们。 计数系统 我使用的方法会为那些正在或将要对我造成伤害的事物分配一个值。当计算出即将受到一定量的伤害时,我们就会开始撤退。 重新创建基础模块 我们将重新创建上面看到的模块,以展示这个系统的工作原理,从左侧模块开始。 我们使用队伍计数器E来存储数值。只要它不用于任何持续多个时间单位的操作,或者不在此模块之前为其赋值并在之后使用,你就可以在其他任何地方自由使用它。

此代码包含3列。第一列将团队计数器E设为攻击我方的机器人数量,重要的是设置该值的节点需优先执行。第二列检查我方护盾是否低于50%,若是则将E增加3。第三列检查团队计数器E是否大于或等于3,若是则逃离所有攻击我方的敌人。 如果我方被3个或更多机器人攻击,或者护盾低于50%,就会从所有攻击我方的敌人处撤退。

正确示例与上图相同。这里,该系统的可能性开始显现,如第二列所示,当满足特定条件时,计数器会加一。 数据与计算 在继续之前,我们需要一些机器人数据,以便进行一些估算并选择数值。所有数据均来自《机器人大战:AI竞技场》维基的机器人类型部分。 测试场景 假设你的突击机器人走向敌方机器人,当你进入中距离时,敌方开始开火。如果你在进入中距离时立即撤退,敌方突击机器人将有时间向你的机器人发射5轮攻击,每轮包含3组2发子弹。这共30发子弹,每发子弹造成300点伤害,命中率为15%。这导致30×300×0.15等于1350平均伤害。突击型机器人拥有3000点护盾,所以这差不多是你护盾的一半。 创建模块 编辑:“将团队计数器E设为未超出射程的敌人数量”应改为“将团队计数器E设为正在攻击我的敌人数量”。 通常你遇到的突击型机器人不会处于中距离,假设与敌方突击型机器人的平均距离大约在长距离的一半位置,它可以发射2.5轮攻击,平均造成675点伤害,我将其四舍五入为满护盾的五分之一。因此,如果有5个敌人向我开火,即使我处于满护盾状态也会撤退。

考虑到护盾后我们发现,如果单独添加护盾节点,就能实现相对平滑的过渡。

举个例子,假设我们有33%的护盾,这会触发最上方的3个护盾节点。当没有敌人攻击我们时,E的值为3。现在,如果有2个敌人在中远程距离发起攻击,假设它们各自会发射2.5轮子弹,那么我们平均会受到1350点伤害,当护盾消失后,会受到350点生命值伤害。 无论是这里,还是将675点伤害四舍五入为我护盾的五分之一,我都对自己将要承受的伤害持乐观态度。这对我来说是有效的,但可能会因队伍组成和AI的其他部分而有所不同。 然而,有些对手几乎每次都会让我的机器人在撤退时损失生命值。由于并非所有对手都会如此(希望如此),我们不想为所有对手调整逃跑阈值,因为这可能会导致我们在无需逃跑时也选择撤退。解决此问题的方法是,一旦受到一定伤害就提前开始逃跑。这有助于我们避免因运气不佳而意外被击败,但对我而言,这主要是一种根据对手的游戏风格来调整自身策略的方法。

虽然这能让你的机器人存活下来,但会明显影响它们击退敌人的能力。有时战斗初期对我有利,我能击退敌人,但一旦我的机器人开始受到伤害,它们的攻击性就会降低,这时对手反而开始反击我。 由于机器人在中近距离能造成更多伤害,我添加了下一个节点,以便更好地应对中近距离可能受到的任何伤害。

这是通过增加近距离或中距离攻击我的敌方机器人的计数器来实现的。这远非完美的解决方案,我会在未来的改进部分中解决这个问题,但在多个机器人在中距离攻击你的情况下,这很有帮助。 最后我们要讨论的是敌方狙击手。它能造成大量伤害,如果没有合适的应对手段,这种伤害会突然降临。虽然有比我这里介绍的更好的对付狙击手的方法,但这个系统对我来说效果很好。

每有一名狙击手攻击我们,计数器就增加2。因此,每名攻击我们的狙击手总共价值3点。这是因为狙击手会一次性夺走你三分之二的护盾,这与五分之三非常接近。所以,如果你拥有的护盾少于75%,就会始终逃离正在攻击你的狙击手。 在我看来,有一点很重要,那就是如果除了这个模块外没有其他模块,确保在有2名狙击手攻击你时进行逃离是非常关键的。如果两次攻击都命中,仅狙击手就会让你失去最大生命值的五分之一。 未来改进方向 该系统对拥有大量突击单位的队伍存在弱点,这是因为突击单位可以快速切换目标。此机制无法知晓周围有多少敌人,这可能会引发一些问题。对我来说,一个简单且有效的解决方案是:如果范围内有3个或更多敌方突击单位,就将E值增加1。 该系统将3种非狙击机器人单位视为等效的伤害输出单位,我认为这是一个不错的近似处理,但中距离的机枪兵除外。如果敌方机枪兵在中距离向我发起攻击,我会立即退出中距离范围。 为实现这一点,当被敌方机枪兵在中距离攻击时,我只需将计数器E增加5,这样我的机器人就会退到长距离位置。 这个系统存在一些缺陷,可能导致你的机器人在退开后又重新进入机枪兵的中距离范围。一个临时的解决办法是:一旦敌方机枪兵向你开火,就立即开始攻击。在这种情况下,没有理由继续向前推进。另一个要点是,如果你进入敌人的中距离范围且不得不撤退,要知道如果对方是突击型单位,可能会发射5轮攻击;如果是机枪型单位,造成的伤害量也大致相当。 解决办法是标记所有在中距离攻击你的敌人,并在它们持续攻击期间保持标记。然后,每有一个被标记且正在攻击你的敌方单位,就增加E值。 狙击计时器也有助于减少你的机器人受到的伤害,并让它们有更多时间射击敌人,因为这样就不会过早撤退。如果使用狙击计时器,在将E值设为攻击你的敌方单位数量时,就不应再考虑敌方狙击手了。
2026-03-22 13:00:06 发布在
GLADIABOTS - AI Combat Arena
说点好听的...
收藏
0
0
