炉石传说脚本自学之路

  炉石传说新出了模式佣兵模式,且这个模式中所有的英雄都能通过通关相应副本来获得。但是过程又枯燥 又累。于是想自己整活做一个脚本。

  于是整理思路有三种实现模式:

1.读取炉石程序的内部参数来精确获取战场的数据,从而能够更方便的进行逻辑判断,一方面我不会,另一方面却是比较难。

2.通过简易的按键精灵来实现。这是成本最低的一种方法了,但是缺点也非常明显。很不灵活且只能适应简单的关卡。而整个佣兵模式最难刷的碎片都是后期的关卡。因此也不合适。

3.同时openCV获取图像数据然后通过图像来判断战局情况。好处就是这种是最不容易检测到的,坏处就是我完全不了解openCV。但是综合考虑下来还是选这种模式。

   既然敲定了模式,那就要清楚整个脚本的模块。

1.图像识别模块

这个部分是最重要的,只有能成功识别图片才能进行之后的操作。毕竟不能当瞎子。

2.战斗逻辑

毕竟胜利才能获取成果,要是不能打过副本,脚本也没什么意义了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
基于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个场景需要识别费用: 场景一:发牌换牌阶段 此阶段,背景为黑色,便于分离。流程:灰度化,阈值成二值图像,轮廓提取,测试得到卡牌的轮廓范围,近似矩形,得到卡牌数(得到先手还是后手),根据轮廓得到每个卡牌,对每个卡牌的左上角进行灰度处理,阈值化,轮廓提取,得到数字图像。使用数字识别的方法进行判断。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值