//连连看消除算法:(以具有7行8列的连连看为例) //根据传入的两个点和BOOL型的二维数组mbGrid[9][10] (TRUE代表有图片,FALSE代表无图片) //如果两点可以消去函数返回TRUE,否则返回FALSE BOOL CGameLogic::RemoveAble(int x1, int y1, int x2, int y2)...{ int i,j,k=0; if ( (x1==x2 && (y1==y2-1 || y1==y2+1)) || (y1==y2 && (x1==x2-1 || x1==x2+1)) ) //相邻 ...{ return TRUE; } else ...{ //------------------------遍历与第1个点在同一行上的所有点------------------------ for (i=0; i<10; i++) ...{ if ( !m_bGrid[x1][i] ) //如果点为空(即图片不显示) ...{ if (y2 > i) //如果第2点在空点右面(或斜右) ...{ for (j=y2-1; j>=i; j--) //遍历第2点到空点所在列对应点间的所有点 ...{ if ( m_bGrid[x2][j] ) //如果有一个非空则跳出 ...{ k = 0; break; } k = 1; //k=1表示通过第一步验证 } if (k == 1) ...{ if (y1 > i) //第1点在空点右面或斜右 ...{ for (j=y1-1; j>=i; j--) //遍历第1点到空点间的所有点 ...{ if ( m_bGrid[x1][j] ) ...{ k = 0; break; } k = 2; //k=2表示通过第2步验证 } } else if (y1 < i) //空点在第1点下面 ...{ for (j=y1+1; j<=i; j++) ...{ if ( m_bGrid[x1][j] ) ...{ k = 0; break; } k = 2; } } } } else if (y2 < i) ...{ for (j=y2+1; j<=i; j++) ...{ if ( m_bGrid[x2][j] ) ...{ k = 0; break; } k = 1; } if (k == 1) ...{ if (y1 > i) //第1点在空点右面或斜右 ...{ for (j=y1-1; j>=i; j--) //遍历第1点到空点间的所有点 ...{ if ( m_bGrid[x1][j] ) ...{ k = 0; break; } k = 2; //k=2表示通过第2步验证 } } else if (y1 < i) //空点在第1点下面 ...{ for (j=y1+1; j<=i; j++) ...{ if ( m_bGrid[x1][j] ) ...{ k = 0; break; } k = 2; } } } } else if (y2 == i) ...{ if (y1 > i) //第1点在空点右面或斜右 ...{ for (j=y1-1; j>=i; j--) //遍历第1点到空点间的所有点 ...{ if ( m_bGrid[x1][j] ) ...{ k = 0; break; } k = 2; //k=2表示通过第2步验证 } } else if (y1 < i) //空点在第1点下面 ...{ for (j=y1+1; j<=i; j++) ...{ if ( m_bGrid[x1][j] ) ...{ k = 0; break; } k = 2; } } } } if (k == 2) ...{ if (x1 > x2) //第1点在第2点下面或斜下 ...{ for (j=x1; j>=x2+1; j--) ...{ if ( m_bGrid[j][i] ) ...{ k = 0; break; } k = 3; } } else if (x1 < x2) ...{ for (j=x1; j<=x2-1; j++) ...{ if ( m_bGrid[j][i] ) ...{ k = 0; break; } k = 3; } } else if (x1 == x2) ...{ return TRUE; } } if (k == 3) return TRUE; } //-----------------遍历与第一个点在同一列上的所有点--------------------- for (i=0; i<9; i++) ...{ if ( !m_bGrid[i][y1] ) ...{ if (x2 > i) ...{ for (j=x2-1; j>=i; j--) ...{ if ( m_bGrid[j][y2] ) ...{ k = 0; break; } k = 1; } if (k == 1) ...{ if (x1 > i) ...{ for (j=x1-1; j>=i; j--) ...{ if ( m_bGrid[j][y1] ) ...{ k = 0; break; } k = 2; } } else if (x1 < i) ...{ for (j=x1+1; j<=i; j++) ...{ if ( m_bGrid[j][y1] ) ...{ k = 0; break; } k = 2; } } } } else if (x2 < i) ...{ for (j=x2+1; j<=i; j++) ...{ if ( m_bGrid[j][y2] ) ...{ k = 0; break; } k = 1; } if (k == 1) ...{ if (x1 > i) ...{ for (j=x1-1; j>=i; j--) ...{ if ( m_bGrid[j][y1] ) ...{ k = 0; break; } k = 2; } } else if (x1 < i) ...{ for (j=x1+1; j<=i; j++) ...{ if ( m_bGrid[j][y1] ) ...{ k = 0; break; } k = 2; } } } } else if (x2 == i) ...{ if (x1 > i) ...{ for (j=x1-1; j>=i; j--) ...{ if ( m_bGrid[j][y1] ) ...{ k = 0; break; } k = 2; } } else if (x1 < i) ...{ for (j=x1+1; j<=i; j++) ...{ if ( m_bGrid[j][y1] ) ...{ k = 0; break; } k = 2; } } } } if (k == 2) ...{ if (y1 > y2) ...{ for (j=y1; j>=y2+1; j--) ...{ if ( m_bGrid[i][j] ) ...{ k = 0; break; } k = 3; } } else if (y1 < y2) ...{ for (j=y1; j<=y2-1; j++) ...{ if ( m_bGrid[i][j] ) ...{ k = 0; break; } k = 3; } } else if (y1 == y2) ...{ return TRUE; } } if (k == 3) return TRUE; } } return FALSE;}