经典的棋盘游戏 Risk 涉及通过赢得使用骰子进行的战斗来征服世界。网络上有很多地方可以根据每个玩家拥有的军队数量找出赢得战斗的几率。然而,我所看到的所有这些都是通过蒙特卡罗模拟来实现的,因此本质上是近似的。Wolfram语言使计算准确的值变得如此容易,以至于我忍不住一次性地计算了一遍。
以下是基本战斗规则:进攻方最多可以选择三个骰子(但必须至少比骰子多一支军队),防守方最多可以选择两个(但必须至少拥有两支军队才能使用两个)。为了获得最大的获胜机会,您总是尽可能使用最多的骰子,因此我将忽略其他情况。两名玩家同时掷骰子,然后将双方最高的骰子配对,并且(如果双方都至少掷出两个骰子)次高的骰子配对。最高的骰子会杀死一支军队,在平局的情况下,进攻方是输家。重复这个过程,直到一方军队用完为止。
所以我的目标是创建一个函数pBattle[a,d],它返回战斗最终以攻击者获胜的概率,假设攻击者以 a 支军队开始,而防御者以 d 支军队开始。
我首先编写基本的游戏规则。主要的情况是双方都有足够的军队来至少用两个骰子进行战斗。单轮战斗有三种可能的结果。攻方两胜两败,或双方各输一军。因此,赢得这场战斗的概率是被杀死的军队被移除后获胜概率的总和乘以该结果的概率。
我们还必须涵盖这样一种