예제 #1
0
 private void Checkside(Point checkedPoint, Direction dir, Element searchingEl, List <WayResolver> wayResolvers)
 {
     if (!checkedPoint.IsOutOf(Board.Size))
     {
         if ((!Barriers.Contains(checkedPoint) || (searchingEl == Element.DESTROYABLE_WALL && Board.IsNear(checkedPoint, searchingEl))) && !wayResolvers.Any(x => x.Point == checkedPoint))
         {
             {
                 WayResolver way = new WayResolver(checkedPoint, dir);
                 {
                     if (Board.IsAt(checkedPoint, searchingEl) || (searchingEl == Element.DESTROYABLE_WALL && Board.IsNear(checkedPoint, searchingEl)))
                     {
                         way.isDestination = true;
                     }
                     if (!DangerPoints.Contains(checkedPoint) || (searchingEl == Element.DESTROYABLE_WALL && Board.IsNear(checkedPoint, searchingEl)))
                     {
                         way.isSafe = true;
                     }
                     if (!wayResolvers.Any(x => x.Point == way.Point))
                     {
                         wayResolvers.Add(way);
                     }
                 }
             }
         }
         depth++;
     }
 }
예제 #2
0
        private Direction findNearElements(Element element)
        {
            target = element;
            if (Board.IsNear(PlayerPoint, element) && ((element == Element.OTHER_BOMBERMAN) || (element == Element.DESTROYABLE_WALL) || (element == Element.OTHER_BOMB_BOMBERMAN)))
            {
                return(Direction.Act);
            }
            var firsWay = new WayResolver(PlayerPoint, Direction.Stop);
            List <WayResolver> wayResolvers = new List <WayResolver>()
            {
            };

            if (!DangerPoints.Contains(PlayerPoint))
            {
                firsWay.isSafe = true;
            }
            wayResolvers.Add(firsWay);
            Direction waysToTarget = Direction.Act;

            try
            {
                waysToTarget = lookAround(element, wayResolvers);
            }
            catch (Exception ex)
            {
                waysToTarget = Direction.Act;
                Console.WriteLine(ex.Message + ex.StackTrace);
            }
            return(waysToTarget);
        }
예제 #3
0
        private Direction getReverseWay(List <WayResolver> wayResolvers, Element searchingEl, List <Direction> dirlist, WayResolver curentItertation = null)
        {
            var         previousWay = curentItertation;
            WayResolver lastspot    = curentItertation;

            if (curentItertation == null)
            {
                try
                {
                    if (searchingEl == Element.DESTROYABLE_WALL)
                    {
                        curentItertation = wayResolvers.First(way => Board.IsNear(way.Point, searchingEl) && way.isSafe);
                    }
                    else
                    {
                        curentItertation = wayResolvers.First(way => Board.IsAt(way.Point, searchingEl) && way.isSafe);
                    }
                }
                catch (Exception)
                {
                    curentItertation = new WayResolver(PlayerPoint, Direction.Stop);
                    if (!DangerPoints.Contains(PlayerPoint))
                    {
                        curentItertation.isSafe = true;
                    }
                    if (Board.IsAt(PlayerPoint, searchingEl))
                    {
                        curentItertation.isDestination = true;
                    }
                }

                lastspot = curentItertation;
            }
            switch (curentItertation.Direction)
            {
            case Direction.Left:
                curentItertation = wayResolvers.Single(way => way.Point == curentItertation.Point.ShiftRight());
                break;

            case Direction.Right:
                curentItertation = wayResolvers.Single(way => way.Point == curentItertation.Point.ShiftLeft());
                break;

            case Direction.Up:
                curentItertation = wayResolvers.Single(way => way.Point == curentItertation.Point.ShiftBottom());
                break;

            case Direction.Down:
                curentItertation = wayResolvers.Single(way => way.Point == curentItertation.Point.ShiftTop());
                break;

            default:
                break;
            }
            if (curentItertation.Point != wayResolvers.First().Point)
            {
                curentItertation.Direction = getReverseWay(wayResolvers, searchingEl, dirlist, curentItertation);
            }
            if (curentItertation.Point == wayResolvers.First().Point)
            {
                if (previousWay == null)
                {
                    dirlist.Add(lastspot.Direction);
                    return(lastspot.Direction);
                }
                else
                {
                    dirlist.Add(previousWay.Direction);
                    return(previousWay.Direction);
                }
            }
            dirlist.Add(curentItertation.Direction);
            return(curentItertation.Direction);
        }