`
CnXiaowei
  • 浏览: 49813 次
社区版块
存档分类
最新评论

教你用VC6做QQ对对碰外挂程序

阅读更多

        前段时间跟以前的同事玩QQ游戏对对碰,结果输的好惨,后来在网上看到了有对对碰的外挂,但还需要注册,就考虑既然别人可以写出来,我为什么就不能写出来呢?于是花了一个下午的时间仔细研究了一下,把外挂写了出来。
        其实原理很简单,只要将棋盘上面的数据保存起来,然后经过分析就可以知道移动哪里的动物,然后再通过模拟鼠标消息来点击两个位置就可以了。
         1)获取棋盘数据
          要得到棋盘的数据进行分析,思路是这样:首先得获得对对碰的窗口,然后对窗口上面的象素进行分析,从而获取每个格子中的数据。对于每个格子里面的动物,一定可以有几个有特征的点使得可以区分开每个格子中的动物,可以用用2到3个点的数据保存一个动物,这样把每个格子中动物的数据都获得后,棋盘的数据也就出来了。
        首先,要得到对对碰的窗口,这个比较简单,可以用::FindWindow来实现,具体代码如下:
     CQQGameToolDlg * dlg = (CQQGameToolDlg *)parm;//这里因为这个函数是作为一个线程来做的,所以得传递一个参数过来
     dlg->hWnd = ::FindWindow(NULL,"QQ对对碰");//查询
     if(dlg->hWnd == NULL)
      dlg->hWnd = ::FindWindow(NULL,"对对碰");//好像窗口标题有时还不同,不知道是不是我自己搞错了
     if(dlg->hWnd == NULL)
     {
      AfxMessageBox("未找到对对碰窗口,请首先启动对对碰!");
      dlg->SetDlgItemText(IDC_BUTTON1,"启动");
      dlg->m_bStart = false;
      return 0;
     }
      到这里就得到了QQ对对碰的窗口句柄,但是要分析窗口中的象素,还需要得到一个窗口的HDC
    dlg->hDc = ::GetDC(dlg->hWnd);
    下面就是得到棋盘的数据了,首先得测试出棋盘左上角的坐标和每个格子的边长,具体测试方法就不给出了,是比较简单的,经过测试得出的数据,棋盘左上角坐标为(176,102),每个格子的边长是48。
    接下来就是保存棋盘数据了
    下边的函数是为了获取每一个方格的数据的
    参数x,y是棋盘坐标,比如(0,0)代表左上角第一个方格等等。
    我们在这里取每个格子中间那条线的象素作为数据进行存储。
    COLORREF * CQQGameToolDlg::GetRectData(int x, int y)
    {
     COLORREF * color;
     color = new COLORREF[48];
     int count = 0;
     for(int i=(x-1)*48 + m_posX;i<(x-1)*48 + m_posX + 48;i++)
     {
      color[count++] = GetPixel(hDc,i,(y-1)*48 + m_posY + 20);
       //如果是棋盘的底色,则忽略
      if(color[count-1] == 0x00efaa5a || color[count-1] == 0x00f7c384)
       color[count-1] = 0x000000;
     }
     return color;
    }
    下边的函数获取每个格子的特征点的数据:
    在这里我们只取六个特征点进行存储,把六个特征点的十六进制保存起来。
    void CQQGameToolDlg::GetCode()
    {
     for(int i=1;i<=8;i++)
      for(int j=1;j<=8;j++)
      {
       CString str;
       COLORREF * c;
       c = GetRectData(i,j);
       str.Format("%x%x%x%x%x%c",c[25],c[26],c[27],c[28],c[29],c[30]);
       data[i][j] = str;
      }
    }
    经过上面的函数,则data数组保存的就是棋盘的数据了,到这里,对棋盘数据的获取就结束了。
    2)分析棋盘数据
    得到棋盘数据以后,需要对棋盘数据进行分析了,思路是分别分横向和纵向遍历所有的格子,先找到两个相同动物相连的格子,然后找到周围6个可能移动的格子,只要在6个格子中找到一个与那两个相同的,就说明可以移动那个格子中的动物了。
    比如:

只要在C、D、E、F、G、H中找到任意一个与A、B相同的动物,就可以了。具体的代码也比较简单,就是对数组的判断和操作了,在这里就不详细给出了。
    3)移动动物
    从上面的分析我们可以知道需要移动哪里的动物了,现在我们只要标识出来那个位置其实就可以达到目的了,但是为了方便,最好还是不用自己动手,而利用程序自动来完成移动的操作。实现也比较简单,只需要给游戏窗口发送消息就可以实现,代码如下:
    由于开始是直接画图上去没有实现自动移动,所以函数名还是用的DrawRect:)
    x,y是上面得到的移动的坐标。
    void CQQGameToolDlg::DrawRect(int x, int y)
    {
     int xx,yy;
     xx = (x-1)*48 + 10 + m_posX;
     yy = (y-1)*48 + 10 + m_posY;
    // ::Rectangle(hDc,xx,yy,xx + 10,yy + 10);//这里是画一个方块上去,注释掉了。
     LPPOINT lpPoint = new CPoint();
     lpPoint->x = xx;
     lpPoint->y = yy;
     ::ClientToScreen(hWnd,lpPoint);
     LPARAM lParam = MAKELPARAM(xx,yy);//鼠标点击的坐标
     ::SendMessage(hWnd,WM_LBUTTONDOWN,MK_LBUTTON,lParam);//发送鼠标DOWN的消息
     ::SendMessage(hWnd,WM_LBUTTONUP,MK_LBUTTON,lParam);//发送鼠标UP的消息
    }    
    这样就完成了一个自动游戏的小工具,还比较简单吧?如果配合变速齿轮,效果会更好的。根据同样的原理,类似这样的游戏其实都是可以做出来这种外挂的,比如连连看、俄罗斯方块、泡泡龙等等,只是需要对游戏本身进行仔细分析才行。


    还要补充一点:使用的时候必须让对对碰的棋盘完全显示出来,不能有窗口挡住否则得到的数据就不准确了。

分享到:
评论

相关推荐

    QQ-VC-.zip_QQ vc_VC qq_qq socket_vc socket qq_vc 聊天程序

    QQ-VC-.zip 包含的是一个针对QQ聊天程序的VC++项目,主要涉及的是使用VC++进行网络通信,特别是socket编程技术。在"中兴捧月杯大赛"这样的编程竞赛中,这样的项目可能被用来设计一个防止QQ聊天或者与QQ进行交互的...

    VC简单仿QQ聊天程序【CS结构】.rar

    VC 类似QQ的聊天程序源码。包括服务器端和客户端!CS架构的网络聊天程序,通过端口1080的连接,实现了双机的互联! 全部项目文件包括: VC 项目源文件(客户端、服务器端);已编译的可执行文件(客户端、服务器端)...

    在VC6上编写C程序

    尽管有更多现代化的开发环境出现,如Visual Studio的更新版本,但许多开发者和初学者仍然钟情于使用Visual C++ 6.0(简称VC6)来编写C程序。这篇文章将介绍如何在VC6环境下创建、编译和运行C程序,以及如何利用其...

    仿QQ vc界面

    【标题】"仿QQ vc界面"揭示了这个项目的核心内容,即使用Visual C++(简称vc)来构建一个类似于腾讯QQ的用户界面。这是一项针对软件界面设计与实现的挑战,旨在模仿QQ的经典外观和交互体验,使得用户在使用这款应用...

    vc6使用CImage的示例程序

    **VC6与CImage库** 在Microsoft Visual Studio 6.0(简称VC6)这个经典的开发环境中,开发者经常需要处理图像操作,例如显示、编辑或处理图像数据。`CImage`类是MFC(Microsoft Foundation Classes)的一个扩展,它...

    VC6中实现mfc程序中添加console控制台

    在Microsoft Visual C++ 6.0 (简称VC6)中,开发MFC...通过以上步骤,你可以在VC6的MFC程序中成功添加并使用控制台,这对于调试和输出信息非常有帮助。希望这个教程能对你在开发过程中遇到的问题提供解决方案。

    VC6做的局域网仿QQ聊天程序

    "VC6做的局域网仿QQ聊天程序"这个标题表明这是一个使用Microsoft Visual C++ 6.0(简称VC6)开发的软件项目,目标是创建一个类似于QQ的聊天应用程序,但它的功能限定在局域网内。这涉及到网络通信、多用户交互以及...

    VC2008的使用教程,教你如何在VC2008中开发自己的程序

    VC2008的使用教程,教你如何在VC2008中开发自己的程序

    VC UDP仿QQ聊天程序.rar

    VC UDP仿QQ聊天程序,采用面先消息型协议,在内存中创建兼容的设备环境,可设置聊天窗口背景为为透明模式,并可装入音乐文件进行播放,可自动查找目录下的wav文件,接受消息的时候会根据我们每次发送的长度自动进行...

    手把手教你用vc6 c++ 做俄罗斯方块小游戏.pdf

    本文将基于提供的文件信息——“手把手教你用VC6 C++做俄罗斯方块小游戏”,详细介绍如何利用Visual C++ 6.0(简称VC6)这一集成开发环境,结合C++语言,实现一款经典的俄罗斯方块游戏。 #### 二、准备工作 1. **...

    测试vs2010编译的使用VC6库的可执行程序

    标题“测试vs2010编译的使用VC6库的可执行程序”涉及的知识点主要集中在Microsoft Visual Studio 2010(VS2010)的编译环境和与之兼容的旧版库,即Visual C++ 6.0(VC6)的库。在软件开发中,编译器版本的不同可能会...

    VC程序1 经典VC程序

    VC程序VC程序VC程序VC程序VC程序VC程序VC程序

    易语言vc6linker_VC7_VC8_VC9_VC2010_连接器

    总结来说,易语言vc6linker、vc7linker、vc8linker、vc9linker和vc2010linker是易语言在不同Visual C++版本下的专用编译链接工具,它们各自适应并优化了对应版本的编译环境,确保了易语言程序在各种平台上的顺利构建...

    用VC做的仿qq界面

    【标题】"用VC做的仿qq界面"是一个项目,它展示了如何使用Microsoft Visual C++ (VC++)编程环境来创建一个类似QQ的用户界面。这个项目的核心在于界面的美化和控件的重绘,以实现与腾讯QQ相似的视觉效果。 在VC++中...

    VC6程序无法退出_插件补丁

    标题中的“VC6程序无法退出_插件补丁”指的是在使用Visual C++ 6.0(简称VC6)开发的程序在Windows 7 64位系统上运行时,遇到程序无法正常退出的问题。这可能是因为某些系统兼容性问题或者VC6自身存在的bug导致的。...

    用vc6开发汇编语言程序的方法

    标题中的“用vc6开发汇编语言程序的方法”是指利用微软的老牌集成开发环境Visual C++ 6.0(简称VC6.0)来编写和调试汇编语言程序。汇编语言是一种低级编程语言,它与机器指令一一对应,对于理解计算机底层工作原理和...

    VC6.zip_vc6 教程

    **VC6.zip_vc6 教程** ...总的来说,这个VC6教程旨在帮助初学者熟悉C语言编程环境,了解基本的编程概念,并学会使用VC6进行程序开发。通过实践和不断的练习,你将能够熟练地运用VC6进行各种C语言项目开发。

    易语言VC6连接器

    易语言VC6连接器是专为易语言设计的一款工具,主要用于实现易语言程序的静态编译。在软件开发过程中,编译是将源代码转换成可执行文件的关键步骤,而静态编译则是将所有依赖库合并到一个单独的可执行文件中,这样...

Global site tag (gtag.js) - Google Analytics