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的消息
}
这样就完成了一个自动游戏的小工具,还比较简单吧?如果配合变速齿轮,效果会更好的。根据同样的原理,类似这