Example #1
0
        public void ComputeRoom(Room room, List<Room> visitedRooms, Stack<Room> computationStack, Random rand)
        {
            // mark room as visited
            visitedRooms.Add(room);

            // has unvisited neighbor?
            List<Connection> connections = room.GetUnvisitedNeighbors(visitedRooms);
            if (connections.Count > 0)
            {
                // choose random neighbor
                int randomIndex = rand.Next(connections.Count);
                Room neighbor = connections[randomIndex].Neighbor;

                // add room to stack
                computationStack.Push(room);

                // remove walls between room and neighbor
                int direction = connections[randomIndex].Direction;
                room.Walls[direction] = false;
                neighbor.Walls[(direction + 2) % 4] = false;

                // computer neighbor room
                this.ComputeRoom(neighbor, visitedRooms, computationStack, rand);
            }
            else
            {
                if (computationStack.Count > 0)
                {
                    // remove first stack room
                    room = computationStack.Pop();
                    // backtrack
                    this.ComputeRoom(room, visitedRooms, computationStack, rand);
                }
            }
        }