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

            {

                Progress ProgressForm = new Progress();

                ProgressForm.Show();

                if (!CGenerator.Generate(Maze.Size, Maze,

Convert.ToInt32(DateTime.Now.Ticks % 0xFFFFFF), ProgressForm.progressBar))

                    Maze.Dispose();

                ProgressForm.Dispose();

            }

            Field.Refresh();

        }

    }

}

При этом также запоминается предыдущее положение игрока, которое используется при перерисовке буфера,  а также обрабатывается завершение игры. Если игрок дошел до конечной точки, ему показывается поздравление, и предложение сгенерировать новый лабиринт, и если он соглашается, то мы вызываем метод Generate класса CGenerate для генерации нового лабиринта.

Рассмотрим класс генерации лабиринта. Для реализации алгоритма Краскала были написаны следующие основные методы:

1.  Для определения являются ли локации соединенными или нет (используется информация о номерах «соединенности»):

private static bool IsConnected(Point From, Point To, int AnotherConnIndex)

2.  Метод, в котором мы пытаемся перейти в указанном направлении из локации, которую обрабатываем в данный момент, и если в нее перейти можно, то добавляем в список пройденных локаций:

private static bool TryGo(CMaze Maze, Point From, EDirection Direction, int

AnotherConnIndex, List<Point> Path)

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

private static void AddToPath(CMaze Maze, Point From, Point To, int ConnIndex,

List<Point> Path)

4.  Метод, реализующий поиск пути между двумя локациями, разделенными указанной стеной:

private static bool FindPath(Point From, EWall Wall, CMaze Maze)

5.  Единственный public метод, который и расставляет стены в переданном ему лабиринте по методу Краскала:

public static bool Generate(Size MazeSize, CMaze Maze, int Seed,

System.Windows.Forms.ProgressBar Bar)

Алгоритмы, реализованные в данных методах, были рассмотрены в предыдущей главе.