/// <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); }