2016-09-18 14 views
-1

Я пытаюсь создать лабиринт с помощью Union Find, но я не могу удалить стены. Это то, что я получил до сих пор.Draw останавливается, если

private void createMaze (int cells, Graphics g) { 
    s = new int[cells*cells]; //No unions yet setting all to -1 
    for(int i = 0; i < cells*cells; ++i){ 
     s[i] = -1; 
    } 
    g.setColor(Color.yellow); 
    random = new Random(); 

    while(breaker){ 
     g.setColor(Color.yellow); 
     int innerWall = random.nextInt(4)+0; 
     int randomCellX = random.nextInt(cells-1)+0; 
     int randomCellY = random.nextInt(cells)+0; 

     if(randomCellX==cells&&innerWall==2|| 
      randomCellX==0&&innerWall==0|| 
      randomCellY==cells-1&&innerWall==3|| 
      randomCellY==0&&innerWall==1){ 
      continue; 
     }   
     else{ 

      int location = randomCellX+(randomCellY*cells); 
      int neighbour = 0; 
      if(innerWall==0){ 
       neighbour =location-1; 
      } 
      else if(innerWall==1){ 
       neighbour =location-cells; 
      } 
      else if(innerWall==2){ 
       neighbour =location+1; 
      } 
      else if(innerWall==3){ 
       neighbour =location+cells; 
      } 
      int locationRoot =find(location); 
      int neighbourRoot =find(neighbour); 

      if(locationRoot==neighbourRoot){ 
       breaker = checkIfDone(s); 
       } 
      union(location,neighbour); 
      drawWall(randomCellX,randomCellY,innerWall,g); 


     } 


    } 
} 

Если удалить

if(randomCellX==cells&&innerWall==2|| 
      randomCellX==0&&innerWall==0|| 
      randomCellY==cells-1&&innerWall==3|| 
      randomCellY==0&&innerWall==1){ 
      continue; 
     } 

Она удаляет строки в порядке, но при добавлении стены не удаляются. Метод вызывается, но ничего не делает.

ответ

0

Кажется, что какая-то логическая ошибка была сделана явно. Но я не могу точно определить, поскольку вы не дали объяснения логики, которую вы сделали. Только может помочь показать путь, где может возникнуть проблема.

Поскольку вы не можете достичь else блока в любом случае, очевидно, что один или более из этих условий в if являются всегдаtrue.

(randomCellX == cells && innerWall == 2) 
(randomCellX == 0 && innerWall == 0) 
(randomCellY == cells - 1 && innerWall == 3) 
(randomCellY == 0 && innerWall == 1) 

Именно поэтому вы становитесь верным для условия if и продолжаете цикл, ничего не делая. Обеспечьте условия в порядке.

Если эти условия являются правильными, то следующим подозреваемым может быть эти строки:

int innerWall = random.nextInt(4)+0; 
int randomCellX = random.nextInt(cells-1)+0; 
int randomCellY = random.nextInt(cells)+0; 

Проверить ли в диапазоне этих случайных значений в точности то, что вы хотите или нет. Например: вы принимаете случайные значения для randomCellX от 0 до ячеек-2, но для randomCellY диапазон равен 0 ячейкам-1.