public Position findMove() {
        
        if (this.mDepth > this.mMaxDepth) {
            return null;
        }
        
        this.mDepth++;
        
        Position computerMove = new Position();
        Position humanMove = new Position();
        
        int countMove = 0;
        
        this.mEvaluateBoard.resetScoreBoard();
        this.evaluate(Player.COMPUTER);
        
        // Get Computer steps with highest score
        Position temp = new Position();
        for (int i = 0; i < this.mMaxMove; i++) {
            temp = this.mEvaluateBoard.getMaxScorePosition();
            this.mComputerStepsStack[i] = temp;
            //this.mEvaluateBoard.setScore(temp.getRow(), temp.getCol(), 0);
        }
        
        // Try to turn steps of Computer
        countMove = 0;
        while (countMove < this.mMaxMove) {
            
            // Get step from the stack
            computerMove = this.mComputerStepsStack[countMove++];
            
            // Turn and change state of cell to held by COMPUTER
            this.mGomokuBoard.setCellState(computerMove.getRow(), computerMove.getCol(), CellState.COMPUTER);
            
            // Evaluate Human steps
            this.mEvaluateBoard.resetScoreBoard();
            this.evaluate(Player.HUMAN);
            
            // Get Human steps with highest score
            for (int i = 0; i < this.mMaxMove; i++) {
                temp = this.mEvaluateBoard.getMaxScorePosition();
                this.mHumanStepsStack[i] = temp;
                //this.mEvaluateBoard.setScore(temp.getRow(), temp.getCol(), 0);
            }
            
            // Try to turn steps of Human
            for (int i = 0; i < this.mMaxMove; i++) {
                
                // Get step from stack
                humanMove = this.mHumanStepsStack[i];
                
                // Turn and change state of cell to held by HUMAN
                this.mGomokuBoard.setCellState(humanMove.getRow(), humanMove.getCol(), CellState.HUMAN);
                
                // Check who is winner
                if (this.mGomokuBoard.checkWin(humanMove.getRow(), humanMove.getCol(), Player.COMPUTER) == true) {
                    this.mIsWinStep = true;
                }
                if (this.mGomokuBoard.checkWin(humanMove.getRow(), humanMove.getCol(), Player.HUMAN) == true) {
                    this.mIsWinStep = false;
                }
                
                if (this.mIsWinStep) {
                    this.mGomokuBoard.setCellState(computerMove.getRow(), 
                            computerMove.getCol(), CellState.EMPTY);
                    this.mGomokuBoard.setCellState(humanMove.getRow(), 
                            humanMove.getCol(), CellState.EMPTY);
                    return computerMove;
                } else {
                    this.mGomokuBoard.setCellState(computerMove.getRow(), 
                            computerMove.getCol(), CellState.EMPTY);
                    this.mGomokuBoard.setCellState(humanMove.getRow(), 
                            humanMove.getCol(), CellState.EMPTY);
                    break;
                }    
            }
        }
        
        return findMove();
    }