PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

作者 : 开心源码 本文共3688个字,预计阅读时间需要10分钟 发布时间: 2022-05-12 共75人阅读

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

先说游戏的制作,再说如何破解咯!

游戏窗口探查

下载安装PyWin32库(对windows接口的Python封装),但不能直接点Download图标,不然下下来是一个Readme.txt,点“Browse All Files”寻觅需要的版本。

python学习群.png

用spy++找到窗口句柄(或者者找到窗口类名lpClassName和窗口名lpWindowName)

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

Note:1. FindWindow函数:

FindWindow这个函数检索解决顶级窗口的类名和窗口名称匹配指定的字符串。这个函数不搜索子窗口。

函数功能:该函数取得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。

函数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);

参数:

IpClassName :指向一个指定了类名的空结束字符串,或者一个标识类名字符串的成员的指针。假如该参数为一个成员,则它必需为前次调使用theGlobafAddAtom函数产生的全局成员。该成员为16位,必需位于IpClassName的低16位,高位必需为0。

IpWindowName:指向一个指定了窗口名(窗口标题)的空结束字符串。假如该参数为空,则为所有窗口全匹配。

返回值:假如函数成功,返回值为具备指定类名和窗口名的窗口句柄;假如函数失败,返回值为NULL。

  1. 句柄

直接用句柄可能的问题:

1)firefox中每个页面tab都是同一个句柄,程序中找到的句柄对应当前tab,假如当前tab不是找茬游戏就不对了

2)用窗口类名lpClassName和窗口名lpWindowName时假如当前tab不是找茬游戏会找不到相应句柄

上面问题一个有效的处理方法是将找茬游戏单独在新窗口中打开

也可以用spy++反向从句柄找到句柄对应窗口,检查能否正确。

游戏图片提取

提取图片采使用了截屏的方式,找到窗口后将窗口提到最前,再作窗口截屏。

下载安装PIL图形解决库

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

Note:1.win32gui.GetWindowRect函数

l,t,r,b =win32gui.GetWindowRect(self.hwnd) #返回图形左、上、右、下边界(或者者说是左上、右下的坐标点)

2.ImageGrab.grab函数:ImageGrab是PIL的一个板块,使用于图像的抓取。不带参数的ImageGrab.grab()进行全屏截屏,返回一个Image对象,也可用一个元组作为参数指定要截取的范围(左上与右下两点的坐标),这两种截屏都是不带鼠标指针的。

上面使用到的坐标都为为了演示代码简单填的,实际上可用了变量参数,而且要区分分辨率什么的。

还有一个ImageGrab.grabclipboard()可从系统剪贴板采集图像。

3. 得到Image图像后可使用show()方法,用系统默认的图像查看工具打开,方便调试。

也可以使用save(filename)保存成文件,对应的可以Image.open(filename)打开取得。

  1. crop(box)方法:参数为左上和右下标点坐标(或者者说是左、上、右、下边界)

grab得到了一个包含左右图片的Image对象后,使用crop(box)方法可裁剪得到其中指定的区域,分别拿到左右两个游戏图片。

比照取得两图内容不同的区域

把两图裁剪成N个小图片分别比照,左右统一区域对应的小图片不相等则为“茬”区,问题是怎样判断两个图片内容不一致?

Image.histogram()函数:使用于得到图像的颜色直方图。直方图可以表示一张图片中各种亮度(或者颜色)的数量,两张自然图片的直方图基本是不一样的,除非两图对称、颜色一致但排列不一,但就算如此,将两图继续分割下去,其子图的直方图也会不一样。直方图就是一种图形到数值的转换,比照两图的颜色数值即可知能否存在差异。一张使用RBG颜色格式的图像,histogram()函数将返回一个长度为768的数组,第0-255表示红色的0-255,第256-511表色绿色的0-255,第512-767表色蓝色的0-255,

数值表示该颜色像素的个数

因而,histogram()列表所有成员之和等于改图像的像素值 x 3。

使用来取得两图比较的数值差的函数

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

Note:将函数返回的红绿蓝差值相加,假如超过了预约定的阀值2000,则表示该区域不同。这个计算方式有点“土”,但对这次要处理的问题很有效,就没再继续改进。

把两图裁剪成N个小图片分别比照

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

Note:大图是 780520,分隔成10×10的小块,定义一个7852的二位数组存储结果,分别比较后将差值大于阀值的数组区域标记为1.

在游戏上标记两边不同的区域

可以用PyWin32的函数,取得游戏窗口句柄后直接在上面绘制,但要熟习Windows编程,处理游戏自身重绘后将我的标记擦除的问题。

也可以用Qt。下面使用Qt创立了一个和游戏大小一样透明的QWidget窗口,叠加在游戏窗口上,使用遮罩来绘制标记。标记数据已记录在result数组中,在指定的位置绘制一个方格则表示该区域左右不同,要注意两个方格间的边界不要绘制,避免格子太多干扰了游戏。除标记外,还绘制了两个按钮来触发比照与擦除。

Python实现大家来找茬小游戏辅助

出了一个小程序的找茬游戏,如下示意:

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

很多时候“眼疾手快”比不过别人,只好寻觅一种便捷的玩法:程序自动实现!

这里用的是Python3

  • 第一步:获取手机截图

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

上面的命令取得的截图在windows系统上会出错,这是因为windows默认用的换行符为 而Andriod系统用的是Linux内核,其换行表示为 ,在移动端把二进制数据流传输给电脑时,windows会自动把 替换为 因此为了正确显示,还需要一个转换,我们编写Python的转换代码如下:

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

  • 第二步:图片裁剪
  • 取得的图片有多余的部分,需要进行裁剪,用Python的opencv库,代码如下:

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

第三步:图片差异比照

图片差异比照这就很好了解了,把两张图片叠到一起,相减,剩下的就是不同的地方了,当然,这里有几个细节需要注意:原图的截取,上面从手机获取的截图有很多非目标区域,因此我们需要定义截图区域,这就是我们程序中需要给出的box参数:

box=(0.2,0.93,0.05,0.95)

这里,参数依次代表:

开始截取的列=0.2图片宽,中止截取的列=0.93图片宽

开始截取的行=0.05图片高,开始截取的行=0.95图片高

而后,仔细观察你会发现中间还有一块多余的区域,把上下两张图分开只要要给出中间区域要截除的像素值,这也就是我们程序运行的第二个参数:

gap=38

这里代表把第一次截图得到的图片二分后分别截去38像素的高度。

这时,还有一个问题要注意的是,我们截图参数是根据肉眼分辨设置的,你截图的结果可能并不是严格的目标图片的开始行列,这时,得到的两张图片会存在很小的错位,为了微调这个错位,我们给出程序的第三个参数:

dis=2

这代表两张图片在进行相减作差的时候会微调两行。

好了,得到差异图片后我们来看看效果

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

哈,五个不同的地方,终于“原形毕露”!

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

这时,你即可以看着这张差异图去“找茬”了。

当然,上面这张丑陋的差异图是不能忍受的,没事,我们接着改进。

找到了差异,如何“优雅”的展现差异呢?我的第一反应就是:在原图上画个圈出来,这样既直观又不失“优雅”。好吧,说干就干!

第一步,用Opencv库检索差异图的轮廓。这里,值得一提的是在图片的右上角有个小程序的返回图标,这会干扰我们提取轮廓,因此需要先把这个图标去除。查找到轮廓之前需要把图片转换为二值图,而后运使用形态学开运算去除噪声,这里涉及程序的第四个参数:滤波核尺寸:

filter_sz=25

最后查找外轮廓并根据轮廓周长保存前n个轮廓,这就是程序里的第五个参数:

num=5

而后检测轮廓的最小外接圆,找到圆心和半径,绘制到原图上,效果如下:

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

这么样,效果是不是更“优雅”少量了呢!

PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

最后贴上完整的代码:

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » PyQT制作游戏,而后再破解,制作游戏辅助,Python魅力无穷啊!

发表回复