1.前言

初学python,看到微信跳一跳外挂觉得挺有意思,想做个比这个稍简单的来学习一下相关语法与模块

(此外挂只用于学习!并没有过多关于外挂的知识!)所做的游戏就是这个!开心斗游戏中的消砖块小游戏

通过点击屏幕来使该位置增加方块,从而达到消掉一层四个砖块,是一个简单的休闲小游戏。

2.所用工具/前期准备

(1).python3.X

请读者自行配置环境。

(2).adb

本攻略只适合安卓手机,请先下载adb驱动

下载地址:http://adbshell.com/downloads

(3).python中的openCV模块进行简单的图像识别

下载方法:命令行中输入pip install opencv-python进行下载

(4).python中的numpy,PIL和pylab模块进行简单运算和图像处理

pip install matplotlibpip install numpypip install pillow

3.adb安装注意事项

1.在cmd中输入adb,显示如下字样证明安装成功。

2.将手机调整到开发者模式(百度各种型号的打开方法),并开启USB调试功能

3.将手机与PC连接,手机中询问是否调试,一直点同意。PC中打开cmd 输入

adb devices

若看到如下显示,则证明已经连接上了!可以开启我们的编程之旅了!

4.adb的简易操作

//在屏幕上做划屏操作,前四个数为坐标点,后面是滑动的时间(单位毫秒)
adb shell input swipe 50 250 250 250 500
//在屏幕上点击坐标点x=50  y=250的位置。
adb shell input tap 50 250
//截图
adb shell /system/bin/screencap -p /sdcard/screenshot.png
//将截好的图保存到电脑之中
adb pull /sdcard/screenshot.png D:\screenshot
以上就是我们可能会用到的基本指令了,想了解更多的adb指令的话,我参考的这篇文章:https://blog.csdn.net/jlminghui/article/details/39268419

5.图像处理

(1).我们先要抓取屏幕并传输到电脑中,上面已经提过了,所以直接上函数

def screenshot():os.system("adb shell screencap -p /sdcard/game.png")#cmd运行os.system("adb pull /sdcard/game.png D:/PYthon/first_j/game.png")#存入电脑里面

截图后,我们得到如下图像

(2).我们发现上方的信息和下方的一些按键并不是我们想要的,我们可以轻松的把它们裁剪掉

 crop_img = img[280:1780, 20:1080]  # X=1060,Y=1500

效果图:

(3).当我们拿到这一张彩色的图片的时候,我们自然的知道应该向哪里发射方块,可是怎么才能让机器知道呢?这里我们应该把图像转化为灰度或二值图像,进行一系列的去噪等操作,使得计算机可以认出我们的图像并做判断

Q:什么是灰度图像?什么是二值图像?

http://www.jb51.net/article/78762.htm

这篇文章讲解的非常清晰,读者可以仔细阅读,了解一下数字图像的构成和灰度图像的原理

我们这里讲图片转化为二值图像,效果图如下

   GrayImage = cv2.cvtColor(crop_img, cv2.COLOR_BGR2GRAY)ret, thresh = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY_INV)

在上图中,我们看到方块有些不整齐,有一部分白色,我们要把这些白色填充掉,使得后面的程序更容易识别方块,此时需要一些形态学方面的操作。

    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 25))closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

上一下效果图

PS:左上角的东西我们无需担心~它只是在个别的时候会蹦出来,告诉我们我们的砖块行数+2了,然后会马上消失~并不 影响我们的识别~

到这里,我们对图像的处理已经很完善了。机器已经能很轻松的识别哪里是砖块(黑色——值为0),哪里是空白(白色——值为255),如果小伙伴们有时候处理一些复杂的图像,可以再用一下腐蚀与膨胀算法,效果也是非常好的。贴一下代码

    # 分别执行4次形态学腐蚀与膨胀算法。closed = cv2.erode(closed, None, iterations=4)closed = cv2.dilate(closed, None, iterations=4)

6.模拟操作 

相信大家的想法和我最初的想法非常像,这个是不是已经接近尾声了,我只需要检测   X= [100,375,650,925]

这四个点哪里是白色就模拟按键就好了?我就是用了这个简单的算法,发现模拟的结果非常不理想:(划重点)因为adb模拟按键和截图的速度并不快,所以会导致没有人的操作快!

那怎么办?只能优化算法咯

我们先检测哪里有方块,什么时候出方块,并把他的位置存到数组中

    #先检测什么时候有块for count in np.arange(1450,0,-50):if int(closed[count,100])+int(closed[count,375])+int(closed[count,650])+int(closed[count,925])!=255*4:breakfor i in np.arange(count,0,-160):Y.append(i)

记录后,一次性进行多次按键操作,实现一张图模拟多个按键,这样效率就高多啦

    for i in Y:if closed[i,100]!=0:val.append(120)elif closed[i,375]!=0:val.append(395)elif closed[i,650]!=0:val.append(670)elif closed[i,925]!=0:val.append(945)return val

7.结束

 

        作为一名python初学者,第一次写东西,文章不免有错误的地方,希望读者能指出,多多交流,文章还会不断优化,具体的灰度图像和图像处理会再详细讲解。希望能给初学者带来帮助!谢谢

基于python的简易安卓小外挂制作相关推荐

  1. 基于Python pygame简易版斗兽棋小游戏源代码

    基于Python pygame简易版斗兽棋小游戏源代码 游戏规则如下: 胜利条件: 1.吃掉对方全部棋子 2.走入对方兽穴(不可进入自己洞穴) 吃法: 1.象>狮>虎>豹>狼& ...

  2. python点名代码_基于python tkinter的点名小程序功能的实例代码

    基于python tkinter的点名小程序功能的实例代码,花名册,次数,窗口,未找到,初始化 基于python tkinter的点名小程序功能的实例代码 易采站长站,站长之家为您整理了基于pytho ...

  3. python登录界面源码_基于Python的自媒体小助手---登录页面的实现代码

    核心技术:Python3.7 GUI技术:Tkinter (Python已经内置) 好多文章写Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 我看了N遍也没够好多东西都没有就基 ...

  4. Python爬虫+简易词云的制作

    Python爬虫+简易词云的制作 写在前面 再识Python 简介: 应用场景: Python命令行执行: 基本语法: 连接数据库: Python爬虫 主要步骤: 第一种爬虫:urllib基本库+Be ...

  5. “天龙八部基于颜色的简易动作式外挂”的增强

    最近在网上看到一篇"天龙八部基于颜色的简易动作式外挂",不仅讲述了这种简单外挂的原理,还提供源码,于是把源码下下来研究了一下,并跟实际游戏联调了一把,发现不太实用,忍不住下手修改了 ...

  6. 基于python + Appium的安卓自动化

    基于python + Appium的安卓自动化 最近要双11了,刷喵糖比较火,看到github上一个刷喵糖的项目testerzhang/taobaomiao.git,也成功跑起来了,顺便研究下了实现方 ...

  7. 基于Python实现的微信小程序校园导航系统 | Python第一课环境篇 | Hellow World 程序 | 不同环境下搭建Python编程环境

    一:Hellow World 程序 1.安装Python3 2.运行Python代码片段 Python自带了一个在终端窗口中运行的解释器,让你无需保存并运行整个程序就能尝试运行Python代码片段. ...

  8. 天龙八部基于颜色的简易动作式外挂

        首先声明,本文重在记录写这么一个玩意的过程.因为恢复了系统,所查阅的技术上的资料地址已经丢失,无法贴出来与大家分享,但最后我会附上源码,代码我也已经做了比较详细的注释.为了操作API方便,代码 ...

  9. python实现shell_基于 Python 的简易 Shell 实现

    通过敲一边代码还是了解到了一点新东西的,编程是一项手艺活,到处都是细节. * 了解了getpass, socket, signal, platform这几个包的一点用法: 比如getpass.getu ...

  10. 基于Python的简易宿舍管理系统(课程作业附课程小论文)

    本文所有基础知识可通过此链接进行训练点我开练 本次为三个月学校学习的课程作业,仅用到Python入门知识,简旦易懂. 涉及到的主要有:列表,字典,函数定义调用,循环结构等入门知识 可满足大部分学校此课 ...

最新文章

  1. 【廖雪峰python入门笔记】set
  2. 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?
  3. jsoncpp 不能处理long类型数据
  4. 常用linux下网络相关命令
  5. oracle中判断一个串中是否包含另一个串
  6. 查询使用NoLock
  7. virtualbox display size
  8. pycharm写python字典_pycharm_字典
  9. React antD-Pro 添加函数防抖
  10. 在Office 365中使用自助密码重置功能减轻管理员负担(一)功能简介
  11. javascript创建动态表格
  12. C#串口操作实际应用开发详解
  13. 中科大开源数据集CCPD 2019详细介绍
  14. DisplayTag使用指南(二) DisplayTag标签库详解
  15. 计算机无法安装dx11,dx11组件是什么?提示缺少dx11组件的具体安装步骤
  16. CHM格式的帮助文档制作与代码调用 Visual Studio C#
  17. JZOJ5401. 【NOIP2017提高A组模拟10.8】Star Way To Heaven
  18. Python爬虫 带你一键爬取LOL英雄皮肤壁纸
  19. KDEConnect非常便利,kde plasma+android绝配
  20. xcode升级到14后出现error build

热门文章

  1. apache beam入门之编码Coder相关
  2. lintcode刷题——罗马数字转整数
  3. windows系统重装步骤
  4. 一文读懂NFT(非同质化通证)
  5. hive -e/Hive -f 出现WARN问题
  6. 华东师范大学计算机与电子科技大学比较,报录比
  7. matlab数组输出字符,Matlab字符型数组的输入输出
  8. 龙卷风路径_和平精英龙卷风在哪里 龙卷风位置介绍
  9. 如何使用UltraCompare对比两个文件夹内容差异
  10. SAP-客户主数据维护