3

我想让游戏中的角色执行部分随机但也受偏好影响的动作。例如,如果一个角色感到生气,他们大喊大叫的机会比讲笑话的机会高。所以我正在考虑如何确定角色将采取的行动。以下是我的想法。

解决方案#1:迭代每一个可能的动作。对每个动作进行随机滚动,然后将偏好值添加到该随机数。具有最高价值的行动是角色采取的行动。

解决方案#2:为一个动作分配一个数字范围,更有可能的动作范围更广。因此,如果随机掷骰结果从 1 到 5 的任意位置返回,则该角色会讲笑话。如果它返回 6-75,他们会大喊大叫。等等。

解决方案#3:将所有动作分组并制作一个分支树。他们会采取友好行动还是敌对行动?随机滚动(添加了偏好值)表示敌对。他们会进行身体攻击还是口头攻击?随机掷骰子说是口头的。继续往下走,直到你到达行动。

解决方案#1 是最简单的,但几乎没有效率。我认为解决方案#3有点复杂,但它不是更有效吗?

有没有人对这个特定问题有更深入的了解?#3 是最好的解决方案吗?有更好的解决方案吗?

4

3 回答 3

5

#1 和 #2 很简单,但可能无法很好地扩展到更复杂的行为。行为树(#3)似乎是当今许多游戏中的首选系统。您可以在 AiGameDev.com 上找到一些演示文稿和注释,例如http://aigamedev.com/open/coverage/paris09-report/#session3http://aigamedev.com/open/coverage/gdc10-slides-highlights/ #session2(Crytek的第一个很好)

您可能不需要担心 CPU 使用意义上的“效率”,因为这不太可能成为您游戏的主要瓶颈。减少调整行为所需的程序员/设计人员时间更为重要。

于 2010-05-13T05:46:57.213 回答
1

如果您要使用选项 1 或 2,请查看随机结果桶 - 请参阅Randomness without Replacement。如果您使用树动作,您仍然可以使用一些相同的概念来确定要向下的树的哪个分支;但是,您会内置更多的确定性,因为当您遍历树时,您的选择会受到限制。

如果我没记错的话,Neverwinter Nights 有一个相当不错的 NPC 脚本引擎,它会使用随机概率来确定他们的 NPC 在某些状态下会采取的一些行动,但这些状态本身更多地是由脚本驱动的。 NPC(更像是状态机而不是树,但概念相似)。例如,如果 NPC 正在行走,他们有可能会停下来,可能会笑,等等——但如果他们受到攻击,他们会转而战斗并留在那里。

换句话说,这完全取决于你的行为是什么,以及你希望角色如何表现。

于 2010-05-13T02:58:04.350 回答
1

马尔可夫链,受真实用户行为的影响。

来自维基百科:

马尔可夫链是一个离散随机过程,具有下一个状态仅取决于当前状态的性质。

于 2010-05-13T03:00:32.187 回答