刀塔自走棋末日变羊目标选择机制 李代桃僵巧避针对
导语
一些关键性的技能释放事实上在后台有其相应逻辑,通过合理的炮灰阻挡我们可以更好地保护自己的核心棋子施放技能。
前一阵子在社区发表了一些有关变羊目标选取的言论。不过当时我还没有对这个问题进行仔细研究,只是道听途说。本着认真负责的态度,我还是花时间研究了这个问题。中间恰逢一次版本变动,以及其他各种原因,拖得有点久,好在虽迟但到。
首先要说明,7月6日的版本更新中,“萨满祭司-妖术的目标选取现在是随机的”这一条仅针对双萨满的职业羁绊,羊刀和小Y(暗影萨满)变羊的目标选取规则仍然与Doom相同。为表述方便,在下文用Doom统一代替Doom、羊刀变羊、暗影萨满变羊。另外,7月6日的更新使得Doom的目标选择更加偏向随机化,这点会在后文说明。阅读文章比较快的同学请注意区分更新前和更新后的区别。
Doom的目标选取遵循以下规则:
30%概率随机选取敌方目标,70%概率选取一个等级最高的敌方目标
选取等级最高的目标时,最大魔法值小于等于0的目标视为1级
选取最高等级的目标时,技能为被动的英雄不会选为目标
选取最高等级的目标时,已经被Doom、变羊的目标不会重复选为目标
对于30%概率随机选取的情况,没有特殊限制条件。
等级是每个单位都有的属性,和信使等级一样,在面板左下角查看。
一星巨牙海民等级为1
如果把等级最高理解为棋子的出售价格最高也没有太大问题(野怪和召唤物还是要回归到等级上),因为棋子的出售价格是由等级决定的——与等级相同。如果把等级最高理解为最贵似乎就有不妥。虽然花费更多钱得到的棋子有较高的等级,但两者的增加并不成比例。比如德鲁伊棋子可以用更少的数量合成,且三星德鲁伊棋子要比同费用的三星棋子等级低。再比如一费三星棋子通常是5级,需要9块钱合成,而5费一星棋子也是5级,只需花费5块钱购买。再有小精灵参与合成不会提高最终棋子的等级。还有很多难以言明的理由。
第二三条规则乍看起来有些重叠,细想则不然。尽管大多数技能为被动的英雄最大魔法值也是0,但的确存在例外,比如拉比克。有关拉比克的问题比较微妙,此处按下不表。另外规则二对野怪和召唤物也会产生很多影响,不过这个问题比较琐碎,在游戏中多留心观察更好。剩下的关键问题就是,选取最高等级目标时,如果有多个敌人等级相同且都是最高,会以什么顺序选择?
查看源代码发现,Doom目标选取时会遍历一张表(实质是个数组),表中存储的是棋盘上出现的所有棋子,遍历顺序即表中棋子存入的顺序。有多个等级最高的敌人时,被选取的优先顺序与棋子在表中的存储顺序相同。为方便表述,就称该表为List。我们事先约定两个说法,出场和上场。上场单指棋子被从板凳席丢到棋盘上。出场指棋子以各种形式出现在棋盘上,包括回合开始摆放棋子,棋子上场,镜像敌方棋子,被召唤等等。然后给出结论:Doom选取最高等级敌人的顺序与棋子出场顺序大致相同,出场顺序受上场顺序影响。
棋子的出场大致分为四个阶段:
回合开始时,将你的棋子重新摆放到棋盘上
准备回合,棋子上场或在棋盘上合成
战斗开始前,将对手棋子的镜像摆到棋盘上
战斗过程中,产生召唤物或幻像
这四个阶段本身在时间上存在先后(一二阶段理论上可以有重叠,但是我没试过),后面阶段出场的棋子在List中存储的位置也更靠后。在不同阶段出现的棋子有敌我区别。一二阶段是我方棋子出场,决定了客场作战的敌人如何选择主场作战的棋子为目标。第三阶段是敌方棋子出场,决定了主场棋子如何选择客场作战的敌人为目标。第四阶段则是敌我双方皆有。
第一阶段时,程序会遍历一张表(实际为散列表),该表保存了玩家棋盘的哪个格子摆放了什么棋子,我们就简称这张表为Hash。程序根据遍历结果,把一个一模一样的棋子摆放到原来的位置上。棋子摆好后会立即记录到List中。
在7月6日更新前,第一阶段棋子的出场顺序和Hash的遍历顺序相同。Hash的遍历顺序比List要复杂得多,从程序视角来看涉及到编程语言的底层机制,此处不便展开。而从玩家视角来看,与场上棋子数量、所在的格子和格子的使用顺序都有关。不过,只要不对场上棋子做调整,这个顺序就是稳定不变的。这也是在主场作战时,虽然自己有多个最高等级的棋子,但其中某一个总是被Doom的原因。
7月6日更新后,这一状况发生了改变。虽然在重新摆放棋子时仍然要遍历Hash,但得到棋子信息后,程序不会立即将它摆到棋盘上,而是等待一段随机延时后再开始摆放。这就导致棋子的出场顺序变得随机,进而导致List中棋子的存储顺序变得随机。既然变成了随机的,玩家们就不必再在这个问题上操心了。
更新前
更新后增加了随机延时
第二阶段是应对Doom的关键。当把一个棋子从板凳席丢上场,这个棋子的信息会被立即追加到List的末尾。这就意味着新上场棋子在List中的顺序是可控的。比如,准备阶段,先后将一个宙斯和一个潮汐丢上场,对面Doom在选取最高等级敌人时的遍历顺序就是:第一阶段出场的棋子、宙斯、潮汐。也就是说,如果有多个等级相同的棋子,只要把最不想被Doom的棋子撤回来再丢上去即可。如果更细致一点,可以把相同等级的全部棋子都撤回,然后按照希望被Doom的顺序依次丢上场。进行此操作时,需要注意以下几点:
需要每个准备回合都重新操作,因为顺序会在第一阶段被打乱
不要企图拿技能是被动的英雄当炮灰,原因见上文Doom目标选取规则
最高等级棋子全部阵亡后,次高等级棋子会变为新的最高。如果想要残局打得精致,就要多操作
仍然有30%概率随机选取,前述操作就不管用了
如果被选为炮灰的棋子成了真炮灰而提前阵亡,不想被Doom的棋子仍会成为目标
仅对主场有效,客场无效
第三阶段时,程序按匹配结果将对手的棋子镜像摆放到棋盘上。这个过程和第一阶段摆放主场棋子类似,也会因为随机延时导致出场顺序变得随机。不过,这不是7月6日更新做出的调整,而是早就存在的设定。因此,如果你的某个棋子客场作战时在茫茫人海中被连续Doom,那只能归因于运气不好(除非还有哪些我没探索到的神秘原因)。
第四阶段主要涉及召唤物和幻像等在战斗阶段新产生的棋子。新棋子产生的同时也会记录到List末尾。如果你足够精致,可以思考下产生召唤物的顺序对战斗的影响,比如按战斗力排一下被变Doom的顺序。不过,召唤物的最大魔法值通常是0,在Doom选择高等级敌人时,其等级被视为1。所以尽管如此精致,但也只能在很少的残局中才有用。