private void MakeNextStep(Point? previousPoint, Step currentStep) { if (!currentStep.ActualPoint.Equals(previousPoint)) { Step sameActualPointStep = mazePointsCollection.FirstOrDefault(obj => obj.ActualPoint.Equals(currentStep.ActualPoint)); if (sameActualPointStep != null && sameActualPointStep.Value <= currentStep.Value) { return; } else if (sameActualPointStep != null) { mazePointsCollection.Remove(sameActualPointStep); } NextStep(currentStep); } }
private void NextStep(Step currentStep) { mazePointsCollection.Add(currentStep); Point currentPoint = currentStep.ActualPoint; int value = currentStep.Value + 1; if (currentPoint.Equals(endPoint)) return; Point newPoint; if (!lineCollection.Any(obj => obj.StartX == currentPoint.X && obj.EndX == currentPoint.X + 1 && obj.StartY == currentPoint.Y && obj.EndY == currentPoint.Y) && currentPoint.Y - 1 >= 0 ) { newPoint = new Point(currentPoint.X, currentPoint.Y - 1); MakeNextStep(currentStep.PreviousPoint, new Step() { PreviousPoint = currentPoint, ActualPoint = newPoint, Value = value }); } if (!lineCollection.Any(obj => obj.StartX == currentPoint.X && obj.EndX == currentPoint.X + 1 && obj.StartY == currentPoint.Y + 1 && obj.EndY == currentPoint.Y + 1) && currentPoint.Y + 1 < height ) { newPoint = new Point(currentPoint.X, currentPoint.Y + 1); MakeNextStep(currentStep.PreviousPoint, new Step() { PreviousPoint = currentPoint, ActualPoint = newPoint, Value = value }); } if (!lineCollection.Any(obj => obj.StartX == currentPoint.X && obj.EndX == currentPoint.X && obj.StartY == currentPoint.Y && obj.EndY == currentPoint.Y + 1) && currentPoint.X - 1 >= 0 ) { newPoint = new Point(currentPoint.X - 1, currentPoint.Y); MakeNextStep(currentStep.PreviousPoint, new Step() { PreviousPoint = currentPoint, ActualPoint = newPoint, Value = value }); } if (!lineCollection.Any(obj => obj.StartX == currentPoint.X + 1 && obj.EndX == currentPoint.X + 1 && obj.StartY == currentPoint.Y && obj.EndY == currentPoint.Y + 1) && currentPoint.X + 1 < width ) { newPoint = new Point(currentPoint.X + 1, currentPoint.Y); MakeNextStep(currentStep.PreviousPoint, new Step() { PreviousPoint = currentPoint, ActualPoint = newPoint, Value = value }); } }