public final VBox createMenu() {

        flow.play();

        final int i20 = 20;
        VBox menuBox = new VBox(i20);

        final MenuBar menuBar = new MenuBar();

        final MenuItem newMenu = MenuItemBuilder.create().text("New").build();
        newMenu.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(final ActionEvent t) {
                newGame();
            }
        });

        final MenuItem mergeMenu = MenuItemBuilder.create().text("Merge")
                .build();
        mergeMenu.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(final ActionEvent t) {
                newGame();
                mergePuzzlePieces(gameBoard,
                        SlidingPuzzlePiece.getPuzzlePiece());
                flow.playFromStart();
            }
        });

        final MenuItem resolveMenu = MenuItemBuilder.create().text("Resolve")
                .build();
        resolveMenu.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(final ActionEvent actionEvent) {
                for (final SlidingPuzzlePiece puzzlePiece : SlidingPuzzlePiece
                        .getPuzzlePiece()) {
                    puzzlePiece.setInactive();
                    flow.getKeyFrames().add(
                            new KeyFrame(Duration.seconds(1), new KeyValue(
                                    puzzlePiece.translateXProperty(), 0),
                                    new KeyValue(puzzlePiece
                                            .translateYProperty(), 0)));
                }
                flow.playFromStart();
            }
        });

        MenuItem easyLevel = MenuItemBuilder.create().text("Easy").build();
        easyLevel.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(final ActionEvent t) {
                final int i100 = 100;
                final int i10 = 10;
                SlidingPuzzlePiece.setPuzzleSize(i100);
                setMergeCount((gameBoard.getCols() * gameBoard.getRows())
                        * i10);
                newGame();
            }
        });
        MenuItem normalLevel = MenuItemBuilder.create().text("Normal").build();
        normalLevel.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(final ActionEvent t) {
                final int i75 = 75;
                final int i50 = 50;
                SlidingPuzzlePiece.setPuzzleSize(i75);
                setMergeCount((gameBoard.getCols() * gameBoard.getRows())
                        * i50);
                newGame();
            }
        });
        MenuItem hardLevel = MenuItemBuilder.create().text("Hard").build();
        hardLevel.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(final ActionEvent t) {
                final int i50 = 50;
                final int i100 = 100;
                SlidingPuzzlePiece.setPuzzleSize(i50);
                setMergeCount((gameBoard.getCols() * gameBoard.getRows())
                        * i100);
                newGame();
            }
        });
        MenuItem harderLevel = MenuItemBuilder.create().text("Harder").build();
        harderLevel.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(final ActionEvent t) {
                final int i25 = 25;
                final int i200 = 200;
                SlidingPuzzlePiece.setPuzzleSize(i25);
                setMergeCount((gameBoard.getCols() * gameBoard.getRows())
                        * i200);
                newGame();
            }
        });

        final Menu levelMenu = MenuBuilder.create().text("GameLevel")
                .items(easyLevel, normalLevel, hardLevel, harderLevel).build();

        final MenuItem highscoreMenu = MenuItemBuilder.create()
                .text("Highscore").build();
        highscoreMenu.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(final ActionEvent t) {
                Stage stage = new Stage();
                Scene highscore = new Scene(createHighscore());
                stage.setTitle("Sliding Puzzle - Highscores");
                stage.sizeToScene();
                stage.setScene(highscore);
                stage.toFront();
                stage.show();
                thisStage = stage;
                thisStage.centerOnScreen();
            }
        });

        Menu menuGame = MenuBuilder.create().text("Game")
                .items(newMenu, mergeMenu, resolveMenu).build();
        Menu menuOptions = MenuBuilder.create().text("Options")
                .items(levelMenu, highscoreMenu).build();

        menuBar.getMenus().addAll(menuGame, menuOptions);
        menuBox.getChildren().addAll(menuBar);
        menuBar.isCache();

        return menuBox;
    }