最近和朋友玩连连看,奈何朋友太厉害了,玩了几盘都孔夫子搬家,碰巧这几天都在看孙鑫的书,于是就萌生了做一个qq连连看外挂的念头,权当练练手嘛,写这东西的时候也参考了很多文章,其中这篇文章对我最有帮助:
1.http://www.cnblogs.com/hsapphire/archive/2011/03/14/1983616.html
qq连连看外挂的思路,我同样也采取了网上较为普遍的方法:
热键响应->获取游戏窗口句柄->分析游戏区域图像->将图像化为二维数组->实现消除算法
热键响应
在CXXXXXXXDLG类的OnInitDialog中注册热键
<span style="font-size:14px;"> ::RegisterHotKey(m_hWnd, 001, NULL, VK_F1); //在这里我注册的是F1键</span>
然后在CXXXXXXDLG类的类向导中添加消息WM_HOTKEY,再在消息函数里面编写就可以使用热键了 。
获取游戏窗口句柄:
CWnd* pGameWnd;
pGameWnd=GetForegroundWindow(); //获取前台的窗口类对象
然后通过 pGameWnd->m_hWnd就能得到当前游戏窗口的句柄了,不过这样会有一个缺陷,就是一定要让游戏窗口是前台才行。
分析游戏区域图像 && 将图像化为二维数组:
游戏区域内一共有11*19个小方块,每个小方块长35宽31,并且第一个方块距离左边边界大约在15像素。距离上边边界大概在182像素,在上面给出的第一个连接中有关于方块像素的详解图.这里就不盗图了。
然后我们就可以通过用 GetPixel()来获取像素点,之前尝试过取3个点,发现不够精准,建议每个方块取6个点以上这样。
可以建立一个COLORREF pGameRGB[11][19][6]来得到并且保存像素点,再通过这个二维数组来将相同颜色方块编号,再存入用于实现算法的二维数组pGameColor[11][19]中。
需要注意的是相同颜色的方块有可能有8个!,所以在判断背景颜色的时候就是8个不同颜色,所以有8个以上相同图案的就是背景颜色啦。