当前位置: 首页 > article >正文

自制 QQ游戏 连连看 外挂 ~~

这几天期末考,完全没有考试的心情,又无聊到玩起连连看,可惜输得太多,非常不爽,于是自己做个连连看外挂玩一下。网上有很多连连看的外挂可以下载,不过自己做一个来用,感觉自然不一样,毕竟还是学计算机的嘛~~这里简要记下做的过程,有兴趣自己写的朋友可以参考参考~~~
我是用MFC做的~开发环境:Xp sp2 、Visual Studio.NET 2003

    一、QQ游戏连连看玩法。
image 
玩法非常简单,用鼠标点击两个相同的格子,如果两个格子可以用一条“线”连起来,则这两个格子可以消去。关键是这条“线”最多只能有两个拐点!~

二、外挂的功能需求。
功能简单:一个按键,让游戏自动消去一对格子········

三、外挂原理。
1.获得游戏数据:
  首先,需要获得游戏的格子数据,才能进一步用算出哪两个格子可以消去。对于QQ游戏连连看,可以采用网上比较普遍的做法,读取屏幕像素点,根据像素点判断是什么格子(红球or蓝球or黑桃or······)。
  为了获得游戏的像素数据,必须先获得游戏窗口的指针,在程序中我注册了几个全局热键,我的机制是用户激活游戏窗口,按下外挂注册的全局热键(例如我的是F1键)。这个时候利用一个API获得窗口指针。
// CWnd*        m_pGameWindow; //游戏窗口
m_pGameWindow = GetForegroundWindow();//取出最“顶”的窗口
   接着就可以读取游戏窗口的像素值了,基本思想就是写一个循环
for(int i=0;i<11;i++)// 11行
{
    for(int j=0;j<19;j++)//19列  全世界都知道QQ的连连看方格是11行19列
        //具体读取像素操作
}
具体代码就不贴了~太多了。。最终的结果是将屏幕的格子数据保存到一个11X19的二维数组中,数组的坐标(i,j)就代表在游戏中第几行,几列。array[i][j]的值如果为0就代表该处为空没有格子,1、2、3····就代表不同的格子。像上面那张图片编码后应该就为:
1 0 0 2 3 0 0 4 5 0 0 6 7 0 0 8 3 0 0 第一行编码的结果 。。其它行的就不再贴了。
2.计算可消去的一对格子:
 
  我已经将游戏数据保存到了一个二维数组了。接下来就是如何计算一个哪两个格子可以消去.我的做法是将这个二维数组看成一个图,利用我针对连连看改进的宽度图搜索算法。
3.模拟鼠标点击消去格子:
当算法算出两个可消去的格子的数组坐标后,需要将其转换到实际的屏幕坐标,再进行鼠标模拟点击。
void CLLKCheatDlg::Imitate(int beginX,int beginY,int endX,int endY)
{
    //相对于游戏窗口的两个坐标
    CPoint begin = getPoint(beginX,beginY);
    CPoint end = getPoint(endX,endY);
    //转换到屏幕坐标
    m_pGameWindow->ClientToScreen(&begin);
    m_pGameWindow->ClientToScreen(&end);

    //移动鼠标到第一个点
    ::SetCursorPos(begin.x,begin.y);

    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

    ::SetCursorPos(end.x,end.y);
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
//getPoint是我自己写的,用来计算逻辑坐标到游戏窗口坐标的转换。

四、测试
看看我使用该工具秒杀的截图吧。提供了一个按键,全部消去的功能。
image 

 

http://www.lryc.cn/news/2413468.html

相关文章:

  • VMware虚拟机win7安装教程
  • 编码器的使用教程与测速原理
  • 捷克论坛新ip_网络文学,文化出海的新路径
  • 找不到msvcr100.dll如何解决,总结5种有效的方法
  • 六个免费的虚拟主机管理系统
  • 向日葵深度linux,完美使用向日葵远程软件
  • 介绍一个不错的免费国外php空间
  • 表白墙网站手把手搭建(网站搭建的详细教程+保姆级解答)
  • python lable文本换行_Python3 Tkinter基础 Label 显示的文字换行
  • oj大大大大维1000: A+B Problem
  • 2005年中国BBS社区100强
  • C#中DataReader类的使用
  • 芜湖c语言市赛答案,安徽省芜湖市2019-2020学年高二上学期期末考试 数学(文) Word版含答案...
  • IN 和NOT IN,EXISTS 和NOT EXISTS
  • grub4dos命令和grldr引导文件介绍
  • 在win8日历显示农历和节假日
  • 流量分类和标记——class-map方式、CAR方式、PBR方式
  • 数据库保存点播播放历史
  • 暴风酷播云二期配置_暴风播酷云二期 黑群晖
  • Android开发之layout布局+实例
  • 什么是视频编码 编解码技术及压缩技术
  • 推荐三个优秀的国外HTML5网页设计网站
  • 网络安全学习之主机扫描和漏洞扫描
  • 基于flask+vue框架的基于html的校园网设计与实现[开题+论文+程序]-计算机毕设
  • 景安网络快云mysql版本_景安快云数据库使用教程
  • 为列表框控件List Control设置行高
  • 数字电路与逻辑设计——组合逻辑篇
  • 诺基亚/NOKIA 5800软件集
  • linux怎么安装pcie串口卡驱动,pci串口卡驱动是什么接口 pci串口卡驱动安装方法...
  • zencart包包模板