炉石兄弟吧 关注:42,972贴子:585,693

[策略] 我的奥秘法策略 经验分享

只看楼主收藏回复

前言:策略采用了最直接的惩罚值规范兄弟的打法
参考:惩罚值的设置和书写有参考吧内相关贴,特别是风满楼的贴子https://tieba.baidu.com/p/6772573181
sim卡参考了吧内其他人分享的奥秘法新卡的书写,包括远古谜团,隐秘咒术师 https://tieba.baidu.com/p/7164247164
赛格,我自己没有,所以没有实现,只写了抽4张卡,较准确的实现可以参考吧主的https://tieba.baidu.com/p/7129649756


IP属地:浙江1楼2021-01-02 18:13回复
    先在switch外面添加三个定义,并清空targets和pen

    我来解释一下,这三个定义的作用,后面会用到,方便复用
    zeroSerect 表示 有0费奥秘,当你手上打过暗金教侍从,或者肯瑞托时,手上奥秘为0费,此时为真,这个标志位的设置可以有效解决连续下两个肯瑞托或者暗金教侍从的问题
    hasSerect 表示 手上有奥秘的标志位,用于 取反逻辑,手上没奥秘时,抽奥秘优先级增加使用
    needSerect 表示 需要奥秘,例如你手上有男仆,隐秘咒术师,云雾王子,水晶侍女等需要挂奥秘的随从时,增加挂奥秘的优先级使用
    targets = 0 清空,后面计算随从数量,数各种目标数量时,可以复用
    pen = 0 惩罚值清空 后面可以复用,如果不是直接返回数字


    IP属地:浙江2楼2021-01-02 18:23
    收起回复
      2026-01-26 03:40:16
      广告
      不感兴趣
      开通SVIP免广告
      1.暗金教侍从,肯瑞托法师,刀,男仆,隐秘咒术师

      暗金教侍从和肯瑞托法师:
      解释一下暗金教侍从,zeroSecret和hasSecret置false,初始化为假.
      检索你的手牌,当有奥秘时,hasSecret为真,代表手上有奥秘
      当有奥秘,并且奥秘费用为0时,zeroSecret为真,代表手上有零费奥秘
      如果手上 !hasSecret ,代表有奥秘的结果取反,表示手上没有奥秘,并且费用小于7,返回惩罚 50,不推荐使用
      这样xd不会在没奥秘的时候下暗金教侍从,费用小于7的限制,是高费用时,解除这条限制用
      如果 有零费奥秘 返回惩罚500
      这个惩罚设置是解决连下两个暗金教侍从,从而浪费战吼,少挂一个奥秘的伏笔
      原理是,当你下一个暗金教侍从时,手上奥秘为0费,此时下第二个暗金教侍从,会因为这句if 有0费奥秘得到高额的惩罚,所以不会下.只有使用了一个奥秘,此时,手上奥秘变为原费用,才会下第二个暗金教侍从
      当然,这语句也造成了,xd必须把远古谜团的0费奥秘挂上,才会使用暗金教侍从,不然下不去
      其他情况-7,指的就是不是前面两种情况,也就是有奥秘的情况,这个数值尽量比0低,不然可能用火冲(不确定),但也别太低(影响其他牌使用),比如我这里设置,暗金教侍从-7 肯瑞托-8 这样两张牌同时满足,就会下肯瑞托,符合我们打牌的思路
      前面说了这么多,其实很简单,总结一下就是
      使用 暗金教侍从
      如果 没有奥秘 返回 50
      如果 有0费奥秘 返回 500
      其他(有奥秘) 返回 -7
      使用 肯瑞托
      如果 没有奥秘 20
      如果 有0费奥秘 500
      其他(有奥秘) 返回 -8
      数值越低,代表越容易出,数值20代表会出,但不算太赚,如果有更赚的方案(比如其他牌惩罚更低,优先用其他牌)不会使用,500代表绝对不会使用


      IP属地:浙江3楼2021-01-02 18:47
      收起回复
        这样写我就方便提意见了先说下zeroSecret。这个东西的判断太麻烦了,playfield中有一个字段貌似叫做nextSecretCost0,然后像是肯尼托和暗金教侍从的sim都会使用这个字段。


        IP属地:辽宁来自Android客户端4楼2021-01-02 19:01
        收起回复
          使用 艾露尼斯 时
          如果 手牌数量大于等于 5,返回 500,不要使用
          其他情况 返回 -50 基本无脑挂刀
          使用 男仆
          如果 我的奥秘列表的奥秘数量 < 1(指没挂奥秘),返回 50 (50算高惩罚了,所以不会空下男仆)
          如果 敌方血量<=20
          {
          如果我头上有奥秘, 目标是英雄,不是自己的目标 返回 -5 (推荐打脸)
          }
          其他 0 (xd自己发挥)
          使用 隐秘咒术师
          如果 头上没有奥秘 返回 50(不要使用)
          如果 我的随从数量<5 返回 -12 (很推荐使用)
          其他 0
          注意一下: if 语句的顺序,第一句if 头上没有奥秘 ,第二句if 默认就是头上有奥秘的情况了,不然执行的就是第一句if,不会到第二句if
          惩罚值的设计,是xd模拟使用这张牌时候的,额外减分(惩罚)情况,比如有多种出牌方式,以及出牌顺序.xd经过计算与比较,会选择得分最高的情况,,基本会把每种情况if都模拟,选择一种打的方式.但是惩罚值不是唯一决定,出牌的.每张随从牌的身材,你的手牌数量,对手手牌数量,对面血量等等都会影响得分,所以有时候,就算两个都是-5的惩罚,xd可能会选择身材好的那个,并且抽牌也是有价值得分的,这些基本都在behavior里,有兴趣可以研究一下,那个比较复杂,而且是对所有牌生效的,还有个有趣现象,比如两个白板奥秘(没写sim),惩罚都是-5,下肯瑞托时,xd会先使用左边的那张,所以我后面设置了奥秘的优先级(惩罚值)来区别,优先挂哪张奥秘


          IP属地:浙江5楼2021-01-02 19:04
          回复
            补充下为什么奥秘法策略为什么要用这么多惩罚规范。因为兄弟没法根据所挂奥秘即时得到收益,很难模拟之后的场面分数。所以使用惩罚来进行硬性规范。


            IP属地:辽宁来自Android客户端6楼2021-01-02 19:07
            收起回复
              mark学习下


              IP属地:北京来自Android客户端7楼2021-01-02 19:11
              回复
                我在兄弟学c++


                IP属地:广西来自Android客户端8楼2021-01-02 19:17
                回复
                  2026-01-26 03:34:16
                  广告
                  不感兴趣
                  开通SVIP免广告
                  云雾王子,赛格,低调的游客,对空法师
                  后面就简要解读一下了,不然太累了

                  云雾王子,没什么好说的,参考男仆,只是对面血量小于12(两个火球的伤害时)减少了打脸的惩罚,这样基本会用伤害打脸,而不是接怪
                  普通情况 目标时敌方英雄 -5
                  其他 0,xd自己发挥
                  这样写,云雾王子是既可能打脸,也可能打怪的,如果打怪更赚(消灭怪价值比你写的打脸的奖励-5更多),就会打怪
                  对面低血量时,打脸(奖励很多)
                  xd的价值观是,你场面的价值+手牌数量+血量 - 对面场面的价值+手牌数量+血量
                  所以减少对面场面,也会增加价值(得分)
                  赛格我没有,所以写的很随意
                  手牌大于7张,不要下
                  手牌小于3张 推荐下 补牌
                  其他情况 0 xd自己发挥(我写0的话就是不影响xd自己价值的判断),比如xd觉得赛格站场挺好,也就会下
                  低调的游客,也写的很随意,我的想法是,设置优先级和秘法学家,疯狂的科学家一样,所以 惩罚 -5
                  奥秘满的时候(>=5) ,惩罚2 (如果有其他0方案,负方案,就不会下,没有的话,还会下了站场)
                  小的正数,就是使用优先级比较低的意思,也是会使用的


                  IP属地:浙江9楼2021-01-02 19:21
                  回复
                    学习到了


                    IP属地:陕西来自Android客户端10楼2021-01-02 19:22
                    回复
                      学习


                      IP属地:中国台湾11楼2021-01-02 19:38
                      回复
                        支持支持


                        IP属地:重庆来自Android客户端12楼2021-01-02 19:40
                        回复
                          对空奥数法师的惩罚书写,参考了风满楼的贴子,但是风满楼的贴子里,对空存在明显伏笔,比如只计算2血以下的怪的击杀,也就是不考虑双对空的情况,以及对空 多个奥秘的情况,因为他写的太细,其他情况(高惩罚),导致对空只会解对面2血怪多的时候,而不会在8费时,使用对空双奥秘,把对面4血怪场面全解
                          当然我这个书写也存在明显的伏笔,我自己使用时,就出现了先奥秘1,在对空,然后奥秘2的情况,少打了一次全场打2
                          解释下我这个的书写思路:
                          主要考虑也是2血怪的数量,以及定义了一个状态 出击(英文不好)
                          首先计算对面的场面,每有一只2血以下的怪,KillCount数量 +1
                          检索自己的手牌,如果有奥秘牌,并且我的费用大于 奥秘牌加对空的费用,出击状态激活
                          考虑对面有场面的时候
                          如果是出击状态,惩罚值 0-KillCount*5-(p.enemyMinions.Count-KillCount)*3
                          就是对面2血怪以及总的怪的数量越多,在出击状态下就越赚,惩罚越低
                          反之,不是出击状态,惩罚是正的 0+KillCount*5+(p.enemyMinions.Count-KillCount)*3
                          意思就是,xd你要隐忍,不要交对空,对面怪的数量越多,数值越大,越不会下(除非等到能对空加奥秘清场)
                          其他情况(基本就是对面空场) 20 (你没东西下的时候,就会下了战场)
                          注意:此处的KillCount的权值5和敌方随从数量的权值3都是随意设的,有兴趣的可以自己调试改改
                          还有判断出击状态的hc.card.cost 或许可以改成 hc.manacost,不是很清楚
                          不喜欢这种设置惩罚方式的还能直接 返回 0,让xd自己发挥


                          IP属地:浙江13楼2021-01-02 19:42
                          回复
                            支持


                            IP属地:吉林来自Android客户端14楼2021-01-02 19:52
                            回复
                              2026-01-26 03:28:16
                              广告
                              不感兴趣
                              开通SVIP免广告
                              围观一下,这个帖子很强大呢


                              IP属地:广东来自iPhone客户端15楼2021-01-02 19:57
                              回复