Задание
Необходимо разработать визуализация алгоритма A* с возможностью задания нескольких типов местности, стен и задания рандомного количества стен и автогенерацией местности. Визуализировать пошаговый алгоритм работы программы.
Функционал программы
Например:
- Визуализация алгоритма
- Задние стен
- Задание различных типов местности
- Автоматическая генерация стен
- Автоматическая генерация случайной местности
- Пошаговая визуализация работы программы
Пример программного кода
public List<Point> FindPath(int[][] field, Point start, Point goal) { // Шаг 1. var closedSet = new Collection<PathNode>(); var openSet = new Collection<PathNode>(); // Шаг 2. PathNode startNode = new PathNode() { Position = start, CameFrom = null, PathLengthFromStart = 0, HeuristicEstimatePathLength = GetHeuristicPathLength(start, goal) }; openSet.Add(startNode); while (openSet.Count > 0) { // Шаг 3. var currentNode = openSet.OrderBy(node => node.EstimateFullPathLength).First(); // Шаг 4. if (currentNode.Position == goal) return GetPathForNode(currentNode); // Шаг 5. openSet.Remove(currentNode); closedSet.Add(currentNode); // Шаг 6. foreach (var neighbourNode in GetNeighbours(currentNode, goal, field)) { // Шаг 7. if (closedSet.Count(node => node.Position == neighbourNode.Position) > 0) continue; var openNode = openSet.FirstOrDefault(node => node.Position == neighbourNode.Position); // Шаг 8. if (openNode == null) openSet.Add(neighbourNode); else if (openNode.PathLengthFromStart > neighbourNode.PathLengthFromStart) { // Шаг 9. openNode.CameFrom = currentNode; openNode.PathLengthFromStart = neighbourNode.PathLengthFromStart; } } } // Шаг 10. return null; }
Пояснения по запуску
Программа не нуждается в установке. Просто необходимо запустить VizualizationA.sln
sokol1998