如何科学地提高卡牌对战的获胜概率

2023/12/123100 浏览攻略
我们都知道元气骑士前传中,在凉凉茶馆里有一位卡牌爱好者,与其对战便可以有机会赢得卡牌,而对战的规则则是经典的剪刀石头布玩法,由于剪刀石头布本身是运气游戏的刻板印象加上输掉对战会损失卡牌,导致有许多玩家不愿意去尝试卡牌对战,实则利用对战的一些隐藏规则以及卡牌特性,我们便可以做到科学地提升自己的胜算。
TapTap
⅓胜率理论,由概率学大师手•刀哥提出,即任何条件下,玩家赢得对战的可能性都只能是三分之一
不可否认的是,仅以单次猜拳为结果来看,石头剪刀布的胜率确实只有三分之一,因为我不相信这个游戏存在任何玄学,也不认为这个凉屋会设计一个会按照固定规律出拳的AI。不过由于卡牌对战中的平局不算作结果,且不同的卡牌拥有不同的血量、攻击和技能,因此存在一个“理论胜率”的概念。
在游戏中,可以确定的是,每天至多可以赢五次卡牌爱好者,第五张为boss橙卡,而前四张卡牌的品质几乎毫无规律可言,在某“百分百获胜”玄学猜拳的教学视频中甚至还出现了四张全白的情况。排除掉极端情况,我们取白绿蓝紫橙五种卡牌各有一张的平均情况。再将游戏中的这五种卡片取出一个平均数面板数值,以此来计算各种情况下的理论胜率,以下取中位数值得出的卡片面板数据:白卡 5血3攻 血攻总和约为8-9
绿卡 7血4攻 攻血总和约为10-11
蓝卡 8血5攻 攻血总和约为12-13
紫卡 9血5攻或8血6攻 攻血总和约为14-16
橙卡由于各个卡牌之间的差距过大,于是取平均值(不包括骑士之家的角色卡)
橙卡 11.12血8.8攻 攻血总和约为19-20
注:紫卡整理出两种情况是因为有很多boss的攻击是8或者血量是12,这就可能在对阵紫卡时无法确保一击必杀或是承受住紫卡的两次攻击。
那么再以这张“平均橙卡”来对战一张平均白卡作为例子,根据上面整理出的数据可以得知,“平均橙卡”会在你赢1次或输掉4次猜拳后会结束游戏,因此要计算赢得这场游戏的概率,我们就可以使用概率论中的一些基本原理和组合分析来解决这个问题。
首先,我们知道剪刀石头布每一轮的结果有三种可能:赢、输、平局,且假设每种结果发生的概率相等,即⅓。
因为“平均橙卡”被攻击四次出局,而白卡被攻击一次就出局,所以我们只需要关注非平局的情况,因为平局对于游戏结果没有影响。
在非平局的情况下,你赢的概率是½(因为只有赢或输两种情况),对方赢的概率也是½。现在我们来计算一下各种情况下你赢得游戏的概率:
你第一次就赢了对手,游戏结束。这个概率是½。
如果第一次没赢,你还有机会继续玩,直到你赢或者你输四次为止。我们可以用以下方式来表示这些情况:
  • 你输1次后赢得比赛的概率。
  • 你输2次后赢得比赛的概率。
  • 你输3次后赢得比赛的概率。
之前有提到过,因为平局会不影响最终结果,所以我们可以忽略平局存在。而后我们可以将问题转化为一个“负二项分布”问题,其中你需要赢得1次胜利,但是可以承受最多3次失败。负二项分布的概率质量函数为:
[ P(X=k) = \binom{k+r-1}{r-1} p^r (1-p)^k ]
其中 r 是要达到的成功次数(在这里是1),k 是在达到r次成功之前允许的失败次数(在这里是0, 1, 2, 或 3),p 是每次尝试成功的概率(在这里是½)。
因此,你赢得游戏的总概率是:
[ P(赢) = P(0失败) + P(1失败) + P(2失败) + P(3失败) ]
我们可以逐个计算:
[ P(0失败) = \binom{0+1-1}{1-1} (\frac{1}{2})^1 (\frac{1}{2})^0 = 1 \times \frac{1}{2} \times 1 = \frac{1}{2} ]
[ P(1失败) = \binom{1+1-1}{1-1} (\frac{1}{2})^1 (\frac{1}{2})^1 = 1 \times \frac{1}{2} \times \frac{1}{2} = \frac{1}{4} ]
[ P(2失败) = \binom{2+1-1}{1-1} (\frac{1}{2})^1 (\frac{1}{2})^2 = 1 \times \frac{1}{2} \times \frac{1}{4} = \frac{1}{8} ]
[ P(3失败) = \binom{3+1-1}{1-1} (\frac{1}{2})^1 (\frac{1}{2})^3 = 1 \times \frac{1}{2} \times \frac{1}{8} = \frac{1}{16} ]
将这些加起来,我们得到:
[ P(赢) = \frac{1}{2} + \frac{1}{4} + \frac{1}{8} + \frac{1}{16} = \frac{8}{16} + \frac{4}{16} + \frac{2}{16} + \frac{1}{16} = \frac{15}{16} ]
最后经过计算我们可以得出平均橙卡打赢白卡的概率为93.75%
用同样的方法可以计算出对阵绿卡和蓝卡(均能承受三次失败)时的理论胜率为87.5%,实战中会因为极个别特殊蓝卡(如9血或6攻)的存在导致胜率会偏低一些,但不会偏差太多。
关于紫卡的胜率计算取9血5攻的面板来计算,也就是“可以承受三次失败,需要两次胜利才能击杀”,相比白卡的情况要复杂一点,不过可以通过概率树或者建立一个简化的概率模型来手动计算这个问题。
首先创建一个状态矩阵来表示玩家的胜利状态,其中:
我输0次,对方输0次的状态记为 S00
我输1次,对方输0次的状态记为 S10
我输2次,对方输0次的状态记为 S20
我输0次,对方输1次的状态记为 S01
我输1次,对方输1次的状态记为 S11
我输2次,对方输1次的状态记为 S21
我输0次,对方输2次的状态记为 S02(对方出局,我赢)
我输1次,对方输2次的状态记为 S12(对方出局,我赢)
我输3次,对方输0/1/2次的状态记为 S30/S31/S32(我出局,对方赢)
现在,我们可以用转移概率来表示从一个状态到另一个状态的概率。例如,从状态S00开始,有½的概率进入S01(我赢),有½的概率进入S10(我输)。
我们的目标是找到从初始状态S00开始,最终达到S02或S12状态(我赢)的总概率,而不是到达S30、S31或S32状态(我输)的概率。
由于状态S02和S12是终止状态(游戏结束,我赢),它们的胜利概率是1。另一方面,状态S30、S31和S32也是终止状态(游戏结束,我输),它们的胜利概率是0。
下面是各状态的胜利概率:
P(S02) = 1
P(S12) = 1
P(S30) = 0
P(S31) = 0
P(S32) = 0
对于其他非终止状态,胜利概率可以使用以下递归关系式进行计算:
P(S00) = 1/2 * P(S01) + 1/2 * P(S10)
P(S01) = 1/2 * P(S02) + 1/2 * P(S11)
P(S10) = 1/2 * P(S11) + 1/2 * P(S20)
P(S11) = 1/2 * P(S12) + 1/2 * P(S21)
P(S20) = 1/2 * P(S21) + 1/2 * P(S30)
P(S21) = 1/2 * P(S22) + 1/2 * P(S31)
之后再用已知的终止状态概率来反向求解这些方程。已知P(S02)和P(S12)已知分别为1。用这些值来求解P(S01)和P(S11):
P(S01) = 1/2 * P(S02) + 1/2 * P(S11) = 1/2 * 1 + 1/2 * P(S11)
P(S11) = 1/2 * P(S12) + 1/2 * P(S21) = 1/2 * 1 + 1/2 * P(S21)
接下来,我们需要求解P(S21),但是P(S21)依赖于P(S22)和P(S31),而P(S22)实际上是P(S02),因为当我输两次,对方输两次时,游戏已经结束,所以P(S22) = P(S02) = 1。同时,P(S31)是一个终止状态,其值为0。因此:
P(S21) = 1/2 * P(S22) + 1/2 * P(S31) = 1/2 * 1 + 1/2 * 0 = 1/2
现在我们有了P(S21)的值,我们可以回到之前的方程求解P(S11):
P(S11) = 1/2 * 1 + 1/2 * P(S21) = 1/2 * 1 + 1/2 * 1/2 = 3/4
有了P(S11),我们可以求解P(S01):
P(S01) = 1/2 * 1 + 1/2 * P(S11) = 1/2 * 1 + 1/2 * 3/4 = 1/2 + 3/8 = 7/8
现在我们需要求解P(S10)和P(S20),但是这两个状态都依赖于P(S20)和P(S30)。P(S30)是一个终止状态,其值为0。所以我们需要先计算P(S20):
P(S20) = 1/2 * P(S21) + 1/2 * P(S30) = 1/2 * 1/2 + 1/2 * 0 = 1/4
有了P(S20),我们可以求解P(S10):
P(S10) = 1/2 * P(S11) + 1 * P(S20) = 1/2 * 3/4 + 1/2 * 1/4 = 3/8 + 1/8 = 1/2
最后,我们可以使用P(S01)和P(S10)的值来求解初始状态P(S00)的概率:
P(S00) = 1/2 * P(S01) + 1/2 * P(S10) = 1/2 * 7/8 + 1/2 * 1/2 = 7/16 + 1/4 = 7/16 + 4/16 = 11/16
因此,从初始状态S00开始,我们得出对阵紫卡的理论胜率为68.75%。
TapTap
树状图分析情况
最后橙卡直接脑测得出50%的理论胜率(因为是自己打自己),整理一下刚刚算出的数据:
白 93.75%(赢1输4)
绿 87.5%(赢1输3)
蓝 87.5%(赢1输3)
紫 68.75%(赢2输3)
橙 50%(赢2输2)之后再将数据和100%相乘,得出连五把全赢的概率为24.67%
如果只取前四张卡的情况,理论胜率便会达到49.34%,这个数据只会更高,因为实战中白绿卡出现的概率要比蓝紫卡高的多。
那么显而易见的,既然使用橙卡可以大幅提高我们的胜率,究竟应该使用哪张橙卡便成了一个问题,目前游戏中有三张boss卡被认为拥有最强的卡牌对战能力。分别是第一回合无敌的沙虫,拥有全游戏最高生命值的雪山大猿王,以及全游戏最高攻血总和的灰烬火龙。
TapTap
这三正好凑齐三属性了
先以大猿王为例,计算对阵五种品质的理论胜率,猿王的能力放在概率计算上可以理解为能够多承受一次白卡绿卡和紫卡的攻击,以及能做到一击杀死绝大部分蓝紫卡(出剪刀的情况下),那么再套用上面的公式,计算出如下理论胜率:
白 96.88%(赢1输5)
绿 93.75%(赢1输4)
蓝 87.5%(赢1输3,需要出剪刀)
紫 87.5%(赢1输3,需要出剪刀)
橙 50%(赢2输2)
再将它们相乘可得出,雪山大猿王连赢五把的概率为34.68%,相比平均橙卡多出整整10%,而如果只看前四局的理论胜率则是达到了惊人的69.53%(实战只会更高)
horizontal linehorizontal line
接下来是沙虫的情况,沙虫的能力放在数学上来讲就是你第一回合有⅓概率赢和⅔概率平局。这个能力在对方攻击力越高时提升越明显,还是以白卡为例,沙虫可以承受白卡是四次攻击,并且能够做到一击杀死对方。那么理论胜率的计算就可以先将整个游戏分成两个阶段:
第一回合:你有⅓的概率赢,⅓的概率平局,⅓的概率输(但这次输不会使你扣血)。
后续回合:你有½的概率赢,½的概率输。
现在,我们来计算你赢得游戏的总概率。
首先,考虑第一回合:
赢(概率⅓),游戏结束,你获胜。
平局或者输(概率⅔),游戏继续。
在第一回合之后的任何回合,你必须在对方攻击你四次之前赢得比赛。这也是一个负二项分布问题,其中你需要1次成功(即赢得比赛),而你可以承受最多3次失败(即被攻击3次)。因此,你在后续回合赢得游戏的概率是:
[ P(赢) = P(0失败) + P(1失败) + P(2失败) + P(3失败) ]
其中每一项的计算方式如下(这里的p是½,因为之后的每一轮你赢的概率是½):
[ P(0失败) = \binom{0+1-1}{1-1} (\frac{1}{2})^1 (\frac{1}{2})^0 = 1 \times \frac{1}{2} = \frac{1}{2} ]
[ P(1失败) = \binom{1+1-1}{1-1} (\frac{1}{2})^1 (\frac{1}{2})^1 = 1 \times \frac{1}{2} \times \frac{1}{2} = \frac{1}{4} ]
[ P(2失败) = \binom{2+1-1}{1-1} (\frac{1}{2})^1 (\frac{1}{2})^2 = 1 \times \frac{1}{2} \times \frac{1}{4} = \frac{1}{8} ]
[ P(3失败) = \binom{3+1-1}{1-1} (\frac{1}{2})^1 (\frac{1}{2})^3 = 1 \times \frac{1}{2} \times \frac{1}{8} = \frac{1}{16} ]
合并这些概率,我们得到:
[ P(赢|继续) = \frac{1}{2} + \frac{1}{4} + \frac{1}{8} + \frac{1}{16} = \frac{8}{16} + \frac{4}{16} + \frac{2}{16} + \frac{1}{16} = \frac{15}{16} ]
所以,在第一轮之后继续的条件下,你赢得游戏的概率是93.75%
现在,我们需要将这个概率与第一轮的概率结合起来。你在第一轮赢的概率是⅓,而在第一轮没赢(平局或者输,但这次输不算数)后继续比赛并最终获胜的概率是⅔(继续的概率)乘以93.75%(后续回合赢的概率)。
因此,你赢得整个游戏的总概率是:
[ P(总赢) = P(第一轮赢) + P(继续) \times P(赢|继续) ]
[ P(总赢) = \frac{1}{3} + \left(\frac{2}{3} \times \frac{15}{16}\right) ]
[ P(总赢) = \frac{1}{3} + \frac{30}{48} ]
[ P(总赢) = \frac{1}{3} + \frac{5}{8} ]
[ P(总赢) = \frac{16}{48} + \frac{30}{48} ]
[ P(总赢) = \frac{46}{48} ]
[ P(总赢) = \frac{23}{24} ]
得出沙虫对战白卡的理论胜率为95.83%
同样的方法,得出对阵绿卡和蓝卡时的理论胜率为87.5%,因为沙虫自身12血8攻的缘故,个别特殊蓝卡可能会导致实战胜率要偏低一些,但误差不会太大。
而紫卡取9血5攻的面板,可以承受沙虫2次的攻击,紫卡的3次攻击可以打败沙虫。
接下来,我们可以分析在每回合结束后的状态,用一个二元组来表示当前的状态,其中第一个数字表示你攻击对方的次数,第二个数字表示对方攻击你的次数。游戏开始时的状态是 (0,0)。
在第一回合结束后,有两种可能的状态:
赢:状态变为 (1,0),概率为 ⅓
平局或输:状态仍然是 (0,0),概率为 ⅔
从第二回合开始,每回合赢或输的概率都是 ½。我们需要考虑所有可能导致游戏结束的路径,并计算赢得游戏的总概率。
为了简化计算,我们可以通过递归的方式来分析。我们先定义一个函数 P(win, lose),它返回在当前状态 (win, lose) 下你最终赢得游戏的概率。win 是你攻击对方的次数,lose 是对方攻击你的次数。我们要找的就是 P(0, 0) 的值。
由于游戏规则和状态转换,我们可以得到以下递归关系:
如果 win == 2,则 P(win, lose) = 1,因为对方已经出局。
如果 lose == 3,则 P(win, lose) = 0,因为你已经出局。
对于其他情况,P(win, lose) = 0.5 * P(win+1, lose) + 0.5 * P(win, lose+1),即你有一半的概率赢得这一回合并攻击对方,一半的概率输掉这一回合并被对方攻击。
现在我们可以计算出各个状态下赢得游戏的概率:
P(2, 0) = 1(因为对方已经被攻击2次,直接出局)
P(2, 1) = 1(同上)
P(2, 2) = 1(同上)
P(1, 3) = 0(因为你已经被攻击3次,直接出局)
P(0, 3) = 0(同上)
P(1, 2) = 0.5 * P(2, 2) + 0.5 * P(1, 3) = 0.5 * 1 + 0.5 * 0 = 0.5
P(1, 1) = 0.5 * P(2, 1) + 0.5 * P(1, 2) = 0.5 * 1 + 0.5 * 0.5 = 0.75
P(0, 2) = 0.5 * P(1, 2) + 0.5 * P(0, 3) = 0.5 * 0.5 + 0.5 * 0 = 0.25
P(0, 1) = 0.5 * P(1, 1) + 0.5 * P(0, 2) = 0.5 * 0.75 + 0.5 * 0.25 = 0.5
因为沙虫的能力会使第一回合输的情况被视为平局,第一回合的状态计算如下:
如果第一回合你赢(概率为 ⅓),那么你赢得游戏的概率是 P(1, 0) = 0.875。
如果第一回合平局或你输(概率为 ⅔),那么你赢得游戏的概率是 P(0, 0) = 0.6875。
整理一下最终的计算结果:
⅓ * 0.875 + ⅔ * 0.6875 = 0.2916 + 0.4583 = 0.7499(约等于75%)
最终得出,理论上沙虫对阵紫卡的胜率大约是 75%,因为紫卡中也有不少8血的卡存在,所以这个数据实战中会偏高一点。
用同样的方法计算一下对阵平均橙卡的胜率,双方各需要两次攻击可以杀死对方,而沙虫拥有第一回合无敌的技能。
还是以状态的方式计算,在第一回合后的状态有两种可能性:
赢(概率⅓),状态为(1,0)。
平局或输,但因为沙虫第一回合无敌,状态仍然是(0,0)(概率⅔)。
从第二回合开始,平局的情况会重赛,所以只考虑输赢。每一回合我们赢或输的概率是½。
现在分析从状态(1,0)和(0,0)开始的情况:
从(1,0)开始:
你再赢一次(概率½),你就赢得了比赛。
你输了(概率½),状态变为(1,1)。
从(1,1)开始:
你赢了(概率½),你就赢得了比赛。
你输了(概率½),你就输掉了比赛。
从(0,0)开始:
你赢了(概率½),状态变为(1,0),之后的情况我们已经分析过了。
你输了(概率½),状态变为(0,1)。
从(0,1)开始
你赢了(概率½),状态变为(1,1),之后的情况我们已经分析过了。
你输了(概率½),你就输掉了比赛。
现在我们可以计算每个状态的胜率:
状态(1,0)的胜率是½(直接赢得比赛)+ ½ * ½(输了一次后再赢)= ½ + ¼ = ¾。
状态(0,0)的胜率是½ * ¾(赢了一次后的状态(1,0)的胜率)+ ½ * ½(输了一次后的状态(0,1)的胜率)= 3/8 + ¼ = 5/8。
状态(0,1)的胜率是½ * ½(赢了一次后的状态(1,1)的胜率)= ¼。
因此,你赢得比赛的总概率是:
第一回合赢(状态(1,0))的概率⅓乘以状态(1,0)的胜率¾,加上第一回合平局或输(状态(0,0))的概率2/3乘以状态(0,0)的胜率5/8:
(1/3 * 3/4) + (2/3 * 5/8) = ¼ + 5/12 = 3/12 + 5/12 = 8/12 =2/3(66.66%)
最终得出,沙虫在对战平均橙卡时拥有66.66%的理论胜率
整理一下数据:
白 95.83%(赢1输4)
绿 91.66%(赢1输3)
蓝 91.66%(赢1输3,实际要低一点)
紫 75%(赢2输3,实际要高一点)
橙 66.66%(赢2输2)
连赢五把的概率是40.25%,比猿王还要高6%,
但是只打前四张的理论胜率只有60.83%,比猿王要低9%
horizontal linehorizontal line
最后灰烬火龙,12血12攻的逆天面板放在数学上可以理解为任何情况下都能一击杀死对手(极个别橙卡除外),因此理论胜率基本都可以直接从猿王和平均橙卡那里抄过来,而对战橙卡的赢1输2也可直接脑测得出为75%,最终数据如下:
白 93.75%(赢1输4)
绿 87.5%(赢1输3)
蓝 87.5%(赢1输3,实际要低一点)
紫 75%(赢1输2)
橙 75%(赢1输2,实际要低一些)
注:因为个别蓝卡伤害为6,能做到2次攻击杀死火龙,此情况下理论胜率会降到75%。个别橙卡血量超过12,不会被火龙一击杀死,此情况下理论胜率为降到50%
将这些数据相乘,得出灰烬火龙连赢五把是理论胜率为40.37%,只打前四张的理论胜率是53.83%
TapTap
横向对比得到的数据,可以看到沙虫在五张全打的情况下有着最高的理论胜率(因为火龙在实战中会有些许误差,实际上是沙虫的胜率要更高一点),雪山大猿王在只打前四张的情况下理论胜率最高,而对战boss的情况下灰烬火龙有着最高的理论胜率。
那么加上前面提到的规则,先用猿王打完前面四张卡,最后用火龙来对战boss,这样绝大部分情况下你五把全赢的理论胜率便可以达到52.15%,要知道刚刚算出的平均橙卡的胜率才只有24.67%
horizontal linehorizontal line
出拳应该出什么
另外有关出拳逻辑也有一定的将就,虽说石头剪刀布就是个⅓胜率的猜拳游戏,按理说出什么都不影响结果,但因为游戏里卡片不同的技能的存在导致不同出拳的收益不同,甚至会直接影响到游戏的胜负。
比如敌方的专精类技能发动,可能原本预计能承受3次伤害的12血变得只能承受2次
TapTap
TapTap
亦或者让敌方发动了智力之息类的技能,让原本预计能一次攻击打败的8血变成了9血
TapTap
还有更加烦人的抵抗类技能,同样能让自己的8血多承受一次攻击
TapTap
说到这里大家可能明白了,这些技能都和卡片自身的属性/颜色对应,为了防止可能的输局/平局所导致的敌方发动技能,选择克制对方卡牌颜色的出拳有着最高的收益,因为同样是⅓的概率赢,这样的出拳规则还可以做到防止敌人发动技能,从而提高自己的理论胜率。
就以上面的虚空飞船举例,出拳阶段观察对方卡牌颜色,根据 红-力量-拳头,绿-敏捷-剪刀,蓝-智力-布 的规则选择克制对方卡牌的出拳,这样即使没赢也能阻止对方发动技能,也相当于间接提高了自己的胜率。
horizontal linehorizontal line
总结
选雪山大猿王打前四张牌,灰烬火龙打第五张牌
出拳时按照对方卡牌颜色出对应的拳
此攻略仅讨论如何科学地提高自己卡片对战中的胜率,无法做到百分百获胜
当然,最具有性价比的方法是拿自己不需要的卡牌去对战啦~
70
55
16