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的消息
}
这样就完成了一个自动游戏的小工具,还比较简单吧?如果配合变速齿轮,效果会更好的。根据同样的原理,类似这样的游戏其实都是可以做出来这种外挂的,比如连连看、俄罗斯方块、泡泡龙等等,只是需要对游戏本身进行仔细分析才行。
还要补充一点:使用的时候必须让对对碰的棋盘完全显示出来,不能有窗口挡住否则得到的数据就不准确了。