引子

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

       前几天开始学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. Application特征

    1.位置:服务器内存,执行速度快2.使用范围:整个应用程序3.类型:任意类型4.声明周期:应用程序开始创建到销毁

  2. Android上拉查看详情实现

    京东淘宝有那么一种效果就是,上拉能够查看宝贝的详情,这里我也实现了一个类似的效果,也能够移植到商业项目上:先看看简单的效果图 实现原理事实上是利用了ScrollView的滚动和view的touch事件 ...

  3. [办公自动化]如何在windows7中编辑hosts文件 (提示权限不够)

    请按如下步骤尝试: 1.在开始菜单里,单击“所有程序”,找到“附件”,单击找到里面的“记事本”,右键,然后选择“以管理员身份运行”,如果有对话框,选择“是”.2.然后单击记事本窗口的“文件”菜单,选择 ...

  4. [翻译角]Headline English: A Captain Should Be Pitch Perfect at a Multitude of Skills (ESLPOD Blog)

    以下转自www.eslpod.com,翻译为本人添加.其余版权均归原网站所有. ESLPOD是一个英语学习网站,我最初知道这个网站,是因为“奶爸”<把你的英语用起来>(电子版3元)一书的推 ...

  5. easyUI的treegrid添加节点(append)时间过长,设置等待(wait)遮罩效果

    如题所述,在treegrid中,一次添加多个节点时,时间很长,但easyUI并无显示等待信息,让人以为是陷入了死循环,或者死机了,用户体验很差. 本来,treegrid(或者datagrid)有所谓的 ...

  6. iOS开发——高级篇——线程同步、线程依赖、线程组

    前言 对于iOS开发中的网络请求模块,AFNet的使用应该是最熟悉不过了,但你是否把握了网络请求正确的完成时机?本篇文章涉及线程同步.线程依赖.线程组等专用名词的含义,若对上述名词认识模糊,可先进行查 ...

  7. ASCII表格

    1. ASCII表格

  8. [ACM]2013山东省“浪潮杯”省赛 解题报告

    题目地址:http://acm.upc.edu.cn/problemset.php?page=13  2217~2226 A.Rescue The Princess 一个等边三角形告诉前2个点,求逆时 ...

  9. bzoj 2428 均分数据

    题目大意: 已知N个正整数 将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小 求最小均方差 思路: 模拟退火 #include<iostream> #include<c ...

  10. js获取下拉框当前选中的值并弹出

    this.options[this.selectedIndex].value --- 显示文本 this.value --- 实际存储值 调用实例: <script language=" ...