//三三禁手 
bool checkThreeThree(int row, int col, int player)
{
    
    int directions[4][2] = { {0,1},{1,0},{1,1},{1,-1} };//水平+垂直+对角线
    int size = 8;
    int num = 0;;//初始数量为0
    for (int i = 0; i < 4; i++) {
        int dx = directions[i][0]; //
        int dy = directions[i][1];//
        int beginRow = row - (size - 1) * dx;
        int beginCol = col - (size - 1) * dy;
        for (int j = 0; j <= (size - 1); j++) {
            int begin = j;
            int end = j + (size - 1);
            int bRow = beginRow + j * dx;
            int bCol = beginCol + j * dy;
            int blankNum = 0;
            int currentNum = 0;
            int other = 0;
            int flag = 1;
            for (int k = begin; k <= end; k++) {
                int forR = bRow + (k - begin) * dx;
                int forC = bCol + (k - begin) * dy;
                if (ifRange(forR, forC)) {  //判断再范围之内
                    if (k >= begin + 2 && k <= end - 2) {
                        if (board[forR][forC] == player) {//中间四个必须四个本方
                            currentNum++;
                        }
                        if (board[forR][forC] == 0) {//中间四个必须四个本方
                            blankNum++;
                        }
                    }

                    if (k == begin + 1 || k == end - 1) {
                        int data = board[forR][forC];
                        if (data != 0) {//第二个倒数第二个必须没有棋子
                            flag = 0;
                            break;
                        }
                    }

                    if (k == begin|| k == end) {
                        int data = board[forR][forC];
                        if (data == player) {//第二个倒数第二个必须没有棋子
                            flag=0;
                            break;
                        }
                    }


                }

            }
            if (flag == 1 && blankNum == 1 && currentNum == 3) {
                num++;
            }
           

        }
    }


    if (num >= 2)
        return true;

    return false;
}


//四四禁手 
bool checkFourFour(int row, int col, int player)
{
    int directions[4][2] = { {0,1},{1,0},{1,1},{1,-1} };//水平+垂直+对角线
    int size = 8;
    int num = 0;;//初始数量为0
    for (int i = 0; i < 4; i++) {
        int dx = directions[i][0]; //
        int dy = directions[i][1];//
        int beginRow = row - (size - 1) * dx;
        int beginCol = col - (size - 1) * dy;


        for (int j = 0; j <= (size - 1); j++) {
            int begin = j;
            int end = j + (size - 1);
            int bRow = beginRow + j * dx;
            int bCol = beginCol + j * dy;
            int blankNum = 0;
            int currentNum = 0;
            int other = 0;
            int flag = 1;
            for (int k = begin; k <= end; k++) {
                int forR = bRow + (k - begin) * dx;
                int forC = bCol + (k - begin) * dy;

                    if (ifRange(forR, forC)) {  //判断再范围之内
                        if (k >= begin + 2 && k <= end - 2) {
                            if (board[forR][forC] == player) {//中间四个必须四个本方
                                currentNum++;
                            }
                        }
                        if (k == begin + 1 || k == end - 1) {
                            int data= board[forR][forC];
                            if (data== 0) {//第二个倒数第二个必须没有棋子
                                blankNum++;
                            }
                        }
                    }


                    if (k == begin || k == end) {
                        if (ifRange(forR, forC)) {
                            if (board[forR][forC] != player) {
                                other++;
                            }
                        }
                        else {
                            if (k == -1) {
                                other++;
                            }

                            if (k == end + 1) {
                                other++;
                            }
                        }
                    }
                }

                if (flag && blankNum == 2 && currentNum == 4 && other >= 1) {
                    num++;
                }

            }
        }
      
    
    if (num >= 2)
        return true;

    return false;
}

//长连 
bool checkLong(int row, int col, int dx, int dy, int player)
{
    int count = 1;
    for (int i = 1; i <= 5; i++)
    {
        int r = row + i * dx;
        int c = col + i * dy;
        if (r >= 0 && r < SIZE && c >= 0 && c < SIZE && board[r][c] == player)
        {
            count++;
        }
        else
        {
            break;
        }
    }
    for (int i = 1; i <= 5; i++)
    {
        int r = row - i * dx;
        int c = col - i * dy;
        if (r >= 0 && r < SIZE && c >= 0 && c < SIZE && board[r][c] == player)
        {
            count++;
        }
        else
        {
            break;
        }
    }
    return count >= 6;
}

//长连禁手 
bool checkLongLink(int row, int col, int player)
{
    int directions[4][2] = { {0,1},{1,0},{1,1},{1,-1} };
    for (int i = 0; i < 4; i++)
    {
        if (checkLong(row, col, directions[i][0], directions[i][1], player))
        {
            return true;
        }
    }
    return false;
}


//三三禁手 
bool checkThreeThree(int row, int col, int player)
{
    
    int directions[4][2] = { {0,1},{1,0},{1,1},{1,-1} };//水平+垂直+对角线
    int size = 8;
    int num = 0;;//初始数量为0
    for (int i = 0; i < 4; i++) {
        int dx = directions[i][0]; //
        int dy = directions[i][1];//
        int beginRow = row - (size - 1) * dx;
        int beginCol = col - (size - 1) * dy;
        for (int j = 0; j <= (size - 1); j++) {
            int begin = j;
            int end = j + (size - 1);
            int bRow = beginRow + j * dx;
            int bCol = beginCol + j * dy;
            int blankNum = 0;
            int currentNum = 0;
            int other = 0;
            int flag = 1;
            for (int k = begin; k <= end; k++) {
                int forR = bRow + (k - begin) * dx;
                int forC = bCol + (k - begin) * dy;
                if (ifRange(forR, forC)) {  //判断再范围之内
                    if (k >= begin + 2 && k <= end - 2) {
                        if (board[forR][forC] == player) {//中间四个必须四个本方
                            currentNum++;
                        }
                        if (board[forR][forC] == 0) {//中间四个必须四个本方
                            blankNum++;
                        }
                    }

                    if (k == begin + 1 || k == end - 1) {
                        int data = board[forR][forC];
                        if (data != 0) {//第二个倒数第二个必须没有棋子
                            flag = 0;
                            break;
                        }
                    }

                    if (k == begin|| k == end) {
                        int data = board[forR][forC];
                        if (data == player) {//第二个倒数第二个必须没有棋子
                            flag=0;
                            break;
                        }
                    }


                }

            }
            if (flag == 1 && blankNum == 1 && currentNum == 3) {
                num++;
            }
           

        }
    }


    if (num >= 2)
        return true;

    return false;
}


//四四禁手 
bool checkFourFour(int row, int col, int player)
{
    int directions[4][2] = { {0,1},{1,0},{1,1},{1,-1} };//水平+垂直+对角线
    int size = 8;
    int num = 0;;//初始数量为0
    for (int i = 0; i < 4; i++) {
        int dx = directions[i][0]; //
        int dy = directions[i][1];//
        int beginRow = row - (size - 1) * dx;
        int beginCol = col - (size - 1) * dy;


        for (int j = 0; j <= (size - 1); j++) {
            int begin = j;
            int end = j + (size - 1);
            int bRow = beginRow + j * dx;
            int bCol = beginCol + j * dy;
            int blankNum = 0;
            int currentNum = 0;
            int other = 0;
            int flag = 1;
            for (int k = begin; k <= end; k++) {
                int forR = bRow + (k - begin) * dx;
                int forC = bCol + (k - begin) * dy;

                    if (ifRange(forR, forC)) {  //判断再范围之内
                        if (k >= begin + 2 && k <= end - 2) {
                            if (board[forR][forC] == player) {//中间四个必须四个本方
                                currentNum++;
                            }
                        }
                        if (k == begin + 1 || k == end - 1) {
                            int data= board[forR][forC];
                            if (data== 0) {//第二个倒数第二个必须没有棋子
                                blankNum++;
                            }
                        }
                    }


                    if (k == begin || k == end) {
                        if (ifRange(forR, forC)) {
                            if (board[forR][forC] != player) {
                                other++;
                            }
                        }
                        else {
                            if (k == -1) {
                                other++;
                            }

                            if (k == end + 1) {
                                other++;
                            }
                        }
                    }
                }

                if (flag && blankNum == 2 && currentNum == 4 && other >= 1) {
                    num++;
                }

            }
        }
      
    
    if (num >= 2)
        return true;

    return false;
}

//长连 
bool checkLong(int row, int col, int dx, int dy, int player)
{
    int count = 1;
    for (int i = 1; i <= 5; i++)
    {
        int r = row + i * dx;
        int c = col + i * dy;
        if (r >= 0 && r < SIZE && c >= 0 && c < SIZE && board[r][c] == player)
        {
            count++;
        }
        else
        {
            break;
        }
    }
    for (int i = 1; i <= 5; i++)
    {
        int r = row - i * dx;
        int c = col - i * dy;
        if (r >= 0 && r < SIZE && c >= 0 && c < SIZE && board[r][c] == player)
        {
            count++;
        }
        else
        {
            break;
        }
    }
    return count >= 6;
}

//长连禁手 
bool checkLongLink(int row, int col, int player)
{
    int directions[4][2] = { {0,1},{1,0},{1,1},{1,-1} };
    for (int i = 0; i < 4; i++)
    {
        if (checkLong(row, col, directions[i][0], directions[i][1], player))
        {
            return true;
        }
    }
    return false;
}

更多推荐