Алгоритм поиска пути
5

Реализация программы

1. Класс Point(точка)

Класс состоит из 2-ух переменных целого типа x, y. В классе содержаться различные конструкторы и инициализация. В классе переопределены оператор ==, сравнивающий 2 точки, и оператор +, который возвращает точку между двумя точками.

2. Класс Unit(предмет)

Данный класс содержит текущие координаты предмета (дробные переменные),

радиус предмета, скорость перемещения, списки точек: точки через которые нужно идти, точки пересечения с сеткой, точки внутри клеток, точки входа/выхода. В данном классе содержаться методы перемещения по карте, рисования пути, выделения предмета, нахождения точек пересечения с сеткой и точек внутри клеток.

3. Процедуры и функции

В данном проекте были реализованы следующие процедуры и функции: вычисление расстояния между точками, округление координат, определение наложения предметов друг на друга, определение существования препятствия в данной точке для данного объекта, процедура поиска пути для данного объекта от начальной до конечной точки.

4. STL

В данном проекте были использованы списки (для координат), вектор (для предметов), итераторы, некоторые алгоритмы, такие, как unique(), merge(). Для использования STL нужно было подключать заголовочные cliext/vector и cliext/list, а не просто vector и list. К тому же мне удалось создать только вектор указателей на предмет, а не вектор предметов, причем можно было создать только в классе, а не объявлять глобально. Таким образом, я включил вектор указателей на предметы в класс Form1. При работы с списками и вектором вместо * использовалось ^, а вместо & - %.

 

5. Интерфейс

Можно создать предмет(или 100 предметов) с заданными параметрами, можно случайно расставить на карте 10 предметов с радиусом 1-2. Для отладки удобно включить отображение пути, сетки, времени, затраченного на поиск пути. Также можно поменять шаг сетки, но все предметы должны иметь целый радиус.