Exemplo n.º 1
0
        /// <summary>
        /// Khởi động tìm ô đánh tối ưu nhất và trả về
        /// </summary>
        public OCo KhoiDongComputer()
        {
            OCo OCoSeDanh = new OCo();

            // Nước đánh đầu tiên
            if (CacNuocDaDi.Count == 0)
            {
                OCoSeDanh.Row = BoardSize / 2;
                OCoSeDanh.Col = BoardSize / 2;
            }
            else
            {
                //Reset
                for (int i = 0; i < maxMove; i++)
                {
                    WinMove[i]   = new OCo();
                    PCMove[i]    = new OCo();
                    HumanMove[i] = new OCo();
                }

                depth = 0;

                // Tìm nước đi
                TimKiemNuocDi();

                // Kiểm tra và lưu lại nước đi tối ưu vào OCoSeDanh
                if (fWin)   // nước đi => chiến thắng
                {
                    OCoSeDanh.Row      = WinMove[0].Row;
                    OCoSeDanh.Col      = WinMove[0].Col;
                    OCoSeDanh.OfPlayer = WinMove[0].OfPlayer;
                }
                else        // chưa thể => chiến thắng
                {
                    // Duyệt và lưu điểm cho các ô cờ trong BangDiem
                    EvalChessBoard(OCo.CellValues.Player2, ref BangDiem);
                    OCo temp = new OCo();
                    // Lấy ô cờ có điểm cao nhất
                    temp               = BangDiem.MaxPos();
                    OCoSeDanh.Row      = temp.Row;
                    OCoSeDanh.Col      = temp.Col;
                    OCoSeDanh.OfPlayer = temp.OfPlayer;
                }
            }

            return(OCoSeDanh);
        }