从零开始的明日方舟python脚本创作(一)概述

起因

一直以来都有着想着学习下python的念头,但是只是看比较干的知识点又觉得很无趣,于是结合着明日方舟的活动本需要反复刷材料的现状,决定学习下如何用python来写一套可用于明日方舟的脚本。

现状

脚本其实本已成功运行了一周了,但是周五却突然出现模拟器收到了消息却没有点击效果的问题。这让人匪夷所思,查找了很多资料,都没有记录,最后发现应该是模拟器屏蔽了对这个消息的处理。但是又有成功运行了一周的经历,至今仍然不确定具体发生了什么。在更换模拟器之前采用了折中的方案,对屏幕进行适配缩放到最小,并置于桌面窗口左上角顶层,模拟鼠标点击的动作,缺点是不能后台处理,挂机期间也就能看看视频之类。更换模拟器之后,此模拟器可以处理接受到的鼠标点击消息,也就能继续使用原先的那一套后台处理方案了。这就解放了操作限制,可以做其他事情,不受影响。(原模拟器“MuMu模拟器”,现模拟器“夜神模拟器”。)

本系列会分享到的内容

1、python脚本开发;2、窗口句柄获取;3、python多文件打包;4、python包压缩。

脚本思路

一开始其实思路还是挺明确的,后面做的基本就是思路的实现以及扩展优化。首先是截屏,截屏之后进行图像分析,确定当前是游戏的哪一个阶段,然后根据获得的游戏阶段确定当前的操作。在图像分析这一块,最开始尝试使用了tesseractocr进行文字识别来判断进行到了哪一步,发现处理起来比较麻烦,对于我这种只有几个阶段判定的简单脚本来说,还不如直接对两张图片进行哈希值对比简单。

脚本的模块划分

  1. UI模块
    因为有打算做一些功能上的选择,比如理智使用完毕是否需要恢复的问题,以及可以随时暂停和启动脚本,所以做一个UI还是挺有必要的。这里查找了相关资料后采用了tkinter来绘制UI界面。UI模块作为启动模块,我添加了一个线程专门用来处理功能模块的信息。主线程就负责刷新UI界面的点击信息。
  2. 截屏模块
    主要是对确定的区域进行截屏,以方便下一步图像对比。比如我的脚本确定了几个固定的区域作为截屏区域,这几个区域都是游戏每一阶段独有的部分,辨识度较高。截屏模块主要引入的库是 pywin32,PIL。
  3. 图像对比模块
    主要是对截屏的图片与现有图片进行对比,确定是否处于需要操作的游戏阶段。主要引入的库为PIL,imagehash。
  4. 鼠标点击模块
    根据当前所在的游戏阶段,点击确定的游戏区域,这里实现了两种方式,一种是模拟点击的动作,不可后台;另一种是发送鼠标点击的消息,可以后台。主要引入的库为pywin32。
  5. 核心模块
    这个模块主要是用来衔接UI模块和功能模块,并可以记录一些操作信息,比如当前进行了多少轮游戏,当前游戏阶段已经点击了几次以防止卡死在某个游戏阶段一直点击。
  6. b64转换模块
    使用到这个模块的主要原因是我想将脚本打包,但是作为识别对比的图片却很难进行打包处理。在查找到相关资料后,发现可以将图片进行b64转换存储到python文件里面,再进行打包就没问题了。打包这里还涉及到了包体压缩的问题,我的原始包大小为170多M,经过压缩之后现在是40多M,效果还是很明显的。

附加

其实这样划分只是个人的不成熟想法,所有东西除了b64模块的都可以写在一起,只是做单功能调试的时候不便利。还有些东西其实没有写进去,比如获取窗口句柄的方式,spy++的使用,虚拟环境打包,upx压缩。当然,这些都是个人使用经验,很多东西我也处于摸索阶段,如有不对,请多海涵!以上,祝好!

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值