Partage
  • Partager sur Facebook
  • Partager sur Twitter

Générer un plateau de taille variable

Sujet résolu
    2 décembre 2016 à 22:26:15

    Bonsoir,

    J'essaye de générer un plateau de jeu en 2D de taille précisée par l'utilisateur avec Java Fx pour un projet d'université.

    J'arrive à générer le damier mais je n'ai aucune idée de comment générer le numéro des lignes/colonnes.

    Voici mon code :

    package semaine2;
    
    import java.util.Random;
    import java.util.Scanner;
    
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.layout.GridPane;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.Rectangle;
    import javafx.stage.Stage;
    
    public class Test3 extends Application{
    	
    	public void start(Stage stage) {
    		GridPane grid = new GridPane();
    		Scanner sc = new Scanner(System.in);
    	    System.out.println("Saisissez la taille du plateau : ");
    	    int i = sc.nextInt();
    
    		
    		
    		for(int row=0; row<i; row++) {
    			for(int col=0; col<i; col++) {
    				Rectangle rec = new Rectangle();
    				rec.setWidth(50);
    				rec.setHeight(50);
    				if((row%2==0 && col%2==0) || (row%2 !=0 && col%2 !=0))
    					rec.setFill(Color.WHITE);
    				else
    					rec.setFill(Color.BLACK);
    				GridPane.setRowIndex(rec, row);
    				GridPane.setColumnIndex(rec, col);
    				grid.getChildren().addAll(rec);
    				
    			}
    		}
    		
    		Scene scene = new Scene(grid, row*50,col*50);
    		
    		stage.setTitle("Grid");
    		stage.setScene(scene);
    		stage.show();
    	
    	}
    	public static void main(String[] args) {
    		Application.launch(args);
    	}
    
    }
    



    J'aimerais arriver à un résultat similaire à l'image ci-dessous :

    plateau de jeu Merci d'avance pour toute aide :)

    -
    Edité par Davlin 2 décembre 2016 à 22:27:33

    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2016 à 10:06:19

      Bonjour,

      Un truc, du style :

          public void start(Stage stage) {
              GridPane grid = new GridPane();
              Scanner sc = new Scanner(System.in);
              System.out.println("Saisissez la taille du plateau : ");
              int i = sc.nextInt();
      
              for (int row = 0; row < (i + 1); row++) {
                  for (int col = 0; col < (i + 1); col++) {
                      if (col == 0 && row != i) {
                          textDisplay(grid, Integer.toString(row), row, col);
                      } else if (row != i) {
                          Rectangle rec = new Rectangle();
                          rec.setWidth(50);
                          rec.setHeight(50);
                          if ((row % 2 == 0 && col % 2 == 0) || (row % 2 != 0 && col % 2 != 0)) {
                              rec.setFill(Color.WHITE);
                          } else {
                              rec.setFill(Color.BLACK);
                          }
                          GridPane.setRowIndex(rec, row);
                          GridPane.setColumnIndex(rec, col);
                          grid.getChildren().addAll(rec);
                      }
                  }
                  if (row == i) {
                      for (int col = 0; col < (i + 1); col++) {
                          if (col == 0) {
                              textDisplay(grid, "/", row, col);
                          } else {
                              textDisplay(grid, Integer.toString(col - 1), row, col);
                          }
                      }
                  }
              }
      
              Scene scene = new Scene(grid, (i+1)*50, (i+1)*50);
      
              stage.setTitle(
                      "Grid");
              stage.setScene(scene);
      
              stage.show();
      
          }
      
          private void textDisplay(GridPane grid, String theText, int row, int col) {
              Text text = new Text();
              text.setWrappingWidth(50);
              text.setText(theText);
              text.setTextAlignment(TextAlignment.CENTER);
              GridPane.setRowIndex(text, row);
              GridPane.setColumnIndex(text, col);
              grid.getChildren().addAll(text);
          }

      Je ne suis pas un pros de javafx, mais si ça peut vous aidez ;).

      Code à modifier et a adapter, je montre seulement un exemple de ce qui est possible de faire.
      Bonne continuation.

      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2016 à 10:16:32

        pctronique a écrit:

        Bonjour,

        Un truc, du style :

            public void start(Stage stage) {
                GridPane grid = new GridPane();
                Scanner sc = new Scanner(System.in);
                System.out.println("Saisissez la taille du plateau : ");
                int i = sc.nextInt();
        
                for (int row = 0; row < (i + 1); row++) {
                    for (int col = 0; col < (i + 1); col++) {
                        if (col == 0 && row != i) {
                            textDisplay(grid, Integer.toString(row), row, col);
                        } else if (row != i) {
                            Rectangle rec = new Rectangle();
                            rec.setWidth(50);
                            rec.setHeight(50);
                            if ((row % 2 == 0 && col % 2 == 0) || (row % 2 != 0 && col % 2 != 0)) {
                                rec.setFill(Color.WHITE);
                            } else {
                                rec.setFill(Color.BLACK);
                            }
                            GridPane.setRowIndex(rec, row);
                            GridPane.setColumnIndex(rec, col);
                            grid.getChildren().addAll(rec);
                        }
                    }
                    if (row == i) {
                        for (int col = 0; col < (i + 1); col++) {
                            if (col == 0) {
                                textDisplay(grid, "/", row, col);
                            } else {
                                textDisplay(grid, Integer.toString(col - 1), row, col);
                            }
                        }
                    }
                }
        
                Scene scene = new Scene(grid, (i+1)*50, (i+1)*50);
        
                stage.setTitle(
                        "Grid");
                stage.setScene(scene);
        
                stage.show();
        
            }
        
            private void textDisplay(GridPane grid, String theText, int row, int col) {
                Text text = new Text();
                text.setWrappingWidth(50);
                text.setText(theText);
                text.setTextAlignment(TextAlignment.CENTER);
                GridPane.setRowIndex(text, row);
                GridPane.setColumnIndex(text, col);
                grid.getChildren().addAll(text);
            }

        Je ne suis pas un pros de javafx, mais si ça peut vous aidez ;).

        Code à modifier et a adapter, je montre seulement un exemple de ce qui est possible de faire.
        Bonne continuation.


        Merci de votre réponse je vais essayer ça et je reviendrai si j'ai un soucis :)

        Edit : C'est parfait c'est ce qu'il me fallait :) je vais l'adapter pour mon cas :) merci encore

        -
        Edité par Davlin 3 décembre 2016 à 10:25:17

        • Partager sur Facebook
        • Partager sur Twitter

        Générer un plateau de taille variable

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown