然后判定区就比较麻烦, 因为不像装备区直接equip, 判定牌是有"视为"的情况的. 我们参考一下目前能对判定卡进行移动的moveCard函数代码...
啊不好意思140行
我们同样直接撇去一些判断, 直接去找实现的核心代码:
之前的step概述: 0 选定移动目标(加判断目标是否可移动卡)设定AI设定prompt等等等等; 1 判断是否选了目标 然后line效果; 2 game.delay(); 3 选择移动的牌
这里我们注意到对判定区有用的两个信息: 1. 移动判定牌依然是用addJudge再贴上去的; 2. 判断"视为"的牌的方法
这里的link就是上一步玩家选定的移动牌, 也就是说里边的信息就是卡, 然后该卡可能附带信息viewAs, 这就是视为牌的核心. 然后addJudge({name:})这里直接调用了原卡牌"视为"信息link.viewAs.
但是我们想要交换判定区跟只移动一张判定牌是不一样的, 移动判定牌会检测比如说双方都有乐那么乐就无法移动. 所以我们交换判定区首先思路上要跟上边交换装备栏类似, 双方失去->对方添加判定. 但是我怕失去以后的牌不再自带viewAs属性, 我决定额外做两个变量以单独储存卡牌的viewAs信息, 思路如下:
对每个target进行一次:
for遍历所有判定卡->判断该卡是否有viewAs->将该卡的viewAs信息push进某个变量中, 同时将该卡的位置信息(也就是for里的i)push进另一个位置变量中. 这样能保证该卡位置变量跟视为信息变量的位置一一对应.
然后给对方addJudge时再for一次, 然后判断位置变量中是否contains这个位置(i), 如果contain则找到这个i在位置变量中的位置(使用函数indexOf), 在同位置找到该卡的viewAs信息放到上述addJudge函数{name:}里. 如果位置变量里不包含这个i那么直接addJudge这张卡就好(这张卡非转化).
最后需要注意的一点: 三国杀的判定有个特性是后添加先判, 也就是说好像它addJudge是往数组头部添加的. 那么用于addJudge的for需要反过来写: for(var i=event.cards.length-1;i>=0;i--) 这样才能保证添加的判定牌顺序是和原角色完全一样.