我有一个基本的recursion回溯alghorithm迷宫。 它几乎可以工作,但偶尔在角落留下一些瓷砖。 这是recursion函数:
void GenerateMaze(Coordinate tilePos) { Debug.Log("MazeGen"); tileMap[tilePos.x, tilePos.y].visited = true; Shuffle<Coordinate>(directions); foreach(Coordinate d in directions) { if (tilePos.x + dx >= 0 && tilePos.x + dx < mapWidth && tilePos.y + dy >= 0 && tilePos.y + dy < mapHeight) { if (!tileMap[tilePos.x + dx, tilePos.y + dy].visited) { Carve(tilePos, d); GenerateMaze(new Coordinate(tilePos.x + dx, tilePos.y + dy)); } } } }
这就是Carve方法的样子:
private void Carve(Coordinate position, Coordinate direction) { if (direction.Equals(new Coordinate(-1, 0))) { tileMap[position.x, position.y].west = true; tileMap[position.x + direction.x, position.y + direction.y].east = true; } else if (direction.Equals(new Coordinate(1, 0))) { tileMap[position.x, position.y].east = true; tileMap[position.x + direction.x, position.y + direction.y].west = true; } else if (direction.Equals(new Coordinate(0, -1))) { tileMap[position.x, position.y].south = true; tileMap[position.x + direction.x, position.y + direction.y].north = true; } else if (direction.Equals(new Coordinate(0, 1))) { tileMap[position.x, position.y].north = true; tileMap[position.x + direction.x, position.y + direction.y].south = true; } }
我打赌在一个错字或愚蠢的错误,但我找不到它。 在我的最后结果中, tileMap[4,4]
没有任何墙壁保持不动。 但是这个algorithm确实会回到原来的结局。 这并不经常发生,直到现在才发生。
下面是一个例子,右下方的两块tiles
也没有被雕刻。
这是另外一个没有墙的人,这次在迷宫的另一个角落有3个没有连接的地tiles
。
任何人都可以find最新的错误?