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

        Random pos = new Random(Seed);

        Size MazeSize = new Size(Convert.ToInt32(NewForm.eWidth.Value),

   Convert.ToInt32(NewForm.eHeight.Value));

        Point EnterPoint = new Point(0, pos.Next(MazeSize.Height));

        Point ExitPoint =

new Point(MazeSize.Width-1, pos.Next(MazeSize.Height));

        Maze = new CMaze(MazeSize.Width, MazeSize.Height, EnterPoint,ExitPoint);

        Progress ProgressForm = new Progress();

        ProgressForm.Show();

        Buffer = new Bitmap(CellSize.Width * MazeSize.Width + 1,

    CellSize.Height * MazeSize.Height + 1);

        if (!CGenerator.Generate(MazeSize, Maze, Seed,ProgressForm.progressBar))

        {

            Maze.Dispose();

            Maze = null;

        }

        ProgressForm.Dispose();

        Field_Resize(this, null);

        RedrawBuffer(false);

        Field.Refresh();

    }

    NewForm.Dispose();

}

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

Для ускорения перерисовки лабиринта в главном окне используется буферизация. Т.е. при изменении размеров лабиринта, он прорисовывается полностью в буфере (в этом случае изменяется размер самого буфера), при изменении положения игрока, перерисовывается в буфере только локация, из которой он перешел, и локация, в которую он перешел. Для перерисовки же главного окна, изображение только копируется из буфера. При больших размерах лабиринта это позволяет достичь большой степени ускорения.

Для перерисовки буфера используем следующую функцию:

private void RedrawBuffer(bool OnlyPlayer)

{

    if (this != null)

    {

        Size NewSize = new Size(CellSize.Width * Maze.Size.Width + 1,

  CellSize.Height * Maze.Size.Height + 1);

        if (NewSize != Buffer.Size)

        {

            Buffer.Dispose();

            Buffer = new Bitmap(NewSize.Width, NewSize.Height);