1

我想做一个基于卡牌对战的游戏。在这张卡中具有特定的属性,可以增加玩家的生命值/攻击/防御或攻击敌人以降低他的生命值/攻击/防御

我正在尝试为这个游戏制作一个 AI。AI 必须根据 AI 的 hp/attack/defense 和 Enemy 的 hp/attack/defense 等当前情况来预测它将选择哪张卡。由于人工智能看不到敌人的牌,因此它无法预测未来的动作。

我搜索了一些像 minmax 这样的 AI 技术,但我认为 minmax 不适合,因为 AI 无法预测任何未来的动作。

我正在寻找一种非常灵活的技术,以便以后可以添加多种卡片。

您能否为此类游戏推荐一种技术。谢谢

4

2 回答 2

1

这本身不是 ActionScript 3 主题,但我确实认为它相当有趣。

首先,我建议为 Nintendo DS 或类似游戏选择 Yu-Gi-Oh 的 Stardust Accelerator World Championship 2009。

游戏有一个相当先进的计算机人工智能系统,不仅可以处理预期的生命值优势或劣势,还可以处理卡牌优势和连击。如果您要接受这样的挑战,我绝对建议您进行必要的研究(另外,当玩电子游戏就是研究时,谁能抱怨?)

我对构建 AI 的建议如下:当计算机决定其移动时,创建一个移动对象数组。然后让它为它可以看到的每个可能的 Move 创建一个新的 Move 对象。

对于每个移动对象,计算对手的HP会减少多少,他们还有多少张牌,有多少生物等。

让计算机决定什么是最重要的(更多的伤害,更多的牌优势)并让它发挥作用。

更复杂的人工智能也会提前思考几个回合,也许会“看到”其他人看不到的动作。

于 2013-05-13T17:26:28.963 回答
1

我建议你看看我几周前在 Flash 中制作的这款黑白棋游戏。这实现了一个非常基本的 AI,但这些基础知识可以应用于您的情况。

基本上,游戏的运作方式是在每次移动之后(玩家或 CPU,因此我可以确定玩家是否做出了与 CPU 可能做出的动作相比正确的动作),我为每个可能的合法动作创建了一个向量。然后我决定哪个动作提供最高分变化,并将其设置为最佳动作。但是,我也会检查移动是否会导致其他玩家进入角球(如果您从未玩过,抢角的玩家通常会获胜)。如果是这样,我告诉 CPU 避免该移动并检查第二好的移动,依此类推。最终的结果是一个真正可以进行战斗的 CPU。

请记住,这只是一个下午的工作(对于整个游戏,从糟糕的 GUI 到 AI 的功能),所以它非常基础,我可以做一些事情,比如通过检查序列运行未来可能的移动. 有趣的事实是,我的动作(显然是我基于 AI 的)是 CPU 在将近 80% 的时间里会做出的动作。唯一不成立的时候是当我像你玩国际象棋一样玩游戏时,你的移动完全是为了定位移动四轮下线

对于您的游戏,您需要考虑大量变量,而不是像我那样使用单点量表。我建议列出每一件事并对每一件事应用一个点值,这样你就可以对每一件事应用重要性值。我为缓存系统做了类似的事情,它根据年龄、使用情况、大小等自动确定要保留的最重要的文件。然后你查看 CPU 手中的每张卡片,计算每张卡片的价值并播放那张卡片(当然,假设这样做是合法的)。

一旦你弄清楚了,你就可以研究下一个回合中每个动作可以做什么(即每个动作的“伤害”值)。完成后,您可以为其添加功能,让 CPU 做出战略性动作,使他们能够使用更强大的卡或执行“终结”动作,或者它最终会起作用。

不过,再一次,将其保持在一个简单的基于点的系统上,并从那里继续前进。你需要一些你可以在物理上比较的东西,所以坚持基于点的系统会很简单。

我为这个答案的长度道歉,但我希望它在某种程度上有所帮助。

于 2013-05-13T18:42:43.380 回答