浏览器
双核浏览器
游戏浏览器
高速浏览器
视频浏览器
IE浏览器
浏览器周边
手机浏览器
安卓游戏
音乐舞蹈
养成游戏
儿童游戏
仙侠手游
角色扮演
策略塔防
休闲益智
动作冒险
飞行射击
模拟经营
体育运动
赛车竞速
网络游戏
安卓软件
资讯阅读
生活服务
影音播放
购物理财
效率办公
趣味娱乐
交通出行
学习教育
摄影图像
在线音乐
系统工具
网络购物
聊天工具
安全杀毒
图片编辑
新闻资讯
软件资讯
游戏资讯
手机教程
手游攻略
游戏攻略
软件教程
IE专区
安卓专题
文章合集
电脑软件专题
安全软件
杀毒软件
系统安全
加密解密
防火墙
远程控制
木马查杀
影音软件
网络电视
视频播放
音乐播放
视频制作
音频编辑
录音录像
教育学习
外语学习
教育管理
早教启蒙
在线课堂
成人教育
资格考试
聊天社交
即时通讯
视频聊天
在线交友
变声器
表情包
办公软件
线上会议
文档管理
行业管理
考勤打卡
应用工具
输入法
下载工具
时钟日历
记事本
文件管理
计算器
编程开发
编程工具
JAVA相关
加壳脱壳
编程控件
数据库
网页源码
软件开发
补丁制作
系统美化
桌面制作
壁纸大全
系统主题
屏幕保护
桌面辅助
系统软件
系统优化
备份还原
系统检测
U盘工具
磁盘工具
驱动补丁
图文处理
图片素材
图像处理
图片制作
图片压缩
电子相册
抓图工具
其他软件
电子书籍
模拟器
辅助工具
交通出行
手机管理
其他工具
素材下载
字体素材
PPT素材
专区
文章合集
软件
游戏
浏览器
安卓专题
软件
游戏
浏览器
IEfans/ 新闻资讯/ 软件教程 /淘宝玩个球有辅助吗 淘宝玩个球介绍

淘宝玩个球有辅助吗 淘宝玩个球介绍

2023-02-04 14:42:01 编辑:匿名

淘宝玩个球这个游戏虽然简单,但是想要玩高分还是很难的,毕竟有好几亿的人和你一起玩游戏,那么问题来了,淘宝玩个球有辅助么?目前来说排名前进的分数还是很高的,想要玩的这个上万分还是很难的!

image.png

淘宝玩个球辅助有吗?

淘宝小游戏玩个球自动执行

本文记录了为实现本游戏的自动执行而做的探索过程

第一阶段: 通过截屏进行判断

1.1 基本步骤

1) 通过adb shell截屏2) 判断特定行的蓝色和红色像素数量3) 通过adb shell发送指令

1.1.1 截屏

首先获得用su获得root权限(后面的步骤需要) 然后用screencap命令截屏, 图片放到放到手机SD卡里, 然后通过pull命令将图片复制到电脑上(d:⁄ss.png)

suadb shell screencap sdcard/#swap/ss.pngadb pull /sdcard/#swap/ss.png d:⁄ss.png

1.1.2 加载图片, 判断颜色

最开始使用C语言编写, 使用altimage.h提供的库.

CImage类是ATL和MFC共用的一个类,其头文件为atlimage.h,主要用于图片文件的打开,显示与保存。这里需要注意的是,在VS2010和VS2012的MFC编程中,不需要将头文件包含进来。MFC中要使用CImage类,必须先将头文件包含进来,可以包含在当前代码的CPP文件中,也可以包含在所属类的头文件中,不过最好还是包含在工程的stdafx.h文件中。CImage总共有39个成员函数。

(百度百科)

首先执行上面的命令, 然后进行图片的判断

system(D:⁄⁄input.bat);image.Load(_T(D:⁄⁄ss.png));bool result = check(895, image);

其中check函数定义如下, 判断第row行红色像素和蓝色像素哪个多一些.

// 返回 false代表蓝色, true代表红色bool check(int row, CImage image) { int blue = 0; int red = 0; for (int i = 0; i  1080; ++i) { COLORREF color = image.GetPixel(i, row); BYTE r = GetRValue(color); BYTE g = GetGValue(color); BYTE b = GetBValue(color);// 当时考虑到方块表面可以有一些轻微的渐变效果 所以设置了RGB的范围 后来发现是纯色 if (r = 250  g = 94  g = 103  b = 97  b = 103) { red++; } if (r = 50  r = 56  g = 250  b = 250) { blue++; } } return red  blue;}

1.1.3 命令发送

使用adb提供的input命令可以模拟触摸操作(需要root权限)

没用root权限直接使用input tap只会显示一个killed, 手机上没有任何反应. 获得root权限之后手机就有反应了, 电脑上没有任何报错.

代码如下, 首先打开一个文件 向里面写入root授权命令和input命令, 然后将adb shell命令的输入定向到该文件

ofstream f(D:⁄⁄.input);bool result = check(895, image);f  su  endl;if (result[i])f  input tap   284     1606  endl;elsef  input tap   797     1608  endl;system(adb shell  D:⁄⁄.input);

1.2 出现的问题及优化

1.2.1 出现的问题

程序根本无法使用! 因为太慢了. root授权需要1s左右, 截屏需要1s左右, tap命令从发出到执行也至少需要1秒左右~

所以我从针对上面的问题进行了如下优化

1.2.2 改用java语言

C++似乎无法获取到adb命令的输入流,所以只能讲命令写到文件里,adb执行完这几条命令就退出了;要执行新的命令必须重启adb,重启就意味着要重新进行root授权,极其浪费时间。

Java语言的优势是不仅可以执行外部程序,还能获得输入流输出流,可以在其它程序执行时向其动态写入命令(代码的参考资料)

try {Process mainProcess = Runtime.getRuntime().exec(adb shell);DataOutputStream os = new DataOutputStream(mainProcess.getOutputStream());os.writeBytes(su + ⁄n);os.flush();//处理错误输出流final BufferedReader brError = new BufferedReader(new InputStreamReader(mainProcess.getErrorStream()));ReaderThread t2 = new ReaderThread(brError, error);t2.start();//处理标准输出流final BufferedReader br = new BufferedReader(new InputStreamReader(mainProcess.getInputStream()));ReaderThread t1 = new ReaderThread(br, std);t1.start();os.writeBytes(input tap  + (797 + random.nextInt(30) - 15) +   + (1608 + random.nextInt(30) - 15) + ⁄n);os.flush();} catch (IOException e) {e.printStackTrace();}

改用Java语言之后, 原来的图像处理库就不能用了。经过搜索发现java提供图片读取的处理的功能。

import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;Process captureProcess = Runtime.getRuntime().exec(captureCommand);// TRYcaptureProcess.waitFor();  // 等待截图完成File f = new File(D:⁄⁄ss.png);BufferedImage image = ImageIO.read(f);result = handle(image, 815);// CATCH// 省略

判断函数如下, 读取一行像素缓存到数组中, 然后判断这一行有多少个红色, 多少个蓝色

static int[] colors = new int[1080];// 处理图片 返回true代表红色public static boolean handle(BufferedImage image, int row) throws Exception {int blue = 0;int red = 0;image.getRGB(0, row, 1080, 1, colors, 0, image.getWidth());  // 获得第row行像素for (int i = 0; i  1080; ++i) {Color color = new Color(colors[i]);int r = color.getRed();int g = color.getGreen();int b = color.getBlue();if (r = 250  g = 94  g = 103  b = 97  b = 103) red++;if (r = 50  r = 56  g = 250  b = 250) blue++;}if (red  10  blue  10)throw new Exception(异常状况! blue= + blue +  red= + red);return red  blue;}

1.2.3 一次判断多行

从每一张截图都可以得到4个方块的颜色, 所以首先想到的是一次输出4个命令.

bool result[4];result[0] = check(895, image);result[1] = check(815, image);result[2] = check(737, image);result[3] = check(658, image);while (i  4) {if (result[i])// f  input swipe 615 1600 615 500  endl;f  input tap   284 + rand() % 30 - 15     1606 + rand() % 30 - 15  endl;elsef  input tap   797 + rand() % 30 - 15     1608 + rand() % 30 - 15  endl;i++;}

这样做的结果还是失败. 设4个方块为一组, 组内的问题解决了,组之间仍然需要root授权、截屏等漫长的操作。

解决方案是3个方块为一组. 在刚跳到方块2, 还没开始到方块3的起跳时马上进行截图, 并发出命令(要过一会才会真正执行)

if (firstTime)result[0] = handle(image, 895);  // 判断第一行result[1] = handle(image, 815);    // 判断第二行result[2] = handle(image, 737);    // 判断第三行result[3] = handle(image, 658);    // 判断第四行

1.3 本阶段总结

步数越多,小球下落的速度就越快。受限于截图速度和发送命令的速度,做到这里程序可以实现跳140步。

第二阶段: 经过拍照进行判断

2.1 基本步骤

由于截屏速度太慢, 所以我想对手机屏幕拍照, 然后用照片来判断, 这样获得照片的延迟就很小了.

基本步骤如下

1) 拍照2) 判断颜色3) 发送命令

2.1.1 拍照

JavaCV是一款开源的视觉处理库,基于GPLv2协议,对各种常用计算机视觉库封装后的一组jar包,封装了OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口。

OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);grabber.start();  //开始获取摄像头数据CanvasFrame canvas = new CanvasFrame(摄像头);//新建一个窗口canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);canvas.setAlwaysOnTop(true);Frame f = grabber.grab();    // 获得一帧图像canvas.showImage(f);       // 显示到窗口中

2.1.2 判断颜色

经过摄像头拍照, 方块的颜色已经不是纯色, 外加摄像头有自动调节色温和亮度和功能, 游戏背景的变化让摄像头不断进行调节, 导致直接判断某一块像素的颜色是否在某个区间已经很不准确了.

我的方案是将两个红色矩形圈住的像素颜色的平均值作为参数(共6个,R1 G1 B1 R2 G2 B2),进行线性分类。

从摄像头采集大量数据(共8000帧)进行训练,4种情况 (左蓝 右蓝 左红 右红)各2000帧。使用某人写的一个fisher线性判别法的分类器(链接)求出线性分类器所需的参数

以上就是小编专为大家收集的淘宝玩个球有辅助吗 淘宝玩个球介绍的相关内容,想了解更多的内容,请继续关注iefans!

相关推荐

软件更新