Едноставна имплементација на играта сложувалка која нуди избор на категорија.
Windows Forms project by:
- Nikola Nikolovski https://github.com/Amigo96
- Viktorija Ristova https://github.com/vikiristova
Сложувалката е игра или проблем што ја тестира способноста на една личност за знаење, препознавање шифри (patterns), и инвентивност. Од корисникот се бара да ги подреди делчињата на логичен начин со цел да се совпаднат со оригиналот. Имплементацијата се заснова на т.н. комбинациски сложувалки односно сет од парчиња со кои по пат на манипулација се доаѓа до различни комбинации. Операцијата искористена за донесување на некаква комбинација како состојба на сложувалката е поместување на координатите на копчето кое е кликнато и кое се наоѓа до празното поле. Корисничкото сценарио во нашата имплементација започнува со избор на категорија:
- Уметнички дела од познати автори
- Познати места во светот Откако корисникот ќе се одлучи за категорија од која ќе сака да составува слика со помош на кодот енкапсулиран во функцијата Image imageChosen(string chosen) од податочните структури (во случајов ArrayLists од string-ови) во кои го чуваме source-от на сликите околу кои се врти главната приказна на проектот, рандом се генерира индекс во низата со патеки до сликите. На клик на копчето Започни целната слика се сецка на 8 парчиња ( и едно празно поле), со димензии на копчињата 90x90.
private void cropGoalImage(Image goalImage, int width, int height)
{
Bitmap bitmapa = new Bitmap(width,height);
Graphics g = Graphics.FromImage(bitmapa);
g.DrawImage(goalImage, 0, 0, width, height);
g.Dispose();
int moveRight = 0;
int moveDirection = 0;
for (int x = 0; x < 8;x++)
{
Bitmap partialImage = new Bitmap(90,90);
for (int i = 0; i < 90;i++ )
{
for (int j = 0; j < 90; j++) {
partialImage.SetPixel(i,j,bitmapa.GetPixel(i+moveRight,j+moveDirection));
}
}
images.Add(partialImage);
moveRight += 90;
if (moveRight == 270) {
moveRight = 0;
moveDirection += 90;
}
}
}
Рандом разместување на поделените парчиња од оригиналната слика се прави во функцијата partialImagesAsButtons(ArrayList images)
private void partialImagesAsButtons(ArrayList images)
{
int i=0;
int[] array = { 0, 1, 2, 3, 4, 5, 6, 7 };
array = shuffle(array);
foreach (Button b in pnlSlozuvalka.Controls)
{
if (i < array.Length)
{
b.Image = (Image)images[array[i]];
i++;
}
}
}
Пример почетна состојба на сложувалката
Со модулот moveButton(Button button) се овозможува поместување на копчињата соседни на празното поле на клик настан.
private void moveButton(Button button)
{
if (((button.Location.X == point.X - 90 || button.Location.X == point.X + 90)&&button.Location.Y==point.Y)||(button.Location.Y == point.Y - 90 || button.Location.Y == point.Y + 90)&&button.Location.X==point.X)
{
Point swap = button.Location;
button.Location = point;
point = swap;
updateCounter();
}
if(point.X==180&&point.Y==180)
{
validationCheck();
}
}
Додека корисникот се обидува да ја реши загатката во форма на сложувалка за да добие адреналинско чувство и да се инкрементира факторот на гејмификација, паралелно се декрементира бројот на преостанати чекори кои може да ги направи за да сложувалката да премине во целната состојба. Модулот validationCheck() утврдува дали копчињата се наоѓаат во посакуваната состојба и заедно со бројачот може да резултира со:
или
Дополнителна функционалност за започнување од почеток се овозможува со кликање на копчето Од почеток на кое се рестартира апликацијата. На корисникот му се дава помош во форма на слика со мали димензии (thumbnail) во левиот дел од формата.