迷宫不工作?

时间:2013-03-15 03:21:14

标签: java maze

代码:
Array是我做的预定义布尔数组,val是数组的长度(它是一个正方形)。我用它作为起点,而不是使用随机值

     import java.util.*;
     import javax.swing.*;
     public class Main

{

public void main()
{

String Val = JOptionPane.showInputDialog("Enter the number of rows/columns");
int x = Integer.parseInt(Val);

boolean mazeArch[][] = new boolean [x][x]; 
BoundariesDeclared(mazeArch, x);

generateMaze(mazeArch, x);
convertArray(mazeArch, x);

}

 public void printArray(String Array[][]) // Prints out the array

{

      for (int i =0; i < Array.length; i++) {
          for (int j = 0; j < Array.length; j++) {
        System.out.print(" " + Array[i][j]);
    }
    System.out.println(""); 
}

}

   public void convertArray(boolean Array[][], int z) 

{

  String RealArray[][] = new String [z][z];
for(int x = 0; x < Array.length; x++)
{
    for(int y = 0; y < Array.length; y++)
    {
        if(Array[x][y] == true)
        {
            RealArray[x][y] = "*";
        }
        if(Array[x][y] == false)
        {
            RealArray[x][y] = " ";
        }
    }
}
printArray(RealArray);

}

 public void BoundariesDeclared(boolean Array[][], int y) 

{

for(int x = 0; x < Array.length; x++)
    Array[0][x] = true;
for (int x = 0; x < Array.length; x++)
    Array[x][0] = true;    
for (int x = 0; x < Array.length; x++)
    Array[x][Array.length-1] = true;   
for (int x = 0; x < Array.length; x++)
    Array[Array.length-1][x] = true;

}

 public void generateMaze(boolean Array[][], int val) 

{

Stack<Integer> StackX = new Stack<Integer>();
Stack<Integer> StackY = new Stack<Integer>();
int x = val / 2; // Start in the middle
int y = val / 2; // Start in the middle
StackX.push(x);
StackY.push(y);

while(!StackX.isEmpty())
{
    Array[x][y] = true; // is Visited
    x = StackX.peek();
    y = StackY.peek();

    if(Array[x][y+1] == false)
    {
        StackX.push(x);
        StackY.push(y+1);
        y = y + 1;
    }
    else if(Array[x][y-1] == false)
    {
        StackX.push(x);
        StackY.push(y-1);
        y = y - 1;
    } 
    else if(Array[x+1][y] == false)
    {
        StackX.push(x+1);
        StackY.push(y);
        x = x+1;
    } 
    else if(Array[x-1][y] == false)
    {
        StackX.push(x-1);
        StackY.push(y);
        x = x-1;
    } 
    else
    {
        StackX.pop();
        StackY.pop();
    }
}

} }

每当我打印结果时,我只会得到星星,这意味着每个布尔值都设置为true。我理解我的错误,因为我正在访问每个地点,结果将是他们都被设置为真。但是我能做些什么来解决这个问题呢?我认为我的概念是正确的,而不是应用程序。我之前问过这个问题并被告知我需要制作两个阵列(1个用于墙壁,另一个用于访问)但是我如何应用它呢?

4 个答案:

答案 0 :(得分:1)

没有提到你想做什么。所以我们无能为力。

  • 这个迷宫在做什么?
  • 你的意见是什么?
  • 您的预期结果是什么?

添加此行并自行调试。

public void generateMaze(boolean Array[][], int val) {
        Stack<Integer> StackX = new Stack<Integer>();
        Stack<Integer> StackY = new Stack<Integer>();
        int x = val / 2; // Start in the middle
        int y = val / 2; // Start in the middle
        StackX.push(x);
        StackY.push(y);

        while (!StackX.isEmpty()) {
            Array[x][y] = true; // is Visited
            x = StackX.peek();
            y = StackY.peek();

            if (Array[x][y + 1] == false) {
                StackX.push(x);
                StackY.push(y + 1);
                y = y + 1;
            } else if (Array[x][y - 1] == false) {
                StackX.push(x);
                StackY.push(y - 1);
                y = y - 1;
            } else if (Array[x + 1][y] == false) {
                StackX.push(x + 1);
                StackY.push(y);
                x = x + 1;
            } else if (Array[x - 1][y] == false) {
                StackX.push(x - 1);
                StackY.push(y);
                x = x - 1;
            } else {
                StackX.pop();
                StackY.pop();
            }
            convertArray(Array, val); // add this line
        }
    }

答案 1 :(得分:0)

解决方案仍然与上次发布此问题时的解决方案相同 - 您需要有两个数组

- 对于迷宫中的每个墙壁都是如此 - 迷宫的瓷砖

- 启动所有错误 - 解算器的磁贴

只有当两个数组在该点都为假时,解算器才能移动到图块上,并且将第二个数组(解算器的图块)设置为true,同时单独留下第一个数组(迷宫的图块)。

答案 2 :(得分:0)

每个人说,这不是一个“编码”错误。你根本不知道你想要什么样的行为。尝试注释掉生成迷宫的行。以6作为参数运行程序。你得到:

 * * * * * *
 *         *
 *         *
 *         *
 *         *
 * * * * * *

这是什么样的迷宫?出口在哪里?同样,这不是编码问题,这是一个设计缺陷。当然,如果你在这个迷宫的范围内开始,你将访问所有的方块!

答案 3 :(得分:0)

我不清楚你对输出的期望是什么,但我可以看出问题出在哪里。在您的generateMaze()方法中,您正在以螺旋模式行进,最终会触及每个节点。就像假设你有5x5数组一样,你旅行并且变得如此(边界已经是真的)[2,2] - &gt; [2,3] - &gt; [3,3] - &gt; [3,2] - &gt ; [3,1] - GT; [2,1] - &GT; [1,1] - &GT; [1,2] - &GT; [1,3]

enter image description here

你从中间开始,你开始访问并在你发现已经为真(边界或访问过)之前轮流,并且它涵盖所有节点