引子

       今年中秋闲在家,总要找点事做。

       前几天开始学python,很早之前就有计划拿下这门语言了,可惜一直拖到现在……不可否认,我也是个拖沓症患者。在学习python的过程中,我很想了解这门语言适合做什么,能做什么,然后,从互联网海量信息中得知,python不仅适合作为程序员学习第一门语言,也是黑客喜欢的语言,python被称为各种语言的”胶水语言“。在这个过程中,无意间看到了一篇python前辈的博客——用python写QQ美女找茬游戏外挂(点击跳转查看)。对于外挂,从没涉足,也完全不了解,但那篇博客给了我思路,引起了我的兴趣,编程这么久了,从没考虑过做外挂,不知道用java能不能实现。我试着从互联网找答案,基本都说java不适合做外挂,因为他的运行机制限制——运行在沙箱内,使其不能自由访问底层API。但是我之前了解java的一个Robot类,能实现屏幕截图,模拟鼠标键盘操作。对于实现那个外挂(或者叫辅助更合适)应该问题不大,因此,用java开发美女找茬辅助的想法就这样应运而生。
 
体验
  效果图:
        
  可执行jar下载地址:
  源代码下载:
  本程序及源代码仅用于学习研究,请不要用于商业和非法目的,由此产生的法律纠纷,自行负责,作者本人一概不负任何责任!
 
解析
  实现思路:
  1.截取屏幕;
  2.根据游戏窗口独特的图标,查找游戏窗口左上角坐标;
  3.根据窗口的坐标计算两张对比图片的位置,然后剪切出两张图片。
  4.对比两张图片,找出不同的地方。
  5.创建透明背景窗口,将找到的两张图片不同的地方用点绘制在该透明背景窗口上。
  
  开发过程中主要涉及到一下几个点,已经分篇说明:

  1. 屏幕截图及图片剪切。点击这里查看

  2. 图片上查找图片算法。点击这里查看

  3. 比较两张同尺寸图片,找出不同的地方。

      类似上面图片上查找图片的算法,其实就是读取两张图片为BufferedImage对象,取出每个像素点的GRB值进行比较,用一个同样大小的二维数组记录比较结果,相同的像素点位置记录为0,不相同的像素点位置记录为1。等到图片比较完成后,就得到一个标记两张图片异同点的二位数组。

  4. 透明背景窗口的妙用。

      当设置窗口背景完全透明后,偶然发现透明的的地方类似窗口的破洞。这个特性可以很好的利用起来,比如,可以实现任意形状的窗口。

    在这里,利用这一特性,我在用点绘制两张图片不同的地方时,遍历比较结果的二位数组,只关注标记为1的点,并且忽略掉了上下左右都是1的点,这样绘制出来的效果就形成了中间镂空的区域,加上我让透明窗口始终保持最前,因此,虽然java的透明窗口始终覆盖在游戏界面上,但鼠标依然可以点击到游戏界面上的控件,非常神奇!

  5. 设置全局(操作系统级)热键。点击这里查看

  6. 鼠标拖拽。点击这里查看

  7. 内存释放。

      本以为不需要这一步,当我写完实际检验的时候,发现对比十几对图片后,再点击按钮,没反应了,到控制台输出一看,原来是内存溢出了。因为写的类的成员变量有几个比较大的二维数组,每次比较都是重新实例化类。因此,有必要主动请求java虚拟机尽快进行垃圾回收,即调用System.gc(),需要说明的是,就算你调用了System.gc(),也不能保证java虚拟机马上进行垃圾回收。另外,为了让java虚拟机有效地找到不用的对象,因此,需要将不用的成员变量赋予null值。为了简便,虽然我依然是每次比较都是重新实例化类,但在比较之前,我先请求进行垃圾处理,释放内存。

总结
      写完之后我才发现,老早已经有java前辈写过这个辅助了。写这个小程序差不多花掉了我两天时间,最后总算写出来了,也有不少收获与体会。然后,写博客就是对着前两天编码的总结,同时,跟小伙伴们分享,共同进步。

2014中秋节,用java为QQ游戏美女找茬写辅助的更多相关文章

  1. MFC版美女找茬

    今天心情:捡了个闲暇. 前几天工作出了个漏洞,电话会议时候怎么都是忽大忽小的声音,实在没听清电话会议的内容,完了依据想象交了一个设计方案,之后便是赋闲. 进入正题,美女找茬实现不难,没有设计上的难度, ...

  2. opencv做的美女找茬程序~

    // CMP.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <cv.h> #include <high ...

  3. 用Python实现QQ找茬游戏外挂工具

    源地址:http://cpiz.net/blog/2012/03/a_qq_zhaocha_assistant_by_python/ (原创作品,转载请注明出处)好久没写技术相关的博文,这次写篇有意思 ...

  4. 玩QQ游戏,见到好几个图像是美女的QQ,就不始玩

    玩QQ游戏,见到好几个图像是美女的QQ,光占坑就是不开始玩 加了一个,发现是传播不良网站的QQ 聊天还是自动的 估计是利用webqq写的程序,也就那几句话来回重复,让你去注册网站什么 可以加这个Q去体 ...

  5. QQ游戏百万人同时在线服务器架构实现

    转载自:http://morton5555.blog.163.com/blog/static/976407162012013112545710/# QQ游戏于前几日终于突破了百万人同时在线的关口,向着 ...

  6. java实现QQ、微信、轰炸机,撩妹,抖图功能,轻松自如

    今天交大家一个很牛的功能,让你朋友服你,他不扶你你来找我. 打游戏被骂,骂不过你来找我,我们有神器,直到他怕了为止. 废话少说,代码如下,动手,干就完了 乞丐版如下 参考连接:Java实现QQ微信轰炸 ...

  7. java 模拟qq源码

    java 模拟qq源码: http://files.cnblogs.com/files/hujunzheng/QQ--hjzgg.zip

  8. 2015-2016-2 《Java程序设计》 游戏化

    2015-2016-2 <Java程序设计> 游戏化 实践「<程序设计教学法--以Java程序设计为例>」中的「游戏化(Gamification)理论」,根据 2015-201 ...

  9. 负载均衡--大型在线系统实现的关键(上篇)(再谈QQ游戏百万人在线的技术实现)

    http://blog.csdn.net/sodme/article/details/393165 —————————————————————————————————————————————— 本文作 ...

随机推荐

  1. FTP Server完整篇 ubuntu 10.04

    1. sudo apt-get install vsftpd   #安裝FTP Server(vsftp:very secure FTP) 安装后,会自动生成ftp用户,和ftp的文件夹,如果没有自动 ...

  2. [VueJS + Typescript] Decouple Dependencies Using IoC Containers in Vue with TypeScript and InversifyJS

    Using Object Oriented Programming, OOP, style allows us to apply Inversion of Control, IoC, and more ...

  3. datatables对于某一特定的列进行自定义排序

    首先说下里边的api,其中第一个是order,这个里边是设置哪些排序哪些不排序的,比如:$('#example').dataTable( {     "order": (funct ...

  4. CI知识:GitLab

    Gitlab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的 ...

  5. Woody的逻辑游戏--怎样换轮胎

    题目:有一个做长途运输的司机要出发了,他用作运输的车是三轮车.轮胎的寿命是2万里,如今他要进行5万里的长途运输.计划用8个轮胎完毕运输任务,如何才干做到呢? 首先将轮胎从1-8依次编号,然后例如以下所 ...

  6. The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory的解决方法

    An error occurred at line: [31] in the generated java file: [/data/tmisnt/work/Catalina/localhost/_/ ...

  7. JavaScriptSerializer 序列号datatime时少了8小时

    有人说主要的因素是在于JSON格式不直接支持日期和时间. 简单一点处理办法是ToLocalTime()一下:dt = dt.ToLocalTime(); 参考http://blog.csdn.net/ ...

  8. UVA-10163 Storage Keepers DP

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  9. JVM架构

    1 JVM的内存模型 1.1 堆空间 每个jvm都有一个堆,所有的对象都放在这里. 1.2 java栈空间 每个线程都有一个java栈,所有的java栈都放在这里. 1.3 本地方法栈 每个线程都有一 ...

  10. GraphDatabase_action

    https://neo4j.com/docs/ #https://pypi.python.org/pypi/neo4j-driver/1.5.3from neo4j.v1 import GraphDa ...