炉石兄弟吧 关注:38,818贴子:559,151

调试炉石兄弟盘面策略的基本教程

只看楼主收藏回复

开门见山,这是一个技术帖,修改对xd的打法没有提升,是给想学习怎么提升xd打法的人学习交流。起初是发现xd在一次操作里面出了错,偶数萨在最后还剩1费的时候没有转图腾。结果不出意外输了。

接下来,我们开始尝试调试修改策略,在以下目录:炉石兄弟汉化版2020.1.17\Routines\DefaultRoutine\Silverfish\UltimateLogs\,存储着xd打的每盘操作的记录,根据盒子记录的时间是2点49分,可以找到以下文件。


IP属地:北京1楼2020-04-22 12:25回复
    该文件的样式大概如下:


    这个文件里记录了每回合的场面,以###分界,每个###之间就是一次场面计算。可以基本看作是当前场面的记录,比如这个例子turn就是第18回合,9费剩余有9费,我方的英雄是萨满,后面还有包括场面状况,坟场,卡组等等,最后一行是xd决定要进行的操作,比如上面这个例子是使用了怪盗图腾。 而当我们看到xd有时候捉急的操作时,就想修正他,一般来说就是添加惩罚,这个一般都是修改PenalityManager的惩罚。提一句题外话,新卡添加的基本思路就是你觉得当前的这张卡比较像老版本的哪张卡你就按照他的惩罚机制修改。那回到正题,大家之前添加的惩罚很多时候都是凭感觉设定的,这个方法可以让大家更灵活的尝试惩罚的合理设定。另外一个就是一旦存在添加新的Sim卡和新的机制不用不停的开炉石进行测试。


    IP属地:北京2楼2020-04-22 12:26
    收起回复
      该方法来自于原开发者留下的代码里对场面的测试,因为xd更新迭代很多版,需要对炉石兄弟汉化版2020.1.17\Routines\DefaultRoutine\Silverfish\ai\BoardTester.cs进行修改,将和“mana changed”下面加粗的这个部分进行修改,主要是对盘面开始分析的这部分:
      if (s.StartsWith("mana changed")) { continue; }
      if (s.StartsWith("开始计算, 已花费时间: ")) { if (!fistRun) break; fistRun = false;
      Ai.Instance.currentCalculatedBoard = s.Split(' ')[2].Split(' ')[0]; this.botBehavior = s.Split(' ')[4].Split(' ')[0];
      this.maxwide = Convert.ToInt32(s.Split(' ')[5].Split(' ')[0]);


      IP属地:北京3楼2020-04-22 12:28
      回复
        代码格式有些混乱,再截个图:


        IP属地:北京4楼2020-04-22 12:30
        回复
          接下来是具体的步骤:
          步骤1:修改BoardTester.cs完成,就是上面这部分。


          IP属地:北京7楼2020-04-22 12:32
          回复
            单元测试chuck已经写好了


            IP属地:江苏9楼2020-04-22 12:34
            收起回复
              步骤2:将要调试的盘面信息,存储为test.txt放在炉石兄弟汉化版2020.1.17\Routines\DefaultRoutine\Silverfish\data\目录下


              IP属地:北京10楼2020-04-22 12:35
              收起回复
                火钳刘明


                IP属地:广东来自Android客户端11楼2020-04-22 12:36
                回复
                  我来插个眼,一天学一个小知识


                  来自iPhone客户端12楼2020-04-22 12:37
                  回复
                    好东西,顶一下


                    来自iPhone客户端13楼2020-04-22 12:37
                    回复
                      步骤3:照常启动xd
                      步骤4:将xd生成的,炉石兄弟汉化版2020.1.17\CompiledAssemblies\一连串数字\DefaultRoutine.dll复制到炉石兄弟汉化版2020.1.17\目录下。注意:这一步每次修改过策略以后都要重新做,我还没找到更好办法。
                      步骤5:在xd的设置->Main勾选显示设备,Dev选项就开启了,


                      IP属地:北京14楼2020-04-22 12:39
                      回复
                        步骤6:在Dev窗口右边Assemblied区域中换行输入DefaultRoutine.dll,这里代表着访问刚刚拷贝出来的文件。左侧Code区域输入以下代码,点击Run Code开启测试,:


                        IP属地:北京15楼2020-04-22 12:41
                        收起回复
                          步骤7:新计算的盘面将会生成在\炉石兄弟汉化版2020.1.17\Routines\DefaultRoutine\Silverfish\UltimateLogs\Logg.txt文件里,如果为了方便查看,可以在执行代码前删除该文件。

                          因为我没有更改策略,盘面计算和之前结果是一致的。但如果xdm有兴趣修改策略,这个方法可以验证修改后的策略是否有效。写到这里,再提一次之前有大佬提到的技巧,用visual studio创建类库的方法把DefaultRoutine包含进去,调试起来会更容易,除了各种红字编译错误可以及时发现外,甚至可以动态调试策略部分。欢迎xdm交流。


                          IP属地:北京16楼2020-04-22 12:43
                          回复
                            技术贴,先收藏了


                            IP属地:广西来自Android客户端18楼2020-04-22 13:26
                            回复
                              就是不摇,搞不懂怎么解决了


                              IP属地:广东来自Android客户端19楼2020-04-22 13:33
                              收起回复