如果,绘制停止工作

时间:2016-09-18 15:54:34

标签: java draw maze

我试图用Union Find创建一个迷宫,但我无法移除墙壁。 这就是我到目前为止所做的。

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

它会删除细线,但添加时不会移除墙。该方法被调用,但没有做任何事情。

1 个答案:

答案 0 :(得分: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。