题
我已经写了,对我产生迷宫一些代码。该迷宫由(N×n)个单元,每个单元具有一个布尔值来表示一个壁(北,南,东,西)。
有工作正常,并且我写下面打印出来的迷宫功能:
public static void printMaze(Cell[][] maze)
{
for(int i = 0; i < maze.length; i++)
{
for(int j = 0; j < maze[i].length; j++)
{
System.out.print((maze[i][j].walls.get(Dir.NORTH)) ? "+--+" : "+ +");
}
System.out.println();
for(int j = 0; j < maze[i].length; j++)
{
System.out.print((maze[i][j].walls.get(Dir.WEST)) ? "|" : " ");
System.out.print(" ");
System.out.print((maze[i][j].walls.get(Dir.EAST)) ? "|" : " ");
}
System.out.println();
for(int j = 0; j < maze[i].length; j++)
{
System.out.print((maze[i][j].walls.get(Dir.SOUTH)) ? "+--+" : "+ +");
}
System.out.println();
}
}
然而,由于小区共享壁我产生一种双壁走廊看在我的打印功能的:
+--++--++--++--++--++--++--++--++--++--+
| || || |
+--++ ++--++--++ ++--++--++ ++ ++--+
+--++ ++--++--++ ++--++--++ ++ ++--+
| || || || || |
+ ++--++--++ ++ ++ ++--++--++--++ +
+ ++--++--++ ++ ++ ++--++--++--++ +
| || || || || || || |
+ ++ ++ ++--++ ++ ++ ++ ++ ++ +
+ ++ ++ ++--++ ++ ++ ++ ++ ++ +
| || || || || || || |
+ ++ ++ ++ ++ ++--++--++--++--++ +
+ ++ ++ ++ ++ ++--++--++--++--++ +
| || || || || |
+ ++--++--++--++--++--++ ++--++ ++ +
+ ++--++--++--++--++--++ ++--++ ++ +
| || || || || |
+ ++--++ ++ ++ ++--++--++ ++--++ +
+ ++--++ ++ ++ ++--++--++ ++--++ +
| || || || || || |
+--++--++--++ ++ ++ ++ ++ ++ ++ +
+--++--++--++ ++ ++ ++ ++ ++ ++ +
| || || || || || || |
+ ++ ++--++ ++ ++ ++ ++--++--++ +
+ ++ ++--++ ++ ++ ++ ++--++--++ +
| || || || || || || |
+ ++ ++ ++--++--++--++ ++ ++ ++--+
+ ++ ++ ++--++--++--++ ++ ++ ++--+
| || || |
+--++--++--++--++--++--++--++--++--++--+
我应该如何修改我的打印功能,所以它看起来像:
+--+--+--+--+--+--+--+--+--+--+
| | | |
+--+ +--+--+ +--+--+ + +--+
| | | | | |
+ +--+--+ + + +--+--+--+ +
| | | | | | | |
+ + + +--+ + + + + + +
| | | | | | | |
+ + + + + +--+--+--+--+ +
| | | | | |
+ +--+--+--+--+--+ +--+ + +
| | | | | |
+ +--+ + + +--+--+ +--+ +
| | | | | | |
+--+--+--+ + + + + + + +
| | | | | | | |
+ + +--+ + + + +--+--+ +
| | | | | | | |
+ + + +--+--+--+ + + +--+
| | | |
+--+--+--+--+--+--+--+--+--+--+
我怕我会遇到类似的问题,当我最终到达我开始画用实际的图形而非ASCII以及我的迷宫点。
如何修改我的printMaze方法,因此从第一例进入到第二个?
在的情况下有人有兴趣的源代码到我的类用于产生这些是这里。
解决方案
只有打印北方和西方壁。代码的道路上......
我改变壁到EnumSet
public Set<Dir> walls = EnumSet.allOf(Dir.class);
所以,你不需要在构造函数中添加任何墙面:
public Cell(final int x, final int y) {
this.x = x;
this.y = y;
this.Visited = false;
}
和删除你的墙,使用:
this.walls.remove(randDir);
randomNeighbor.walls.remove(randDir.opposite());
和然后将打印的代码如下所示:
public static void printMaze(final Cell[][] maze) {
for (int r = 0; r < maze.length; r++) {
final Cell[] row = maze[r];
printTop(row);
printMiddle(row);
if (r == maze.length - 1) {
printBottom(row);
}
}
}
private static void printBottom(final Cell[] row) {
for (final Cell cell : row) {
System.out.print(cell.walls.contains(Dir.SOUTH) ? "+--" : "+ ");
}
System.out.println("+");
}
private static void printMiddle(final Cell[] row) {
for (int c = 0; c < row.length; c++) {
final Cell cell = row[c];
System.out.print(cell.walls.contains(Dir.WEST) ? "| " : " ");
if (c == row.length - 1) {
System.out.println(cell.walls.contains(Dir.EAST) ? "|" : " ");
}
}
}
private static void printTop(final Cell[] row) {
for (final Cell cell : row) {
System.out.print(cell.walls.contains(Dir.NORTH) ? "+--" : "+ ");
}
System.out.println("+");
}
(注:从美学角度,我更喜欢的方向,并randomDirection但是,这只是我的; - )
其他提示
您需要做的东西,如“打印,也不要为北部或西部的墙壁,除非该小区是在迷宫的边缘”那如果途中有应该是对西本小区的墙,小区的西博会已经打印了作为它自己的EAST壁。
您可能需要特殊情况门/项,如果他们是在北部或西部的城墙了。
由于该单元共享墙,你可以只忽略值的一半。如果你开始在远北西小区,仅测试墙壁的南部和东部地区,你可以借鉴的单壁迷宫。迷宫的北和西壁将不得不被完全关闭,当然。
免责声明:我真的没有想到这通过,所以它可能不是在所有的工作,但它听起来合理的,我
不隶属于 StackOverflow