关于炉石传说“召唤”的判定机制

      当随从被召唤时会发生一系列的事件。“召唤”分为从手牌打出和直接召唤。二者的区别在于:从手牌打出会触发随从的战吼以及打出时和打出后的扳机,并且对于“召唤”扳机,判定机制也有所不同。下面这张图能够解释一部分:


      可以看出,当你打出一个随从时,结算顺序是随从入场->打出时扳机->召唤时扳机->战吼连击抉择->打出后扳机->召唤后扳机。而对于特殊的召唤事件,则有不同的结算:


      在一个事件引发的召唤事件中,“召唤时”扳机不会触发,而是先触发“召唤后”扳机,等到引发召唤事件的最外侧事件(母事件)结算完毕后,进行条件判断,按入场顺序统一触发“ 召唤时”扳机,称为“召唤回溯”。

      举例:你装备满耐久的“正义之剑”(在你召唤一个随从后,使其获得+1/+1并失去1点耐久度),控制“夜色镇执法官”(每当你召唤一个具有1点生命值的随从,使其获得圣盾)使用“作战动员”(召唤3个1/1的报告兵,装备一把1/4圣光的正义)时,三个报告兵依次入场,每入场一个,正义之剑失去1点耐久并buff一个,报告兵入场完毕后正义之剑为1/2,而报告兵被buff为2/2,然后按照卡牌描述顺序,接下来装备一把1/4锤子抵掉正义之剑,母事件就此结算完毕。此时进行召唤回溯,由于报告兵已经buff为2/2,所以不会获得圣盾。(如果该报告兵是手牌中打出的,毫无疑问会先获得圣盾,再+1/+1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于C++的炉石传说机器人.zip ######准备写个炉石传说自动战斗AI,准备采用图像识别技术进行模拟 一些问题: 1.图像的采集 2.图像的查找比较 3.控制鼠标操作 4.识别卡牌费用 test 1 图像的采集 思路: 获取炉石传说程序的句柄 2.通过句柄获取窗口 3.获取窗口像素 查找资料并实验得到有两种方法: 方法一:获取窗口后,使用bitblt函数进行窗口函数拷贝,缺点是窗口不能有遮挡 方法二:使用printWindows 函数获取窗口图像,缺点是该函数是xp下专用,win10上对于有些窗口无法获取图像,得到黑屏 经测试,炉石传说可以使用第二张方法,代码见test/getWindowsImage.cpp test 2 图像的查找比较 思路: 1.获取当前画面 2.读取待比较bmp 3.比较 已知方法: 方法一:逐像素,判断rgb差值,缺点慢,优点准确 代码见 test/findSubImage.cpp 方法二:采用相似图像比较分方法,比如pHash等,未测试 test 3 控制鼠标操作 思路: 1.获取目标窗口句柄 2.给目标窗口发送消息 3.获取鼠标在窗口的位置 已知方法: 方法一:使用sendMessage 或者postMessage函数向炉石程序发送消息 方法二:使用mouse_event模拟鼠标行动 经测试,炉石传说对方法一的消息不响应,即使设置窗口为SetForegroundWindow 故采用第二种方式,第二种方式要求窗口在最前面,且固定位置,因此将窗口移到左上角,固定分辨率。代码见test/controlMouse.cpp test 4 识别卡牌费用 有2种方法,代码见test/HStest.cpp: 方法一:使用图像查找比较的方法。经测试,有如下问题: 1.图片大小不好统一 2.图片背景因为有粒子的变化,变动较大 3.费用在某些条件下更改并改变颜色 方法二:使用数字识别的方法。 有2个场景需要识别费用: 场景一:发牌换牌阶段 此阶段,背景为黑色,便于分离。流程:灰度化,阈值成二值图像,轮廓提取,测试得到卡牌的轮廓范围,近似矩形,得到卡牌数(得到先手还是后手),根据轮廓得到每个卡牌,对每个卡牌的左上角进行灰度处理,阈值化,轮廓提取,得到数字图像。使用数字识别的方法进行判断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值