void EqualizeAdjacentCells(MazeNode[] row) { for (int i = 1; i < row.Length; ++i) { MazeNode node = row[i]; MazeNode previousNode = row[i - 1]; if (node.SetNumber != previousNode.SetNumber && rand.Next(0, 2) == 0) { node.SetNumber = previousNode.SetNumber; previousNode.RemoveMask(MazeNode.WALL_TOP); node.RemoveMask(MazeNode.WALL_BOTTOM); } } }
void OpenWays(MazeNode[] row) { if (row == null) { return; } var setNumbers = new HashSet <int>(); var openSets = new HashSet <int>(); for (int i = 0; i < row.Length; ++i) { MazeNode node = row[i]; setNumbers.Add(node.SetNumber); if (node.HasWallRight && rand.Next(0, 5) == 0) { node.RemoveMask(MazeNode.WALL_RIGHT); openSets.Add(node.SetNumber); } } foreach (int setNumber in setNumbers) { if (openSets.Contains(setNumber)) { continue; } for (int i = 0; i < row.Length; ++i) { MazeNode node = row[i]; if (node.SetNumber != setNumber) { continue; } node.RemoveMask(MazeNode.WALL_RIGHT); openSets.Add(setNumber); break; } } }