Esempio n. 1
0
        public override void PostProcess(MazeAlgorithm maze_algorithm)
        {
            int size_x = maze_algorithm.size_x;
            int size_y = maze_algorithm.size_y;

            for (int iy = 0; iy < size_y; iy++)
            {
                for (int ix = 0; ix < size_x; ix++)
                {
                    IMazeCell cell = maze_algorithm.GetAt(ix, iy);
                    if (cell != null && cell.ConnectionCount == 1 && Random.Range(0.0f, 1.0f) < braidingrate)
                    {
                        for (int i = 0; i < (int)EMazeDirection.DirectionCount; i++)
                        {
                            EMazeDirection dir = (EMazeDirection)i;

                            //尚未联通的点
                            if (cell.IsConnectedTo(dir) == true)
                            {
                                //只做反向联通,确保不会出现孤点
                                EMazeDirection inverse_dir = MazeAlgorithm.InvertDirection(dir);
                                IMazeCell      invert_cell = cell.GetNeighbour(inverse_dir);
                                if (invert_cell != null)
                                {
                                    cell.ConnectionTo(inverse_dir);
                                }
                            } //END OF IF Connected to
                        }     //END OF FOR Neighbours
                    }         //END OF IF Test Cell
                }
            }
        }
Esempio n. 2
0
 public void ConnectionTo(EMazeDirection dir)
 {
     AddConnection(dir);
     neighbours[dir].AddConnection(MazeAlgorithm.InvertDirection(dir));
 }
Esempio n. 3
0
 public void BuildWallTo(EMazeDirection dir)
 {
     RemoveConnection(dir);
     neighbours[dir].RemoveConnection(MazeAlgorithm.InvertDirection(dir));
 }
Esempio n. 4
0
 abstract public void PostProcess(MazeAlgorithm maze_algorithm);