Разработка и анализ алгоритмов
Принцип работы программы основывается на изменении положения элементов в глобальном двумерном массиве, который хранит положение 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);
}
Блок-схема процедуры:
Функция проверки возможности перемещения вверх определенного изображения.
Ищем координаты изображения в массиве. Если изображение находится в первой строке то переместить вверх невозможно и мы завершаем функцию возвращая 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);
}
3. РЕАЛИЗАЦИЯ ПРОГРАММЫ НА ЯЗЫКЕ С++
Архитектура программы
В основном для реализации программы были использованы функции циклов (if, for), для перемещения картинок и формирования игрового поля. Так же использовалась процедура rand для случайного формирования матрицы чисел.
3.2. Выбор стандартных визуальных и не визуальных компонентов
Для создания интерфейса использовались:
· Button;
· Label;
· Panel;
· TrackBar;
· Textbox.
· PictureBox
- Form1.