private boolean processAdjoiningCells (Point selectedCell) {
        java.util.List<Point> adjoiningCells = getAdjoiningCells(selectedCell);
        for (Point adjoiningCell : adjoiningCells) {
            if (field[adjoiningCell.x][adjoiningCell.y] instanceof EndCell) {
                field[adjoiningCell.x][adjoiningCell.y].setParent(selectedCell);
                return true;
            }
            countF(adjoiningCell);
            if (isCellOpened(adjoiningCell)) {
                int adjoiningCellG = ((EmptyCell) field[adjoiningCell.x][adjoiningCell.y]).getG();
                int selectedCellG = ((EmptyCell) field[selectedCell.x][selectedCell.y]).getG();

                int transferG;
                if (adjoiningCell.x == selectedCell.x || adjoiningCell.y == selectedCell.y) {
                    transferG = DIRECT_TRANSFER;
                } else {
                    transferG = DIAGONAL_TRANSFER;
                }

                int summaryG = selectedCellG + transferG;

                if (summaryG < adjoiningCellG) {
                    field[adjoiningCell.x][adjoiningCell.y].setParent(selectedCell);
                    countF(adjoiningCell);
                }
            } else {
                addToOpenedCells(adjoiningCell);
                countF(adjoiningCell);
            }
        }
        return false;
    }