protected Point FindMove() { Point move; searchtimes = 0; if (turnCount == 0) { return(new Point(7, 7)); } else if (turnCount == 1) { Random rand = new Random(); for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { if (board[i, j] != PieceType.Empty) { return(new Point(i + 1, j + 1)); } } } return(new Point(7, 7)); } else { BoardOfFIR newBd = new BoardOfFIR(); newBd.boardCopy(this); Evalute e = getEvalute(); newBd.FindBestMove(-10000, 10000, AIdepth, turn, out move, e); //ShowInfo(newBd.searchtimes); } return(move); }
bool isOpenThree(Point p, direction dir, PieceType color) { int left, right, mid; int leftC, rightC; BoardOfFIR newBd = new BoardOfFIR(); Point tP; mid = countLine(p, dir, color, out left, out right) + 1; tP = p; if ((fixPosition(ref tP, dir, false, left + 1) && (int)board[tP.X, tP.Y] >= 2)) { leftC = countLine(tP, dir, color, false); if ((mid + leftC) == 3) { newBd.boardCopy(this); newBd.board[p.X, p.Y] = color; if (newBd.isOpenFour(tP, dir, color) && (!newBd.isBanned(tP) || color != PieceType.Black)) { return(true); } } } tP = p; if ((fixPosition(ref tP, dir, true, right + 1) && (int)board[tP.X, tP.Y] >= 2)) { rightC = countLine(tP, dir, color, true); if ((mid + rightC) == 3) { newBd.boardCopy(this); newBd.board[p.X, p.Y] = color; if (newBd.isOpenFour(tP, dir, color) && (!newBd.isBanned(tP) || color != PieceType.Black)) { return(true); } } } return(false); }