Разработка программы «хождение по лабиринту», курсовая работа по системному по, страница 4

2.  Окно, в котором можно указать размер генерируемого лабиринта при создании нового лабиринта;

3.  Окно, отображающее прогресс генерирования нового лабиринта.

Рисунок 2.1 Диаграмма классов окон программы.

Структура программы также содержит три основные функциональные части:

1.  Непосредственно лабиринт, в котором хранится его геометрия.

2.  Игрок, который имеет возможность перемещения по лабиринту, и сообщает о выходе из лабиринта.

3.  Генератор, который создает геометрию лабиринта.

Рисунок 2.2 Диаграмма классов работы с лабиринтом.

Лабиринт реализуется классом CMaze, структура которого приведена на рисунке 2.2. Как видно, в классе реализованы 2 конструктора, один из них дает  возможность создания лабиринта «с чистого листа». Для этого необходимо указать его размеры, начальную и конечную локации. Можно также загрузить (второй конструктор) или сохранить лабиринт (метод SaveToFile), указав поток ввода-вывода. Предварительно необходимо открыть соответствующий этому потоку файл. У готового лабиринта можно получить доступ к массиву стен (через метод Walls), которые можно строить или разрушать, используя метод SetWall (в третьем параметре указывается действие – поставить, или убрать стену). Можно также получить размер лабиринта – ширину и высоту в ячейках (свойство Size). А также получить доступ к классу игрока (свойство Player), о котором пойдет речь далее.

Класс игрока CPlayer реализует возможность перемещения по лабиринту, и обеспечивает информацию о текущем состоянии (структура класса приведена на рисунке 2.2). Игрок может перемещаться по полю, при этом проверка на физическую возможность прохода в указанную ячейку не производится, производится лишь проверка на достижение конечной локации лабиринта (метод Move). Реализовано два конструктора, на случай создания лабиринта «с нуля», при этом игрок располагается в начальной локации, или же для загрузки из файла, при этом явно указывается текущее положение игрока. Для чтения доступны такие параметры как: начальная, текущая и конечная локации (свойства EnterPoint, CurrentPosition и ExitPoint соответственно), которые используются для перерисовки.