private static LabyrinthPosition GenerateRandomEntryPoint(string[][] labyrinth) { var entryPoint = new LabyrinthPosition( RandomGen.Next(0, labyrinth.Length - 1), RandomGen.Next(0, labyrinth[0].Length - 1)); labyrinth[entryPoint.Row][entryPoint.Col] = EntryPointToken; return entryPoint; }
private static void TraverseLabyrinth(IList<string[]> labyrinth, LabyrinthPosition labyrinthPosition, int steps) { if (OutsideTheBoundsOfTheLabyrinth(labyrinth, labyrinthPosition)) { return; } var currentCell = labyrinth[labyrinthPosition.Row][labyrinthPosition.Col]; if (currentCell == Wall) { return; } if (currentCell != EntryPointToken) { if (currentCell == EmptyCell || int.Parse(currentCell) > steps) { labyrinth[labyrinthPosition.Row][labyrinthPosition.Col] = steps.ToString(CultureInfo.InvariantCulture); } else { return; } } // go left TraverseLabyrinth(labyrinth, new LabyrinthPosition(labyrinthPosition.Row, labyrinthPosition.Col - 1), steps + 1); // go right TraverseLabyrinth(labyrinth, new LabyrinthPosition(labyrinthPosition.Row, labyrinthPosition.Col + 1), steps + 1); // go up TraverseLabyrinth(labyrinth, new LabyrinthPosition(labyrinthPosition.Row - 1, labyrinthPosition.Col), steps + 1); // go down TraverseLabyrinth(labyrinth, new LabyrinthPosition(labyrinthPosition.Row + 1, labyrinthPosition.Col), steps + 1); }
private static bool OutsideTheBoundsOfTheLabyrinth(IList<string[]> labyrinth, LabyrinthPosition labyrinthPosition) { var rowOutOfBounds = labyrinthPosition.Row < 0 || labyrinthPosition.Row >= labyrinth.Count; var colOutOfBounds = labyrinthPosition.Col < 0 || labyrinthPosition.Col >= labyrinth[0].Length; return rowOutOfBounds || colOutOfBounds; }