JavaFX: Как создать поле для игры в стиле candy cru sh? - PullRequest
0 голосов
/ 16 февраля 2020

Я хотел бы создать 8 * 6 GridPane изображений, сгенерированных в СЛУЧАЙНОМ порядке каждый раз, когда я запускаю программу. Я все еще изучаю JavaFX и не могу понять, как это реализовать.

До сих пор я мог генерировать только 4 картинки подряд, а НЕ генерировать случайно.

Я пытаюсь научиться использовать структуру MVP.

У меня есть папка ресурсов с 4 картинками.

Мой основной класс:

public class Main extends Application {

@Override

public void start(Stage primaryStage) throws Exception
   {

    MyModel model = new MyModel();
    MyView view = new MyView();
    Presenter presenter = new Presenter(model, view);
    primaryStage.setTitle("Sweet Candy");
    Scene scene = new Scene(view);
    primaryStage.setScene(scene);
    primaryStage.setResizable(false);
    primaryStage.show();


}



public static void main(String[] args) {

    Application.launch(args);


 }

Мой класс модели:

public class MyModel {

public static final int candyNumber = 4;

private int candiesAmount;
private Random random;



public MyModel() {


    this.candiesAmount = 4;
    this.random = new Random();
}

public void play()
{
   candiesAmount = random.nextInt(candyNumber)+1;
}

public int getCandiesAmount() {
    return candiesAmount;
 }
 }

Мой класс просмотра:

public class MyView extends GridPane 

{

private Label lblTitle;
private Button btnPlay;
private Label lblTime;

private ImageView ivcandy1;
private ImageView ivcandy2;
private ImageView ivcandy3;
private ImageView ivcandy4;


public MyView() {
    initialiseNodes();
    layoutNodes();

}


private void initialiseNodes() {
    this.btnPlay = new Button();

 ivcandy1 = new ImageView("candy1.png");
 ivcandy2= new ImageView("candy2.png");
 ivcandy3 = new ImageView("candy3.PNG")
 ivcandy4 = new ImageView("candy4.PNG");

    lblTime = new Label("Time left:");

    btnPlay = new Button("Start");

}

    private void layoutNodes(){

     super.add(lblTime,4,0);
        GridPane.setMargin(lblTime, new Insets(10));


       super.add(ivcandy1, 1, 1);
        GridPane.setMargin(ivcandy1, new Insets(10));
        super.add(ivcandy2, 2, 1);
        GridPane.setMargin(ivcandy2, new Insets(10));
        super.add(ivcandy3, 3, 1);
        GridPane.setMargin(ivcandy3, new Insets(10));
        super.add(ivcandy4, 4, 1);
        GridPane.setMargin(ivcandy4, new Insets(10));





        super.add(btnPlay, 0, 3, 2, 1);
        GridPane.setHalignment(btnPlay, HPos.LEFT);
        GridPane.setMargin(btnPlay, new Insets(10, 10, 10, 10));


    }

    public Label getLblTitle () {
        return lblTitle;
    }

    public Button getBtnPlay () {
        return btnPlay;
    }`

public ImageView getIvcandy1() {
    return ivcandy1;
}

public ImageView getIvcandy2() {
    return ivcandy2;
}

public ImageView getIvcandy3() {
    return ivcandy3;
}

public ImageView getIvcandy4() {
    return ivcandy4;
}
}

Класс моего докладчика:

public class Presenter {


private MyView view;
private MyModel model;
private Random random;


public Presenter(MyModel model, MyView view) {

    this.model = model;
    this.view = view;
     addEventHandlers();
    updateView();
}



private void addEventHandlers() {

    view.getBtnPlay().setOnAction(new EventHandler<ActionEvent>() {


        @Override
        public void handle(ActionEvent actionEvent) {
            model.play();
            updateView();
        }
    });
}

private void updateView(){

view.getIvcandy1().setImage(new Image("candy" + model.getCandiesAmount() + ".png"));

 }


 }

Заранее спасибо, если кто-то может мне помочь.

1 Ответ

0 голосов
/ 16 февраля 2020

Вы можете использовать случайный класс, чтобы заполнить сетку случайными изображениями. Например, если вам нужны изображения:

import java.util.Random;

class Main
{
    public static void main(String[] args)
    {
        Random rand=new Random();
        for (int y=0; y<8; y++)
        {
            for (int x=0; x<7; x++)
            {
                int image=rand.nextInt(10);
                System.out.println("x="+x+", y="+y+", image="+image);
            }
        }
    }
}
...