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++; } }
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); }
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); }