在GridPane中放置未知数量的节点

时间:2016-05-13 07:52:48

标签: eclipse javafx-8 maze gridpane

我正在从文本文件制作迷宫。文本文件在单独的行上包含两个整数。这些决定了许多行和列。然后,文本文件通过使用'#'形成迷宫。对于墙壁,' '通过,' *'对于球员的起始位置和' - '出口。当我启动程序时,我能够选择文件,但节点不会在行和列中很好地对齐。好像他们都在同一个地方堆成一堆。有什么提示吗?

package application;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javafx.application.Application;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;

public class Main extends Application {
  LabyrintRute[][] Labyrint;
  int X;
  int Y;
  int startx;
  int starty;
  Spiller spilleren;

  @Override
  public void start(Stage primaryStage) {
      try {
        GridPane root = new GridPane();
        Scene scene = new Scene(root, X*100, Y*100, Color.BLACK);
        Spiller spilleren = new Spiller(startx, starty);
        filLeser();

        root.add(spilleren.getUtseende(), spilleren.getxPossisjon(), spilleren.getyPossisjon());
        for(int x = 1; x<X; x++){
            for(int y = 1; y<Y; y++){
        root.add(Labyrint[x][y].getUtseende(), Labyrint[x][y].getxKoordinat(), Labyrint[x][y].getyKoordinat());
        }
        }
        scene.setOnKeyPressed(new FilLytter(this));
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setTitle("Labyrintspill");
        primaryStage.setScene(scene);
        primaryStage.show();
    } catch(Exception e) {
        e.printStackTrace();
    }
}

public void filLeser() {
    String teksten = "";
    File fila;

    FileChooser filvelger = new FileChooser();
    filvelger.setTitle("Åpne en tekstfil");
    filvelger.getExtensionFilters().add(new ExtensionFilter("Text Files", "*.txt"));
    fila = filvelger.showOpenDialog(null);

    try (Scanner filleser = new Scanner(fila)) {
        X = filleser.nextInt();
        Y = filleser.nextInt();
        teksten = filleser.nextLine();

        Labyrint = new LabyrintRute [X][Y];
        while (filleser.hasNext()) {
            teksten = filleser.nextLine();
            for (int i = 1;i< X;i++) {
                for (int rad = 1; rad < Y; rad++){
                char tegn = teksten.charAt(i);

                switch (tegn) {
                case '#':
                    Labyrint[i][rad] = new Vegg(i, rad);
                    break;
                case ' ':
                    Labyrint[i][rad] = new Gang(i, rad);
                    break;
                case '-':
                    Labyrint[i][rad] = new Utgang(i, rad);
                    break;
                case '*':
                    Labyrint[i][rad] = new Gang(i, rad);
                    startx = i;
                    starty = rad;
                    break;  
                }
            }
            }
            }
        } catch (FileNotFoundException e) {
            System.out.println("Kan ikke åpne fila!");
            e.printStackTrace();
        }
    }

public void flyttSpiller(int deltax, int deltay) {
    int nyx = spilleren.getxPossisjon() + deltax;
    int nyy = spilleren.getyPossisjon() + deltay;
    Labyrint[nyx][nyy].flyttHit(spilleren);

}

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

&#34; Vegg&#34;(墙),&#34; Gang&#34;(段落)和&#34; Utgang&#34;(退出)方法都是&#34;&#34; ; Labyrintrute&#34;方法:

package application;

import javafx.scene.Node;

public abstract class LabyrintRute {
private int xKoordinat;
private int yKoordinat;

public LabyrintRute(int xKoordinat, int yKoordinat) {
    this.xKoordinat = xKoordinat;
    this.yKoordinat = yKoordinat;
}

public int getxKoordinat() {
    return xKoordinat;
}

public int getyKoordinat() {
    return yKoordinat;
}

public abstract void flyttHit(Spiller spilleren);

public abstract Node getUtseende();

}

&#34; vegg&#34;(墙),&#34; gang&#34;(段落)和&#34; utgang&#34;(退出)方法都非常相似。所以我只发布其中一个:

package application;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import javafx.scene.Node;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;

public class Utgang extends LabyrintRute {
private Node utseende;

public Utgang(int xKoordinat, int yKoordinat) {
    super(xKoordinat, yKoordinat);
    utseende = new Rectangle(10, 10, Color.BLACK);
}

@Override
public void flyttHit(Spiller spilleren) {
    spilleren.setxPossisjon(getxKoordinat());
    spilleren.setyPossisjon(getyKoordinat());
    JFrame ramme = new JFrame();
    JOptionPane.showMessageDialog(ramme, "Gratulerer! Du fant veien ut :D");
    System.exit(0);
}

@Override
public Node getUtseende() {
    return utseende;
}
}

0 个答案:

没有答案