炉石兄弟吧 关注:41,908贴子:577,004
  • 9回复贴,共1

修复XD发现机制只会选择最右边卡牌的问题

取消只看楼主收藏回复

话不多说,先直接上最终修复的点,其实是一个非常简单的修改,如图,打开DefaultRoutine.cs,调整makeChoice方法里面的HasReferencedTag为HasTag就行了。
虽然最终很简单就修复了这个问题,但是定位这个问题的过程还是比较曲折,有兴趣的吧友,可以往下看,我会在后面的楼层更新定位这个问题的过程。


IP属地:四川来自Android客户端1楼2021-01-07 12:50回复
    1、用VS创建一个控制台应用,将HB复制进去,然后根据图片添加依赖项。这样才能查看HB封装编译的接口方法,并在引用间跳转。


    IP属地:四川来自Android客户端2楼2021-01-07 12:54
    收起回复
      2、目标是修复发现机制,所以我全局搜索了很多关键字,比如:“发现”、“discovery”、“discover”,过程比较曲折,还有各种看代码。分析代码,就不一一表述了,最后在如图的地方找到了比较符合预期的代码。


      IP属地:四川来自Android客户端4楼2021-01-07 12:58
      回复
        3、然后就是定位问题点了:首先阅读代码,聚焦到了关键方法makeChoice, 由于没有办法断点调试,所以只能采用原始技能,各个代码分支输出日志锚点。




        IP属地:四川来自Android客户端5楼2021-01-07 13:02
        回复
          4、然后是重启兄弟,开始执行并查看输出的日志,这里我用牧师组了一个全是发现卡牌的卡组,然后找旅店老板进行了切磋,旅店老板还是比较靠谱,没有倒计时


          IP属地:四川来自Android客户端6楼2021-01-07 13:06
          回复
            5、根据日志的输出,发现没有打印ee、ff(截图中的gg分支是后面补的,开始的时候没有这段),choiceMode没有赋值DISCOVER,从而导致没有进入后面的nn分支


            IP属地:四川来自Android客户端8楼2021-01-07 13:07
            回复
              6、核心问题找到了,大概率就是 sourceCard.GetEntity().HasReferencedTag(Game_TAG.DISCOVER) 这一段有问题了。
              然后就是各种折腾,希望能把这个判断通过,尝试了通过序列化将entity转为JSON,查看有哪些属性,结果不支持转换-_-||
              各种进入EntityBase查看成员方法,各种尝试,日志打印,最后确认了HasTag方法可以完成此判断。然后HB的发现机制就好了。


              IP属地:四川来自Android客户端9楼2021-01-07 13:09
              回复
                7、此外,为了增加不同策略下发现卡牌的附加逻辑,我在Behavior增加了getDiscoverPriority方法,也就是5楼图2中ai.botBase.getDiscoverPriority方法。还在完善中,后续完善了再更此贴。


                IP属地:四川来自Android客户端10楼2021-01-07 13:12
                收起回复
                  8、解释下为什么要做发现的补充逻辑:原有逻辑是分别计算发现的卡牌在加入手牌之后,下一步操作的场面值高低,从而决定选择哪一张。但是,经过观察发现,存在加入任何一张卡牌后的下一步场面值都一样的情况,这有可能是发现的卡牌并没有添加SIM逻辑,也有可能是对场面确实都没什么帮助?还没有具体去研究Playfield的计算逻辑代码。


                  IP属地:四川来自Android客户端21楼2021-01-07 21:23
                  回复
                    9、附加的发现补充逻辑的思路如下:
                    a、保留原有的计算逻辑,然后把最后计算出来的场面值与卡牌信息对应存储起来,
                    b、原有逻辑结束后,再判断最优场面值的卡牌选择有几张,如果只有1张那就直接选他了(避免错过斩杀选项),如果有多张,那就分别计算这多张的附加逻辑优先值,附加逻辑通过behavior定义;具体操作见图。这里有controller的简单示例,也可以直接copy到rush策略去。当然大家也可以仁者见仁智者见智,自己补充需要的附加逻辑。




                    IP属地:四川来自Android客户端22楼2021-01-07 21:25
                    收起回复