Разработка и анализ алгоритмов

Принцип работы программы основывается на изменении положения элементов в глобальном двумерном массиве, который хранит положение picturebox-ов в определенный момент времени. С помощью специальных функций осуществляется вывод на экран и изменение положения каждого изображения. Размер игрового поля определяется с помощью специальной глобальной переменной int pol. Значение этой переменной пользователь меняет во время выбора настроек игры. В функциях работа с полем происходит с учетом значения этой переменной. Массив, хранящий положение изображений сначала заполняется от 1 до pol по порядку, а последнему элементу присваивается значение 0. Далее происходит перемешивание массива путем перемещения 0 по массиву в случайном порядке. После того как массив был перемешан, на экран выводятся изображения в соответствующем порядке. Пользователь собирает их по порядку. После каждого перемещения в массиве происходит перерисовка игрового поля и проверка на правильность собранного изображения. Если пользователь собрал правильно изображение то выводиться соответствующее сообщение, уведомляющее пользователя о победе.

Ниже приведено 2 примера алгоритмов использующихся в программе.

Функция проверки правильности собранного изображения.

Функция проверяет, правильно ли расположены элементы в двумерном массиве, размером соответствующим размеру выбранного пользователем игрового поля. В первом цикле проходим матрицу по строкам, а во вложенном цикле по столбцам. С каждым проходом по столбцам увеличиваем переменную kol на 1. Массив должен быть расположен по возрастанию с лева направо с верху в низ от 1 до pol*pol (pol –размер игрового поля), но последним элементом является 0. Проходя массив, мы сравниваем по возрастанию все элементы матрицы и дополнительно проверяем, не дошли ли мы до конца массива, если дошли то проверяем, является ли он нулем. Если хоть одна из проверок провалится, то k=false , это значит, что массив расположен неправильно. В случае правильного положения элементов выводится изображение, уведомляющее о победе. Так же функция выводит на экран подсказку, если пользователь указал ее необходимость.

bool pruf()//проверка на правильность

{label2->Text="";

bool k=true;

int kol=0;// колчество эл-в провереных

int temp=matr[0][0];//пер-я для сравнивания

for (int i=0;i<pol;i++) // проходим матрицу

for (int j=0;j<pol;j++)

{ kol++;

if (matr[i][j]<temp && kol!=pol*pol )// если текущий э-т меньше придыдущего и кол не равно размеру матрицы то не правильно

{

k=false;

}

else

if ( kol==pol*pol && matr[i][j]!=0)

k=false;

temp=matr[i][j];

if (checkBox1->Checked )

label2->Text+=matr[i][j];

}

if (k){

this->pictureBox18->Size = System:: Drawing:: Size(136,93);// вывод победной картинки

pictureBox18->Visible=true;

}

return(k);

}

Блок-схема процедуры:

разработка и анализ алгоритмов - student2.ru

Функция проверки возможности перемещения вверх определенного изображения.

Ищем координаты изображения в массиве. Если изображение находится в первой строке то переместить вверх невозможно и мы завершаем функцию возвращая false. Если значение элемента матрицы находящегося над этой клеткой равно 0, то клетка пустая и переместить можно. Просто меняем в массиве эти значения местами и возвращаем true. В противном случае возвращаем false.

bool up(int nom)// проверка возможности перемещения вверх

{

int i,j;

i=findi(nom);//ищем координаты плитки

j=findj(nom);

if (i==0) //если это первая строка то переместить нельзя

return(false);

else

if (matr[i-1][j]==0) //если сверху клетка пуста то переместить можно

{int temp;

temp=matr[i][j]; //меняем местами плитки

matr[i][j]=matr[i-1][j];

matr[i-1][j]=temp;

return(true); // поэтому возвращаем 1

}

return(false);

}

разработка и анализ алгоритмов - student2.ru

3. РЕАЛИЗАЦИЯ ПРОГРАММЫ НА ЯЗЫКЕ С++

Архитектура программы

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

3.2. Выбор стандартных визуальных и не визуальных компонентов

Для создания интерфейса использовались:

· Button;

· Label;

· Panel;

· TrackBar;

· Textbox.

· PictureBox

  • Form1.

Наши рекомендации