Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет.doc
Скачиваний:
20
Добавлен:
19.05.2015
Размер:
614.4 Кб
Скачать

2.2 Блок-схема алгоритма

Построение пути

Присвоить xиyкоординаты текущей позиции

Переместить объект

Достигнут финиш

Да

Нет

Поиск минимального элемента

Запомнить след. соседний элемент

Элемент минимальный

Да

Нет

Сначала вводится константа Nk, равная максимально возможному числу итераций. Далее необходимо создать рабочий массив R(MxN), равный по размеру массиву поля. Каждому элементу массива R(i,j) присваивается некоторое значение в зависимости от свойств элемента игрового поля по следующим правилам:

  • если поле непроходимо, то R(i,j) := 255;

  • если поле проходимо, то R(i,j) := 254;

  • если поле является целевой (финишной) позицией, то R(i,j) := 0;

  • если поле является стартовой позицией, то R(i,j) := 253.

На этапе «распространения волны» вводится переменная Ni – счетчик итераций. Ей присваивается значение 0. Построчно просматривается массив R, то есть организуется два вложенных цикла: по индексу массива i от 1 до M, по индексу массива j от 1 до N. Если элемент R(i,j) равен Ni, то просматриваются соседние элементы в 4 направления по следующему правилу:

  • если соседний элемент равен 254, то данному элементу присваивается значение Ni + 1;

  • если соседний элемент равен 253, то переход к этапу построения пути;

  • во всех остальных случаях элемент остается без изменений.

По завершению построчного просмотра всего массива Ni увеличивается на 1.

Если Ni > Nk, то поиск маршрута признается неудачным, выход из программы.

На этапе построения маршрута перемещения переменным x и y присваиваются координаты текущей позиции, на которой находится объект. В окрестности данной позиции находится элемент с наименьшим значением. Когда такой элемент найден, объект перемещается на новую позицию, координаты которой присваиваются переменным x и y. Процесс итерационен и продолжается до тех пор, пока не будет достигнута целевая позиция.

3 Программное конструирование

Для реализации данного алгоритма было решено использовать язык Pascal. Разработка проводилась в среде PascalABC.NET. Помимо стандартных процедур и функций были использованы следующие программные модули: GraphABC для реализации графического отображения интерфейса и событий; ABCSprites для создания графического объекта, в последствии перемещаемого по карте, и объектов, выполняющих роль препятствий.

Более подробное описание функционала программы, пользовательского интерфейса и принципов работы представлено в разделах «Рекомендации пользователю» и «Рекомендации программисту». Исходный код программы представлен в приложении А.

4 Контрольный пример

При запуске отображается основное окно программы, разделенное на две области: «карта» и поле вывода информации. Внешний вид данного окна представлен на рисунке 1.

Рисунок 1 – Запуск программы

При нажатии правой кнопки мыши в пределах свободной клетки выполняется построение волн, вывод всех фронтов на «карте», перемещение объекта в конечную точку, вывод соответствующей информации. Все выше перечисленные действия выполняются в том случае, если конечная точка достижима, то есть существует путь от начальной точки до конечной. Результат выполнения операций представлен на рисунке 2.

Рисунок 2 – Перемещение объекта в целевую точку

Если правая кнопка мыши нажата в пределах свободной клетки, пути к которой не существует, после построения фронтов волн будет выдано соответствующее сообщение. Исход такого события представлен на рисунке 3.

Рисунок 3 – целевая точка не достижима

При нажатии клавиши «пробел» можно произвести реорганизацию «карты» (то есть поменять количество и расположение препятствий), не прерывая работу программы. При этом объект остается на прежнем месте. Результат реорганизации «карты» представлен на рисунке 4.

Рисунок 4 – Реорганизация «карты»