2013-11-27 2 views
0

У меня есть этот код, чтобы порождать «дерево» в моей 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 булево для позже.

+0

Как вы определили, что деревья Арен» t нерестится? –

+1

Не совсем уверен, что вызывает проблему из того, что я читаю, однако утверждение 'if (treeX <256) {treeX = 256; } else ... 'не будет вести себя так, как я думаю, вы ожидаете. Если 'treeX' меньше 256, ваши деревья никогда не будут рисоваться, потому что вы использовали' else'. Основываясь на том, как вы устанавливаете 'treeX' на 256 внутри оператора' if', я предполагаю, что 'else' был непреднамеренным, и вы все равно хотите нарисовать дерево. –

+0

Также, глядя на ваш код, общая формула для индекса 'плитки ', заданная для X и Y, - это' плитки [x + y * width] '; но то, как вы индексируете плитки, кажется неправильным (или вы не полностью объяснили ожидаемое поведение). Почему «treeX» имеет диапазон от 0 до ширины * 5? Что происходит при добавлении и вычитании 'width'? –

ответ

1

Этот ответ объясняется тем, что я могу констатировать в комментариях.

код следующим образом:

if(treeX < 256) { 
    treeX = 256; 
} else { 

означает, что, если treeX меньше 256, код не даже попытку нарисовать дерево. Для того, чтобы нарисовать дерево, вам нужно удалить else (который игнорируется, когда ваша if утверждение оценивается как true), поэтому ваш while цикл выглядит следующим образом:

while(tCount < tRan) { 
    System.out.println(tRan); 
    tCount ++; 
    int treeX = treeSpawn.nextInt(width * 5); 

    if(treeX < 256) { 
     treeX = 256; 
    } 

    tiles[treeX] = Tile.LOG.getId(); 
    tiles[treeX + width] = Tile.LOG.getId(); 
    tiles[treeX + width + width] = Tile.LOG.getId(); 
    tiles[treeX - width] = Tile.LEAVES.getId(); 
    ... // Rest of the tree drawing code 
} 
+0

Спасибо, что было частью проблемы, также понял, что я рисовал случайное число деревьев в одном месте: / – user2687097

Смежные вопросы