1

Hi ppeps(Broken english),

I'm working on a 2D Maze game. I need some help to store objects in my 2D array. I get a NullPointer on this one: this.currentMap[colsCount][rowsCount] = objects.get(col);. The main calls the LevelGenerator constructor.

 public final class LevelGenerator extends JFrame {

private HashMap<String, ItemObject> objects = new HashMap<>();
private ItemObject[][] currentMap;
private int HEIGHT = 320;
private int WIDHT = 480;

public JFrame frame = null;

public Level currentLevel = null;

private final List<Level> levels
        = new ArrayList<Level>() {
            {
                add(new Level001());
                add(new Level002());
                add(new Level003());
            }
        };

public LevelGenerator() {
    // Vul de frame
    //this.frame = frame;
    // Vul de objecten lijst
    //objects.put("B", new Bazooka());
    objects.put("", new EmptyTile());
    objects.put("W", new Wall());
    this.currentLevel = levels.get(0);

    this.Load();
}

/// Laad de map in
public void Load() {
    int rowsCount = 0;
    int colsCount = 0;

    for (String[] row : this.currentLevel.map) {
        for (String col : row) {
            this.currentMap[colsCount][rowsCount] = objects.get(col);
            colsCount += 1;
        }

        rowsCount += 1;
    }

    this.Start();
}

public void Start() {

    this.frame.setSize(this.HEIGHT, this.WIDHT);
    this.frame.setLayout(new GridLayout(15, 10));
    this.frame.add(this.currentLevel);
    this.frame.setResizable(false);
    this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.frame.setVisible(true);

}
}

Code of itemObject:

public class ItemObject {

public int x = 0;
public int y = 0;

public String image = "";

public void setImage(String image) {
    this.image = image;
}

}
Tony
  • 58
  • 9

2 Answers2

1

You haven't initialize ItemObject[][] currentMapanywhere. In the method start() you may add this line of code:

currentMap = new ItemObject[*# of rows*][*# of columns*];

Before you add any values to an array, you must first initialize the object.

Arman
  • 655
  • 2
  • 7
  • 23
  • Oke thanks i added that. Can you help me to show this on a JFrame? What is the best thing to use? – Tony May 22 '16 at 17:42
  • @Tony Is the ItemObject just a picture? If so, I would look at this: http://stackoverflow.com/questions/18871150/how-do-i-load-images-in-jframe-javaeclipse – Arman May 22 '16 at 17:50
0

Oke guys i fixed it. Now i want it on a JFrame. I can't figure it out... W = Wall and "" = emptytile. The code looks like this now:

Level:

public class Level extends JComponent {

final int ROWS = 10;
final int COLUMNS = 15;

public String[][] map = new String[ROWS][COLUMNS];
private ItemObject[][] loadedMap;

public void Load(HashMap<String, ItemObject> objects) {
    int rowsCount = 0;

    for (String[] row : this.map) {
        int colsCount = 0;

        for (String col : row) {
            this.loadedMap[rowsCount][colsCount] = objects.get(col);
            colsCount += 1;
        }

        rowsCount += 1;
    }
}

Levelgenerator:

 public final class LevelGenerator extends JFrame {

private HashMap<String, ItemObject> objects = new HashMap<>();
private int HEIGHT = 500;
private int WIDTH = 750;

public JFrame frame = null;
public Level currentLevel = null;

private final List<Level> levels
        = new ArrayList<Level>() {
            {
                add(new Level001());
                add(new Level002());
                add(new Level003());
            }
        };

public LevelGenerator(JFrame frame) {
    // Vul de frame
    this.frame = frame;
    // Vul de objecten lijst
    objects.put("B", new Bazooka());
    objects.put("", new EmptyTile());
    objects.put("W", new Wall());
    this.currentLevel = levels.get(0);

    this.Load();
}

/// Laad de map in
public void Load() {
    this.currentLevel.Load(objects);

    this.Start();
}

public void Start() {
    if (this.frame != null) {
        this.frame.setSize(this.WIDTH, this.HEIGHT);
        this.frame.setLayout(new GridLayout(15, 10));
        this.frame.add(this.currentLevel);
        this.frame.setResizable(false);
        this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.frame.setVisible(true);
    }
}

level001:

public class Level001 extends Level {

public Level001() {
    String[][] tiles = {    { "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W" },
                                { "W", "", "", "", "", "", "", "", "", "", "", "", "", "", "W" },
                                { "W", "", "", "", "", "", "", "", "", "", "", "", "", "", "W" },
                                { "W", "", "", "", "", "", "", "", "", "", "", "", "", "", "W" },
                                { "W", "", "", "", "", "", "", "", "", "", "", "", "", "", "W" },
                                { "W", "", "", "", "", "", "", "", "", "", "", "", "", "", "W" },
                                { "W", "", "", "", "", "", "", "", "", "", "", "", "", "", "W" },
                                { "W", "", "", "", "", "", "", "", "", "", "", "", "", "", "W" },
                                { "W", "", "", "", "", "", "", "", "", "", "", "", "", "", "W" },
                                { "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W" }
                            };

    super.map = tiles;
}

ItemObject:

public class ItemObject {

public int x = 0;
public int y = 0;

private String image = "";
private ImageIcon imageIcon;

public ImageIcon getImageIcon() {
    return new ImageIcon(this.image);
}

public void setImage(String url) {
   this.image = "/com/maze/images/" + url;
}  

emptyTile object;

public class EmptyTile extends ItemObject {

public EmptyTile(){

    this.setImage("Empty.png");

}

Wall object:

public class Wall extends ItemObject {

public Wall() {

    this.setImage("Wall.png");

}
Tony
  • 58
  • 9
  • Look at the link I commented, in my answer. That should help – Arman May 22 '16 at 18:06
  • you cant be running this as a chat board give the guy a points move on - he pointed to the beginning of your troubles; we are not supposed to do your whole software production – gpasch May 22 '16 at 18:19