public int[] findBestMove(int d)
        {
            int          nuocHayVL = 10;
            List <int[]> coTheDi   = TimNuocTrongBanCo.tapCacNuocCoTheDi(game_board, false);
            List <int[]> coTheDi_2 = TimNuocTrongBanCo.tapCacNuocCoTheDi(game_board, true);
            int          maxScore  = int.MinValue;

            //int minScore = int.MaxValue;
            int[]        bestMove        = new int[] { };
            int          depht           = d;
            List <int[]> tapNuocDuocChon = new List <int[]>();
            bool         flag            = true;
            List <int[]> nuoc_hay_X      = new List <int[]>();
            List <int[]> nuoc_hay_O      = new List <int[]>();

            foreach (int[] move in coTheDi_2)
            {
                TinhToan.setBoard(move, game_board, 'X');
                if (TinhDiemBanCo.chacChanWin('X', game_board))
                {
                    TinhToan.removeBoard(move, game_board);
                    return(move);
                }
                TinhToan.removeBoard(move, game_board);
            }
            foreach (int[] move in coTheDi_2)
            {
                TinhToan.setBoard(move, game_board, 'O');
                if (TinhDiemBanCo.chacChanWin('O', game_board))
                {
                    tapNuocDuocChon.Add(move);
                    foreach (int[] move1 in coTheDi_2)
                    {
                        if (move1[0] != move[0] && move1[1] != move[1])
                        {
                            TinhToan.setBoard(move1, game_board, 'X');
                            if (!TinhDiemBanCo.chacChanWin('O', game_board))
                            {
                                tapNuocDuocChon.Add(move1);
                            }
                            TinhToan.removeBoard(move1, game_board);
                        }
                    }
                }
                TinhToan.removeBoard(move, game_board);
            }
            if (flag && tapNuocDuocChon.Count == 0)
            {
                foreach (int[] move in coTheDi_2)
                {
                    int VKL_1 = TinhDiemBanCo.nuocDacBietNewVersion(move[0], move[1], 'X', game_board);
                    if (VKL_1 < nuocHayVL && VKL_1 > 0)
                    {
                        nuoc_hay_X.Clear();
                        nuoc_hay_X.Add(move);
                        nuocHayVL = VKL_1;
                    }
                    else if (VKL_1 == nuocHayVL)
                    {
                        nuoc_hay_X.Add(move);
                    }
                }
                foreach (int[] move in coTheDi_2)
                {
                    int VKL_2 = TinhDiemBanCo.nuocDacBietNewVersion(move[0], move[1], 'O', game_board);
                    if (VKL_2 < nuocHayVL && VKL_2 > 0)
                    {
                        nuoc_hay_O.Clear();
                        nuoc_hay_O.Add(move);
                        nuocHayVL = VKL_2;
                    }
                }
                if (nuoc_hay_X.Count != 0 || nuoc_hay_O.Count != 0)
                {
                    tapNuocDuocChon = TinhToan.cong2List(nuoc_hay_X, nuoc_hay_O);
                }
            }
            if (tapNuocDuocChon.Count == 1)
            {
                return(tapNuocDuocChon[0]);
            }
            if (tapNuocDuocChon.Count == 0)
            {
                tapNuocDuocChon = TinhDiemBanCo.chonNuocToiUu(coTheDi, computerType, game_board);
            }
            foreach (int[] move in tapNuocDuocChon)
            {
                TinhToan.setBoard(move, game_board, 'X');
                int temp = Score(maxScore, int.MaxValue, depht, 'O', game_board);
                TinhToan.removeBoard(move, game_board);
                Console.WriteLine(move[0].ToString() + "," + move[1].ToString() + ":" + temp.ToString());
                if (temp == DuLieuPhanTich.MAXSCORE)
                {
                    return(move);
                }
                if (temp >= maxScore)
                {
                    bestMove = move;
                    maxScore = temp;
                }
            }
            return(bestMove);
        }