17

我正在按照最终幻想战术实施一个基于小网格、基于回合的策略。

你对我如何处理目标选择、动作和技能选择过程有什么想法吗?

我正在考虑将这些决定断开,但这三个决定在很大程度上是相互关联的。(例如,除非我知道要攻击谁,以及我将使用的技能范围有多大,否则我无法决定移动到哪里,反之亦然,除非我知道要攻击多少回合,否则我无法决定攻击谁将带我到达每个目标)

我想走向一个统一的系统,但是尝试以类似于杀戮地带 1 AI 的方式使用的潜在实地研究中的东西让我陷入了局部最大值。

=== 更新 1

我目前正在尝试使用潜在领域/影响图来生成我做出决定的数据。

我不知道如何处理拥有许多技能,以及不会造成伤害而是增益/减益或改变世界的技能。

其他人建议使用目前在围棋游戏中使用的蒙特卡洛树搜索。

我相信我的演员将使用的空间不适合它,因为游戏中的许多动作都不会导致你可以攻击和影响世界的位置(我所处的世界比最终幻想战术更大)

在最终幻想战术中它可能会成功应用,尽管分支因子比 9x9 Go 大得多(据我了解)

===

在此先感谢,Xtapodi。

ps.1 - 一个问题是,要准确地知道敌人有多远,我需要找到他的路径,因为虽然敌人在附近,但一个不可逾越的悬崖可能会将我们隔开,需要 4 个转弯才能绕过。或者更糟糕的是,一个单位挡住了路,比如说一座桥,所以实际上没有办法接触到他。

4

3 回答 3

15

我使用的一种方法是做一个两遍系统。

首先,找出你的单位可以去哪里。使用 A* 或其他标记地形以查看该单位本回合可以移动多远。

一旦你知道了这一点,就可以逐步了解你可用的战术(近战攻击、治疗友方单位等),并为该战术的所有可用用途分配一个适应度函数。如果您通过标记的地形,您可以非常快速地确定您可能的战术空间是什么。

这为您提供了一个可用策略列表及其每一步的适应度函数。选择最好的一个或从顶部随机化。如果没有任何可用的策略,请重复该过程,将地形标记为两个移动,依此类推。

我所说的适应度函数是决定在某个单位或位置上执行策略的“价值”。例如,您的“治疗友方单位”战术决策阶段可能会遍历所有友方单位。如果一个友方单位在范围内(即,可以从您的单位可以到达的位置到达),请将其添加到可能的战术列表中,并为其赋予等于 100 *(1.0 - 单位生命值)的适应度等级,其中单位生命值范围从 0 到 1。因此,将一个角色恢复到仅剩 10% 的生命值将值 90 点,而一个仅下降 5% 的单位将只值 5,并且该单位甚至不会考虑治疗未受伤的单元。特殊单位(即保持胜利条件所需的“保护boss”场景单位)可以被赋予更高的基数,

同样,您的“近战攻击”决策阶段将遍历所有可到达的敌方单位,计算可能的伤害,并将其与单位的生命值进行比较。给每个单位一个“攻击意愿”,并将其乘以你可能做的剩余生命值的百分比,你就有了一个非常详细的适应度函数,有利于尽可能消除单位,但仍然追求高价值目标。

使用这样的过程,您将获得一个选项列表,例如“移动到位置 A 并治愈友方单位 B:50 分”、“移动到位置 C 并攻击敌方单位 D:15 分”等。突然,它是真的很容易选择战术。

可以通过将策略的适合度乘以实施它所必须采取的路径的适合度来添加更多细节。例如,如果你为了治疗一个友方单位而必须移动到的地方使你处于严重危险之中(例如,站在熔岩空间或其他地方),你可以通过将该策略的适用性乘以.2 左右,以便单位仍然可以考虑它,但前提是它真的很重要。所有这一切都需要编写一个算法来评估给定位置的适合度,并且可以像预先计算的“地形期望”数字一样简单,也可以像维护敌方单位的“威胁图”一样复杂。

当然,困难的部分是找到使引擎变得智能的正确措施。但这是您系统调整的有趣部分。

于 2010-07-11T07:39:35.867 回答
3

如果战斗发生的地形是预先确定的,或者不太宽,一篇关于FPS中地形推理的文章可以作为回合制游戏的基础。

简而言之,您为地图的每个单元格预先计算了一组值,例如在给定方向上射击的适用性、保护、能见度……等等。然后 AI 可以使用这些值来选择正确的操作。例如,战斗机会尽可能快地向敌人走去,如果有保护的话,会使用保护,而小偷会走一条从敌人方向的能见度尽可能低的路径,目标是从侧面或后方发动攻击。

但是,如果地形是随机的和/或太宽,则预计算可能会太长而无法使用。

关于纪尧姆

于 2010-06-28T17:55:17.280 回答
1

一个好问题,答案可能无处不在。就个人而言,我在这方面没有太多经验,但我会围绕概念而不是距离制定策略。

您将为每个 NPC 创建一个状态机。它将通过某些设置预测要攻击的角色。

例如,NPC 将被标记为攻击最弱或攻击最强或攻击最受伤。然后我会尝试定位它们,以便它们可以损坏所需的目标。

如果你也有治疗者,你可以对治疗者目标做同样的事情。

目标更改也将是该系统的重要组成部分。所以你会想考虑一下。一个简单的版本是重新评估改变目标给定百分比的转弯。

最后,我会在系统中添加随机机会。例如一个字符可以设置如下

攻击最弱 .25 攻击最强 .50 攻击最受伤 .25

更改目标 .1

到了进攻的时候。您从 0-1 生成一个随机数。如果它在您之下更改目标,您可以通过生成另一个要攻击的目标的随机数来更改目标。

您可以通过增加攻击模式百分比来开始将距离因素考虑到您的系统中。例如,如果需要 3 个回合来攻击最受伤的人。通过将该值除以 3 并将差值分配给其他两种可能性来降低它的目标百分比。

于 2010-06-28T14:57:53.470 回答