我有两个玩家,我想模拟他们之间的游戏两者都有一些属性(力量,智力…)和不同的行为一些行为的结果是基于属性值和一些运气因素。
算法:
为两个玩家构建一个包含所有可能移动的游戏树
游戏树的深度可能有限
每个级别都属于不同的玩家
在叶节点上使用一些启发式方法,找出必须移动的玩家获胜的概率
向上传播概率(就像minimax算法一样)
选择概率最高的动作
继续此算法的开头
所以,基本上这是minimax算法。不过,我没什么问题:
如何考虑运气因素?
当我移动一步时,是否需要再次运行整个算法?(建立具有+1深度和新根节点的树,计算新的概率…)
还有其他模拟战斗的方法吗?
谢谢。
最佳答案
虽然通常你的算法是有意义的,但我们无法保证这个算法是最好的。例如,让我们想象两个游戏:
在第一场游戏中,每个玩家有两个动作:用枪射击和用剑打击在这个游戏中,每一步都不会影响其他的步骤,所以建立一个移动树在这里没有任何意义每个玩家只需选择武器,继续射击/打击,并高喊“带着盾牌还是戴着盾牌!”直到死亡或胜利。
第二局还有第三个动作-偷对方的盾牌。在这种情况下,移动树会更有意义,因为很明显,如果你已经决定偷敌人的盾牌,那么在用剑攻击之前偷它会更有意义。
所以你是否需要这个移动树很大程度上取决于你的游戏规则。
在我看来,关于运气因素的主要选择是是否将它的影响包含到移动树中。这取决于运气因素是否以同样的方式影响每一个动作。如果是真的,那么在计算移动树时可以忽略运气因子,然后在计算所选操作的结果时应用运气因子否则,如果运气因素以不同的方式影响不同的行动(例如,即使是完全失败者也可以用枪射杀敌人,但用勺子技能杀人需要好运),那么在计算移动树中的概率时,应该考虑运气因素。
是否需要在每个节点之后重新计算整个树取决于是否可以100%预测所选操作的结果。例如,在国际象棋中,你可以预测,如果你决定移动一个棋子,那么这个棋子肯定会在你决定的地方移动。这允许您在每一步中在移动树中选择一个分支,并为其中的每个场景计算一个移动,而不是从无到有地重新计算整个树。但如果玩家决定用枪射击,这是不适用的,但因为他不走运的一天,他会开枪打自己的腿。
关于algorithm - 如何模拟两个玩家之间的战斗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5445060/