Пример #1
0
        private void SearchPathToProccessedElement(LabyrinthElement currentElement,
                                                   Point pointToGetTo,
                                                   LabyrinthElementChain parentChain,
                                                   List <LabyrinthElementChain> foundChains)
        {
            if (parentChain == null)
            {
                parentChain = new LabyrinthElementChain(currentElement);
            }
            else
            {
                parentChain = new LabyrinthElementChain(currentElement, parentChain);
            }

            foreach (var elementToCheck in currentElement.CloseElements.Where(e => e.Type != ElementType.Wall))
            {
                if (GetChainElements(parentChain).Any(e => e.Point.X == elementToCheck.Point.X && e.Point.Y == elementToCheck.Point.Y))
                {
                    continue;
                }

                if (elementToCheck.Point.X == pointToGetTo.X && elementToCheck.Point.Y == pointToGetTo.Y)
                {
                    foundChains.Add(new LabyrinthElementChain(elementToCheck, parentChain));
                }
                else
                {
                    SearchPathToProccessedElement(elementToCheck, pointToGetTo, parentChain, foundChains);
                }
            }
        }
Пример #2
0
        private List <LabyrinthElement> GetChainElements(LabyrinthElementChain chain)
        {
            var result       = new List <LabyrinthElement>();
            var chainToCheck = chain;

            while (chainToCheck != null)
            {
                result.Add(chainToCheck.LabyrinthElement);
                chainToCheck = chainToCheck.Parent;
            }

            return(result);
        }
Пример #3
0
 public LabyrinthElementChain(LabyrinthElement element, LabyrinthElementChain parent)
 {
     LabyrinthElement = element;
     Parent           = parent;
 }