2016-09-18 4 views
-1

Ich versuche, ein Labyrinth mit Union Find zu erstellen, kann aber keine Wände entfernen. Das habe ich bisher bekommen.Draw hört auf zu arbeiten, wenn

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); 


     } 


    } 
} 

Wenn ich die

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

Es entfernen entfernt die Linien in Ordnung, aber wenn es die Wände hinzugefügt wird, werden nicht entfernt. Die Methode wird aufgerufen, tut aber nichts.

Antwort

0

Es scheint offensichtlich ein logischer Fehler gemacht worden zu sein. Aber kann nicht spezifisch sehen, wie Sie die Erklärung der Logik, die Sie getan haben, nicht gegeben haben. Nur kann helfen, den Pfad zu zeigen, in dem das Problem auftreten könnte.

Da Sie den else Block sowieso nicht erreichen kann, ist es offensichtlich, dass eine oder mehrere dieser Bedingungen in if sind immertrue.

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

Das ist der Grund, warum Sie sich für die if-Bedingung trauen und die Schleife fortsetzen, ohne etwas zu tun. Stellen Sie sicher, dass die Bedingungen in Ordnung sind.

Wenn diese Bedingungen stimmen, könnte der nächste Verdächtige diese Zeilen sein:

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

prüfen, ob diese Zufallswerte reichen sind genau das, was Sie wollen oder nicht. Beispiel: Sie nehmen zufällige Werte für randomCellX von 0 bis Zellen-2, aber für randomCellY ist der Bereich 0 bis Zellen-1.

Verwandte Themen