どのように私は、手続き的にGUIを作成するために、JavaFXのクラスにオブジェクトを渡すのでしょうか?

デビッド:

だから私は周りを探してきたし、私の質問に一致する答えを見つけることができませんでした。この質問は回答されている場合に謝罪。

ここに私の2つのクラスがある:ゲームクラス

    package sample;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import java.awt.*;

public class Game extends Application{
    Player Player;
    Map Map;


    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Game");
        Group root = new Group();
        double x =0;
        double y = 0;
        for (Tile[] out: Map.Tiles_Array) {
            for (Tile in : out) {
                Rectangle rectangle = new Rectangle();
                rectangle.setHeight(10);
                rectangle.setWidth(10);
                rectangle.setX(x);
                rectangle.setY(y);
                root.getChildren().add(rectangle);
                x = x + 10;
            }
            y = y+ 10;
            x = 0;
        }



        VBox box = new VBox();
        root.getChildren().add(box);


        final Scene scene = new Scene(root);
        scene.setFill(null);
        primaryStage.setFullScreen(true);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    public Game(Map map , Player player) {
        Map= map;
        Player = player;

    }
    public static void main(String[] args) {
        launch(args);

    }


    void update(){


    }
}

``のMainMenuクラス

   package sample;
import javafx.stage.Stage;
import java.util.Scanner;

public class MainMenu {

    public static void main(String[] args) {
        Print("***************************************************");
        Print("* Welcome to the best Object Orientated game ever *");
        Print("***************************************************");
        Print("What is your Name?");
        var Name = User_Input();
        Print("Are you Male Or Female (M/F)");
        char Gender = Check_Gender(User_Input().charAt(0));
        Print("Whats is your age");
        int Age = Exception_Catcher();
        Print("Great, Now you need to choose your avatar that you will play with......");
        Print("Your choice is between Archer(A), Knight(K) or Wizard(W)");
        Characters Chosen_Character = Check_Choice(User_Input().charAt(0));

        Print(Name + "   " + Gender +"     "+ Age + "     " + Chosen_Character.Name); // debugging
        Player player1 = new Player(Name,Age,Gender,Chosen_Character);
        var Map = new Map(25,25 , player1);
        Game My_Game = new Game(Map,player1);



    }
    private static void Print(String input){ // Prints string it is given
        System.out.println(input);
    }
    private static String User_Input(){ // returns Users response
        Scanner s = new Scanner(System.in);
        return s.nextLine();
    }
    private static char Check_Gender(char Letter){
        Letter = Character.toUpperCase(Letter);
        if(Letter == 'M'){return Letter;}
        else if(Letter == 'F'){return Letter;}
        else{
            Print("Choose M or F");
            return Check_Gender(User_Input().charAt(0));
        }
    }
    private static Characters Check_Choice(char Letter){
        Letter = Character.toUpperCase(Letter);
        if(Letter == 'A'){
            return new Archer(50,2,10);
        }
        else if(Letter == ('K')){
            return new Knight(100,1,20);
        }
        else if(Letter ==('W')){
            return new Wizard(25,5,5);
        }
        else{
            Print("Choose one of the correct options:Archer(A), Knight(K) or Wizard(W)");
            return Check_Choice(User_Input().charAt(0));
        }

    }
    private static int Exception_Catcher(){ //exception handling for when the user enters a non numerical value
        try{
             return Check_Age(Integer.parseInt(User_Input()));
        }
        catch (Exception e){
            Print("That's not a correct number format, try again");
            return Exception_Catcher();
        }
    }
    private static int Check_Age(int Age){

            if (Age <= 0) {
                Print("You are not alive apparently");
                return Exception_Catcher();
            } else if (Age > 120) {
                Print("You are not that old!! stop being silly");
                return Exception_Catcher();
            } else {
                return Age;
            }


    }

}

私のMapオブジェクトとプレーヤーオブジェクトが作成されるならば、私は手続き的ゲームグラフィックスを作成するために、ゲームにそれを渡したいです。私は、デフォルトのステージを作成し、それが複数の例外をスローし、引数として渡したときに、それはしかし、「ステージ」を必要とするしかし方法スタート呼び出すためにゲームのクラスを構築してみました。

c0der:

あなたはからあなたのゲームを開始する必要があるApplication.launch(args)ので、次のような構造を考慮してください。

public class Game extends Application{

    private Player player;
    private Map map;

    @Override
    public void start(Stage primaryStage) throws Exception {

        MainMenu mm = new MainMenu();
        player = mm.getPlayer();
        map = mm.getMap();
        //rest of the code remains the same 
    }

    public static void main(String[] args) {
        launch(args);
    }
}

MainMenuユーザの入力を受け取り、構築のみPlayerMap

public class MainMenu {

    private String name,age,gender,chosenCharacter;
    private final Player player;
    private final Map map;

    public MainMenu()  {
        getUserInput();
        player = new Player(name,age,gender,chosenCharacter);
        map = new Map(25,25 , player);
    }

    private void getUserInput(){ // returns Users response
        //todo
    }

    Player getPlayer() {
        return player;
    }

    Map getMap() {
        return map;
    }
}

より良いオプションは、GUIを使用してユーザー入力を取得することです:

public class GetUserInput {

    private Player player;
    private Map map;
    private final TextField nameTf,  ageTf, genderTf,  characterTf;

     GetUserInput() {

         Dialog<Void> dialog = new Dialog<>();
         dialog.setTitle("Game Setting");
         dialog.setHeaderText("Please enter your prefrences");

         // Set the button types.
         ButtonType buttonType = new ButtonType("OK", ButtonData.OK_DONE);
         dialog.getDialogPane().getButtonTypes().addAll(buttonType, ButtonType.CANCEL);

         //Add event handler to ok button 
         Button okButton = (Button) dialog.getDialogPane().lookupButton(buttonType);
         okButton.setOnAction(e-> processInput());
         //todo hanlde response when cancel button is pressed 

         // Create labels and fields.
         GridPane grid = new GridPane();
         grid.setHgap(10);
         grid.setVgap(10);
         grid.setPadding(new Insets(20, 150, 10, 10));

         nameTf = new TextField();
         nameTf.setPromptText("Name");

         ageTf = new TextField();
         ageTf.setPromptText("Age");

         genderTf = new TextField();
         genderTf.setPromptText("Gender");

         characterTf = new TextField();
         characterTf.setPromptText("Character");
         //todo add validation to all text fields

         grid.add(new Label("Name:"), 0, 0);
         grid.add(nameTf, 1, 0);
         grid.add(new Label("Age:"), 0, 1);
         grid.add(ageTf, 1, 1);
         grid.add(new Label("Gender:"), 0, 2);
         grid.add(genderTf, 1, 2);
         grid.add(new Label("Character:"), 0, 3);
         grid.add(characterTf, 1, 3);

         dialog.getDialogPane().setContent(grid);

         // Request focus on the name field
         Platform.runLater(() -> nameTf.requestFocus());
         dialog.showAndWait();
    }

    private void processInput() {
        String name = nameTf.getText();
        String age = ageTf.getText();
        String gender = genderTf.getText();
        String chosenCharacter = characterTf.getText();

        player = new Player(name,age,gender,chosenCharacter);
        map = new Map(25,25 , player);
    }

    Player getPlayer() {
        return player;
    }

    Map getMap() {
        return map;
    }
}

とによって、それを使用します。

    GetUserInput getUserInput = new GetUserInput();
    player = getUserInput.getPlayer();
    map = getUserInput.getMap();

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=277476&siteId=1