因为判断胜负是在落子后,从落子点坐标开始算起,计算八个方向上,该颜色棋子的最大连珠数,
如果大于等于5,就胜了。
以下是判断的代码。
//返回直线上连珠最大值
int CBoxGameDlg::GetMaxCount(int IForward,int PTI,int PTJ)//判断同一直线上的棋子数
{
int i,j,changei,changej,num;
switch(IForward)
{
case 0: changei = 1;changej = 0;break;
case 1: changei = 0;changej = 1;break;
case 2: changei = 1;changej = 1;break;
case 3: changei = -1;changej = 1;break;
}
i = PTI;j = PTJ;
do
{
if(m_Table[i][j] != m_Table[PTI][PTJ])
{
num = Max(abs(PTI - i), abs(PTJ - j));
break;
}
i+=changei;j+=changej;
}while(!(i < 0 || i > 14 || j < 0 || j > 14));
i = PTI;j = PTJ;// 计算落子另一边同颜色的棋子数
do
{
if(m_Table[i][j] != m_Table[PTI][PTJ])
{
num = num - 1 + Max(abs(PTI - i), abs(PTJ - j));
break;
}
i-=changei;j-=changej;
}while(!(i < 0 || i > 14 || j < 0 || j > 14));
return num;
}