zoukankan      html  css  js  c++  java
  • 自制 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 

  • 相关阅读:
    2020暑假项目-车辆派遣管理系统需求
    2020暑假项目-车辆派遣管理系统
    关于页面刷新或者调用方法事获取不到元素信息或者出现缺少对象错误的换位思考setTimeout的使用
    JSON 传值 textarea中虚拟换行功能
    我的MYSQL学习心得(十) 自定义存储过程和函数
    我的MYSQL学习心得(九) 索引
    我的MYSQL学习心得(八) 插入 更新 删除
    我的MYSQL学习心得(六) 函数
    我的MYSQL学习心得(七) 查询
    我的MYSQL学习心得(四) 数据类型
  • 原文地址:https://www.cnblogs.com/hsapphire/p/1983616.html
Copyright © 2011-2022 走看看