自从微信5.0发布以后,新增的功能除了游戏之外,其他的并没有更多的体验,像银行卡绑定,手机支付这些,我想我是一直不会使用的,无论它做得再好,一句话,“不安全,丢了手机还丢钱包”。

闲话少说,国庆前媳妇豆包和周围朋友都一直在疯狂的玩微信的小游戏“天天爱消除”,“天天联萌”,有一天跟朋友说,弄个刷分的工具,刷刷分吧,朋友顿时各种搜索,找了些刷分的程序,大致功能是修改游戏里存储积分的字段,存储金币的字段等,保证在提交的结果时候会有一个高分,结果没过几天就被腾讯清号了,游戏的金币等级全被将为0。作为一个极端主义的IT男,肯定是会思考各种办法去解决,下面进入正题。

背景

通过计算机自动玩微信游戏“天天爱消除”,“天天连萌”,主要目的是为帮助老婆刷分。

难点

1、 用电脑程序实现手动模拟触屏;

2、 图像识别,捕获屏幕图像,把图像转换为对应的数组(数组中不同的值代表不同图案);

3、 搜索最优移动方案。

核心算法

首先写了一个用电脑操作手机的类:Robot.java(主要操作类) , Point.java(定义手机坐标类)

主要接口如下:

        public void Snapshot();                            //获取手机截图public void Drag(Point p1,Point p2) ;  //模拟触屏,从点p1移动到p2public void Touch(Point p)  ;                 //模拟触屏,点击p点public void SetNum();                          //通过获取的截图设置num数组,对于不同的游戏,实现不一样public Point Search();                         //搜索,返回最优点,同上,对于不同的游戏,实现不一样。.........

天天爱消除--- 图像的识别算法:

由于只有7中颜色,而且颜色的区分度比较明显,因此取图像指定范围的RGB像素值,定义一个精度,计算是否满足即可,获取颜色代码如下:

    public int GetColor(BufferedImage bufferedImage,int startx,int starty,int width,int height){int R = 0;int G = 0;int B = 0;for(int rx = startx;rx<startx+width;rx++){for(int ry = starty;ry<starty+height;ry++){int RGB = bufferedImage.getRGB(rx, ry);R += (RGB & 0xff0000 ) >> 16 ;G += (RGB & 0xff00 ) >> 8 ;B += (RGB & 0xff );  }} R = R/(width*height);G = G/(width*height);B = B/(width*height);Double[] temp = new Double[7];double jingdu = 50;//红色int i = 254;int j = 82;int k = 105;temp[0] = Math.sqrt((R-i)*(R-i)+(G-j)*(G-j)+(B-k)*(B-k));//白色 i=234;j=233;k=233;temp[1] = Math.sqrt((R-i)*(R-i)+(G-j)*(G-j)+(B-k)*(B-k));//绿色i=186;j=240;k=91;temp[2] = Math.sqrt((R-i)*(R-i)+(G-j)*(G-j)+(B-k)*(B-k));//黄色i=253;j=228;k=85;temp[3] = Math.sqrt((R-i)*(R-i)+(G-j)*(G-j)+(B-k)*(B-k));//棕色i=234;j=151;k=86;temp[4] = Math.sqrt((R-i)*(R-i)+(G-j)*(G-j)+(B-k)*(B-k));//紫色i=160;j=127;k=200;temp[5] = Math.sqrt((R-i)*(R-i)+(G-j)*(G-j)+(B-k)*(B-k));//蓝色i=83;j=179;k=233;temp[6] = Math.sqrt((R-i)*(R-i)+(G-j)*(G-j)+(B-k)*(B-k));if(temp[0]<jingdu)return 1;//System.out.print("红色");else if(temp[1]<jingdu)return 2;// System.out.print("白色");else if(temp[2]<jingdu)return 3;// System.out.print("绿色");else if(temp[3]<jingdu)return 4; // System.out.print("黄色");else if(temp[4]<jingdu)return 5;// System.out.print("棕色");else if(temp[5]<jingdu)return 6;// System.out.print("紫色");else if(temp[6]<jingdu)return 7;//  System.out.print("蓝色"); elsereturn random.nextInt(1000)+8; //  System.out.print("未匹配");    }

天天爱消除的---搜索算法:

计算最优解。由于当消去4个或5个以及特殊道具会有额外加分及消除功能,暂不考虑,只需要消去3个,4个,5个相同颜色时的权重即可。

定义f(3)=350,f(4)=1200,f(5)=5000,即单次消除的分值(玩游戏时估计出一个值)

每次移动,发生的消去只能在移动点和被移动点之间产生,因此只需要分别计算以该两点为中心,上下左右最大相同匹配的长度和次数。

上图最优移动方案为 swap(1,4,2,4) ,[1][4] 与 [2][4]交换,可同时消去两对,生成的M=700。

       public int Get_Value(int x,int y){ int temp = num[x][y];int value = 0;int row_con = 1;int col_con = 1;int a = x-1;int b = y;while(a>=0 && temp==num[a--][b])col_con++;a = x+1;while(a<N && temp==num[a++][b])col_con++;a = x;b = y-1;while(b>=0 && temp==num[a][b--])row_con++;b = y+1;while(b<N && temp==num[a][b++])row_con++; value += Calculate(row_con);value += Calculate(col_con);       return value;}private int Calculate(int x){ switch(x){case 3:return 350; case 4:return 800; case 5:return 1700; default: } return 0;}

天天连萌---图像识别算法:

由于天天连萌图像比较多,而且相似的颜色图案也比较多,因此不能采用计算区域平均颜色来定义每个图案。在实际识别的时候,为了丰富知识,采用了汉明距离计算图像相似度的算法(具体可参考链接:http://www.open-open.com/lib/view/open1358901340114.html),但是存在的问题就是需要提前把每种图案进行存储,用手机截屏加PS,会很快实现,为了达到相似的计算,建议去中间75*65范围图像,这样避免了有时候会出现道具,加分等符号的影响,最后识别的效果感觉非常不错。每种图像定义一种值,大约有30种不同的图案吧,没有图案则置为0。每获取一种图,就进行搜索是否存在,存在置相应的数,否则为0,如发现的图案,同样置0。(实际上不阻挡消去路径,保留的话可以到游戏结束增加积分。)

天天连萌---搜索算法:

由图像转换得到的一个数组,定义为5*10,加上外围边界,实际上是7*12的数组,范围对于计算机来说是非常小了。因此直接采用深度优先,控制方向,控制转弯次数即可达到搜索目的。

   public void Start_Search() throws InterruptedException{ while(!Is_empty()){ for(int i = 1;i<=Width;i++)for(int j = 1;j<=Height;j++) if( num[i][j]!=0 && Search(i,j,num[i][j]))Touch_hengping(i, j);  } }private boolean Search(int x,int y,int target){int con = 2;if(Search_path(x-1,y,1,2,target)||Search_path(x+1,y,2,2,target)||Search_path(x,y-1,3,2,target)||Search_path(x,y+1,4,2,target)){num[x][y]=0;return true;} return false;} private boolean Search_path(int x,int y , int dir,int con,int target){  ... }

Search_path就是深度求解的过程,x,y表示起点坐标,dir表示方向,con表示可拐弯次数,target表示目标数值。

效果:

虽然不能达到很高的分数,但是也可以保持在游戏排名靠前的位置,免得被腾讯发现又分数又清零了。事实上通过模拟按键的方式刷分,应该很难检测出来的。

目前最高刷到27关,平均2s可闯一关,但是由于每次截图耗时,所以连击较少,分数并不高。

在图像处理上还需要优化。

缺点:

1、通过计算机发送指令到手机上捕获图片再回传到计算机上,测试需要耗时1.5秒,太费时间;

2、在天天连萌中进行图像识别时候,均涉及到文件的访问,所以在截图后再匹配图片的时候也需要一段时间,也很费时;

3、天天爱消除中消除后的效果影响截图,对图像识别有影响,截图的次数多,实际情况较慢。


改进:

将程序移植到手机上,利用手机进行计算,省去了图像在手机与计算机之间的传输,但可惜的是对手机移动应用开发并不擅长,因此还需要时间才能完成。

LT比较懒,很少写博客,10月后回归,多写东西锻炼写作能力。

帮豆包刷“天天爱消除”,“天天连萌”相关推荐

  1. 帮豆包刷“天天爱消除”,“天天连萌(附java代码)

    自从微信5.0发布以后,新增的功能除了游戏之外,其他的并没有更多的体验,像银行卡绑定,手机支付这些,我想我是一直不会使用的,无论它做得再好,一句话,"不安全,丢了手机还丢钱包". ...

  2. 从天天爱消除和节奏大师的用户对于论坛形式的分析

    2019独角兽企业重金招聘Python工程师标准>>> 手游论坛 项目做到现在也有三个月,除去开发时间,大概运营了四十天,其中,用户最多的是天天爱消除板块,当时就从论坛内容及用户留存 ...

  3. 用java编写天天爱消除_jQuery实现简易的天天爱消除小游戏

    今天分享一枚小demo:<天天爱消除游戏>,我想大家对这个游戏不陌生吧!?近期挺火的一款手游 妙味的讲师也很喜欢玩这款游戏 ,课余时间就写了个简易版天天的爱消除,除了PC端以外,试试在iP ...

  4. 使用Cocos2d-x 和粒子编辑器实现“天天爱消除”场景特效

    引言 Cocos2d-x引擎提供了强大的粒子系统, 它在模仿自然现象.物理现象及空间扭曲上具备得天独厚的优势,为我们实现一些真实自然而又带有随机性的特效(如爆炸.×××.水流)提供了方便.尽管如此, ...

  5. 使用电脑照样玩天天爱消除游戏

    使用电脑照样玩天天爱消除游戏 要说刚过去的8月份,最火的手机游戏是什么,我想非腾讯出的天天爱消除莫属. 天天爱消除游戏是腾讯微信及手机QQ平台上线的一款手机游戏.天天爱消除以社交为题材,可以与朋友间进 ...

  6. 使用 Cocos2d-x 和粒子编辑器实现“天天爱消除”场景特效

    引言 Cocos2d-x引擎提供了强大的粒子系统,它在模仿自然现象.物理现象及空间扭曲上具备得天独厚的优势,为我们实现一些真实自然而又带有随机性的特效(如爆炸.烟花.水流)提供了方便.尽管如此,它众多 ...

  7. 纯JavaScript山寨腾讯手机游戏《天天爱消除》开发过程详细

    前言 貌似最近腾讯手机游戏天天爱消除挺火的,我也是粉丝之一,最近对javascript一直比较感兴趣然后想用js仿造一个,应该不是太难,本文系边写代码别写博客,详细叙述开放过程,如果最后开发成功就发表 ...

  8. Android 天天爱消除辅助

    简介 <天天爱消除>是一款移植于手游的消除类益智游戏,该游戏只有通过手机登录QQ跟微信才能进行,这样一来这款游戏必然会大红大紫. 功能 开发Android自动化触屏事件,录制操作脚本,实现 ...

  9. 用java编写天天爱消除_android天天爱消除游戏挂机脚本的实现思路

    1  首先是能够截取android屏幕的上的图片,并且截取的速度要足够的快,这点不应该用别人的库文件,而是一定要自己编写实现,哪怕不保存文件,也要保证能够按照帧来截取屏幕上的图片. 2  截图图片完成 ...

最新文章

  1. SLAM的通用框架:GSLAM
  2. 在.net中运用HTMLParser解析网页的原理和方法
  3. 浅析一般网站建设的需要耗费多长时间?
  4. hadoopHA自动切换不成功的坑
  5. C语言实现封装、继承、多态
  6. 《面向对象的思考过程(原书第4版)》一 导读
  7. 网页跳转-重定向-102.课时102.【Django视图高级】重定向详解(Av61533158,P102)
  8. ping不通自己的ip地址_1000个IP地址同时怎么Ping,一个小技巧轻松搞定
  9. 写得蛮好的linux学习笔记[转]
  10. 信息路由器动态路由配置
  11. 互联网日报 | 4月29日 星期四 | 虎牙20亿购买LPL直播版权;返利网正式借壳登陆A股;淘宝直播全面开放官方货品池
  12. android绘制矢量图地图,Android 高级 UI 进阶之路 (七) SVG 基础使用 + 绘制中国地图...
  13. 最小系统板 STM32入门,呼吸灯实现(STM32F103C6T6)
  14. 微信内置浏览器打开所有页面空白解决方案
  15. canal 记录 ROWDATA TRANSACTIONBEGIN
  16. unity批量设置图片为etc2格式或者astc格式
  17. 转载 回声消除的总结
  18. 【Arduino+ESP32专题】案例:使用INA3221监控电压电流 3—— Modbus通信
  19. 《亲爱的热爱的》:CTF黑客在线恋爱
  20. 华为大数据HCIA题目1

热门文章

  1. 10 个面试技巧帮你找到最好的工作 !
  2. 日常开发中,你需要掌握的git使用技巧
  3. 计算机专业行业分析300字,国泰君安-计算机行业研究报告
  4. 高压连接革命!CSJ高压连接器与您共赢电动汽车新时代
  5. Ubuntu查看服务占用内存情况
  6. python之布尔值
  7. U盘拷贝文件到Linux服务器
  8. ●BZOJ 4237 稻草人
  9. mambo 服务商规定的mysql密码,Mambo com_content远程SQL注入漏洞
  10. 【政策动态】央行印发《金融科技发展规划(2022-2025年)》:推动数据有序共享,激活数据要素潜能 | 冲量划重点