У меня есть этот код, чтобы порождать «дерево» в моей Java-игре; он работает и порождает «дерево». Я решил создать генератор случайных чисел до 30, который породил бы множество «деревьев». Однако, когда я запускаю свой код, я не получаю ошибки, но «деревья» не появляются. Алгоритм нереста можно найти ниже.Случайный алгоритм генерирования не генерируется правильно
private void generateLevel() {
int dungeonCoord = dungeonSpawn.nextInt(height * width);
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
tiles[x + y * width] = Tile.GRASS.getId();
tiles[dungeonCoord] = Tile.TUNNEL.getId();
while(tCount < tRan) {
System.out.println(tRan);
tCount ++;
int treeX = treeSpawn.nextInt(width * 5);
if(treeX < 256) {
treeX = 256;
}else {
tiles[treeX] = Tile.LOG.getId();
tiles[treeX + width] = Tile.LOG.getId();
tiles[treeX + width + width] = Tile.LOG.getId();
tiles[treeX - width] = Tile.LEAVES.getId();
tiles[treeX - width] = Tile.LEAVES.getId();
tiles[treeX - width - width] = Tile.LEAVES.getId();
tiles[treeX - width - width + 1] = Tile.LEAVES.getId();
tiles[treeX - width - width - 1] = Tile.LEAVES.getId();
tiles[treeX - width + 1] = Tile.LEAVES.getId();
tiles[treeX - width + 2] = Tile.LEAVES.getId();
tiles[treeX - width - 1] = Tile.LEAVES.getId();
tiles[treeX - width - 2] = Tile.LEAVES.getId();
tiles[treeX + 1] = Tile.LEAVES.getId();
tiles[treeX - 1] = Tile.LEAVES.getId();
tiles[treeX - width - width - width] = Tile.LEAVES.getId();
}
}
}
}
}
Как все декларируется:
private byte[] tiles;
public int width;
public int height;
public boolean generateTree = true;
Random treeSpawn = new Random();
Random dungeonSpawn = new Random();
Random numTrees = new Random();
int tCount = 0;
int tRan = numTrees.nextInt(30);
treeSpawn
булево для позже.
Как вы определили, что деревья Арен» t нерестится? –
Не совсем уверен, что вызывает проблему из того, что я читаю, однако утверждение 'if (treeX <256) {treeX = 256; } else ... 'не будет вести себя так, как я думаю, вы ожидаете. Если 'treeX' меньше 256, ваши деревья никогда не будут рисоваться, потому что вы использовали' else'. Основываясь на том, как вы устанавливаете 'treeX' на 256 внутри оператора' if', я предполагаю, что 'else' был непреднамеренным, и вы все равно хотите нарисовать дерево. –
Также, глядя на ваш код, общая формула для индекса 'плитки ', заданная для X и Y, - это' плитки [x + y * width] '; но то, как вы индексируете плитки, кажется неправильным (или вы не полностью объяснили ожидаемое поведение). Почему «treeX» имеет диапазон от 0 до ширины * 5? Что происходит при добавлении и вычитании 'width'? –