Пример #1
0
 public void BuildWallTo(EMazeDirection dir)
 {
     RemoveConnection(dir);
     neighbours[dir].RemoveConnection(MazeAlgorithm.InvertDirection(dir));
 }
Пример #2
0
 public void ConnectionTo(EMazeDirection dir)
 {
     AddConnection(dir);
     neighbours[dir].AddConnection(MazeAlgorithm.InvertDirection(dir));
 }
Пример #3
0
 public void AddConnection(EMazeDirection dir)
 {
     connections.Add(dir);
 }
Пример #4
0
 public bool IsConnectedTo(EMazeDirection dir)
 {
     return(connections.Contains(dir));
 }
Пример #5
0
        public EMazeDirection GenRandomNeighbourDirection(ESelectCondition condition = ESelectCondition.None, List <EMazeDirection> direction_filter = null)
        {
            List <EMazeDirection> candidate = new List <EMazeDirection>();

            foreach (var key in neighbours.Keys)
            {
                //Debug:注意要判断target是不是visited,而不是自己!
                IMazeCell target = neighbours[key];
                switch (condition)
                {
                case ESelectCondition.None:
                    candidate.Add(key);
                    break;

                case ESelectCondition.NoConnected:
                    if (IsConnectedTo(key) == false)
                    {
                        candidate.Add(key);
                    }
                    break;

                case ESelectCondition.NoVisited:

                    if (target.ConnectionCount == 0)
                    {
                        candidate.Add(key);
                    }
                    break;

                case ESelectCondition.Connected:
                    if (IsConnectedTo(key) == true)
                    {
                        candidate.Add(key);
                    }
                    break;

                case ESelectCondition.Visited:
                    if (target.ConnectionCount > 0)
                    {
                        candidate.Add(key);
                    }
                    break;

                case ESelectCondition.VisitedConnected:
                    if (IsConnectedTo(key) == true && target.ConnectionCount > 0)
                    {
                        candidate.Add(key);
                    }
                    break;
                }
            }

            //追加Filter 使得 随机筛选只能从指定方向中筛选。
            if (direction_filter != null && candidate.Count > 0)
            {
                for (int i = candidate.Count - 1; i >= 0; i--)
                {
                    if (direction_filter.Contains(candidate[i]) == false)
                    {
                        candidate.Remove(candidate[i]);
                    }
                }
            }

            //albour-broder算法需要,因此,得,保存这个值
            random_select_direction = candidate.Count == 0 ? EMazeDirection.DirectionCount : candidate[Random.Range(0, candidate.Count)];
            return(random_select_direction);
        }