Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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;
                }
            }
        }