Python写一个痒痒鼠脚本

之前电脑系统崩了,重装之后就直接安装Anaconda来使用Python语言(装的时候记得把添加路径勾上,不想装Anaconda可参考之前的Python环境搭建),咱们还是先用Sublime来写脚本吧。在Sublime上使用Anaconda里的Python需要先配置插件,这个有百度经验,大概步骤如下:

ctrl+shift+p-->打开Package Control

输入ip--)选择Package Control:install package

新的框里输入:Anaconda 安装(如图即为安装成功)

首选项-->插件设置-->Anaconda-->settings default里搜索python_interpreter后面填上Anaconda文件夹安装位置。

然后再在 首选项-->插件设置-->Anaconda-->settings user里键入以下数据。保存,重启ST3后即可发现编写python代码时具有提示功能(编译的时候可能还需要手动选一下python)。

接下来可以开始写游戏脚本了,用到的库有opencv、numpy、pywin32、Pillow、tkinter等,都可以用pip install 的方式安装,制作痒痒鼠的脚本,建议在模拟器上测试避免被封号,我用的是逍遥安卓如下:

没错我们这次计划做一个清结界的脚本,重要性你懂得,进入到个人结界页面后图像识别匹配出有几个结界被攻破,如已攻破三个,则点击刷新,如没有就依次突破(若未能攻破三个就直接刷新)。

Pywin32为python提供访问Windows API的扩展,可以用来定位窗口,模拟鼠标键盘操作。定位模拟器窗口之前需要知道窗口名称和类名,首先运行下面这几行代码查看当前的活动窗口和类名:

找到 逍遥模拟器 Qt5QWindowIcon 就是模拟器的窗口名称和类名,把他们填入下面代码中就可以定位窗口范围坐标(318 142 1638 896),和鼠标所在位置(1170 577),ps:学过h5的都知道坐标原点是从左上角开始的。

下面这段代码就是获取模拟器窗口并截图:

接下来先取样本(笔者截图了每个格子玩家姓名上面的部分作为待突破样本0.png)和已突破样本1.png,然后用opencv做图像匹配识别截图中有多少对应结界,如图用红色框标记了出来:

用opencv模板识别并标记的代码:

(0.92和0.95是测试时的相关系数阈值,nu1和nu2是计算出的待突破和已突破结界个数)

在测试的时候还需要调整样本和相关系数阈值,看起来识别准确度还不错后,就可以添加模拟鼠标操作了:

笔者的屏幕分辨率(即坐标范围是1920*1080,模拟器分辨率是1280*720 192dpi),以上操作都是根据对应的坐标计算得来的,这是用来计算鼠标所在点位置和颜色的小工具:

细节难点有:1.对opencv模板匹配出的多余坐标点近似过滤;2.通过标记方法测试确定合适的样本和阈值;3.根据像素点对比判断是否结束战斗以及查找各模块功能和修复各种bug。优化后的完整代码如下,实现的功能是在个人结界突破界面锁定好阵容,启动脚本可依次突破,直至清空结界券。

为了让它看起来更像一个“脚本”,接下来我们还可以做成图形化的界面:

先写一个如图的模板出来,以上用到了tkinter做脚本界面和多线程开关控制的逻辑:

添加上要运行的脚本函数和优化好各种逻辑bug后的完整代码如下:

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181007G01AQ100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券