Ich arbeite an der Welt Generation für mein Spiel und es gibt mehrere Welten, die mit einer Hashmap mit dem Schlüssel als der Planet & ein Arraylist speichert die Kacheln für jeden Planeten speichern. Es scheint zu klären oder nicht die Arraylist innerhalb der Hashmap zu setzen. Ich habe beschlossen, dies hier zu veröffentlichen, weil mehr Augen definitiv helfen werden. Ich benutze slick2d, so dass es den Code gibt, der das Betreten und Verlassen des Planeten behandelt.ArrayList Clearing irgendwie und ich weiß nicht warum
WorldGenerator world = new WorldGenerator(25, p);
public static int worldType = 0;
public Planet planet;
HashMap<Planet, ArrayList<Tile>> worlds = new HashMap<>();
@Override
public void enter(GameContainer container, StateBasedGame game) {
System.out.println("Worlds: " + worlds.size());
if (worlds.containsKey(planet)) {
System.out.println("Contains key");
worlds.get(planet).size();
if (worlds.get(planet).isEmpty()) {
System.out.println("ArrayList Empty");
world.generate(worldType);
worlds.put(planet, world.tiles);
} else {
System.out.println("ArrayList has tiles");
world.tiles = worlds.get(planet);
}
} else {
System.out.println("No key found");
world.generate(worldType);
worlds.put(planet, world.tiles);
}
}
@Override
public void leave(GameContainer container, StateBasedGame game) {
worlds.replace(planet, world.tiles); // adds changes the player makes (block breaks, etc)
world.clear();
}
EDIT:
public class WorldGenerator {
float size, height = 40;
Player player;
public boolean isDone;
ArrayList<Tile> tiles = new ArrayList<>();
public void generate(int type) {
isDone = false;
for (int i = 0; i < height; i++) {
for (int j = 0; j < size; j++) {
if (i > 15) {
Random r = new Random();
int rnd = 1 + r.nextInt((10 - 1) + 1);
if (rnd >= 8 && r.nextBoolean()) {
tiles.add(new TileIronOre(j * 32, i * 32));
} else {
tiles.add(new TileStone(j * 32, i * 32));
}
} else if (i > 11) {
tiles.add(new TileDirt(j * 32, i * 32));
} else if (i == 11) {
tiles.add(new TileGrass(j * 32, i * 32));
} else {
}
}
}
System.out.println(tiles.size() + " tiles");
isDone = true;
}
public void clear() {
tiles.clear();
}
können Sie Probe Eingabe/Ausgabe geben, die Sie versucht haben? –
Natürlich wird es nicht gesetzt, da Sie es nicht richtig einstellen. –
@DeendayalGarg Können Sie bitte erklären, wie Sie es richtig einstellen? – user2580555