Задание
Необходимо разработать визуализация алгоритма 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
Скриншот архива с проектом

Телеграм
-