public final Group createGameBoard() {

        flow = new Timeline();
        Group group = new Group();

        Image image = new Image(getClass().
                getResourceAsStream("socialite.jpg"));

        int colCount = (int) (image.getWidth()
                / SlidingPuzzlePiece.getPuzzleSize());
        int rowCount = (int) (image.getHeight()
                / SlidingPuzzlePiece.getPuzzleSize());

        gameBoard = new SlidingPuzzleBoard(colCount, rowCount);

        for (int col = 0; col < colCount; col++) {
            for (int row = 0; row < rowCount; row++) {
                int rootX = col * SlidingPuzzlePiece.getPuzzleSize();
                int rootY = row * SlidingPuzzlePiece.getPuzzleSize();
                new SlidingPuzzlePiece(image, rootX, rootY,
                        gameBoard.getWidth(), gameBoard.getHeight(),
                        new SlidingPuzzleField(col, row, rootX, rootY));
            }
        }

        gameBoard.getChildren().addAll(SlidingPuzzlePiece.getPuzzlePiece());

        resetGameBoard();
        mergePuzzlePieces(gameBoard, SlidingPuzzlePiece.getPuzzlePiece());
        hideOneField();
        activateFields();

        final int i10 = 10;
        VBox displayField = new VBox(i10);
        displayField.setPadding(new Insets(i10, i10, i10, i10));
        displayField.getChildren().addAll(createMenu(), gameBoard);
        group.getChildren().addAll(displayField);

        return group;
    }