СЕМИНАРСКА РАБОТА ПО ВИЗУЕЛНО ПРОГРАМИРАЊЕ
Име на проектот: Anagram Magic
Членови на тимот: Стефанија Печевска,Ивана Трајановска,Христијан Сарџоски
Идејата на нашата игра е земена од играта AnagramMagic ,која може да ја погледнете на следниот линк http://www.miniclip.com/games/anagram-magic/en .Целта е да се погодуваат што е можно подолги зборови од рандом генерирани букви.Секогаш ќе бидат дадени точно 9 букви кои како што веќе посочив ќе се добиваат на сосема случаен начин и тие ќе бидат избрани од 26 можни букви,односно генерираме букви од англиската азбука.Ова во нашиот проект претставува класата RandomLetters.cs.
Сепак, нашата игра е еден вид на модификација од вистинската.Содржи две форми од кои едната е за инструкциите како да се игра играта (Instruction.cs) и се стигнува до неа преку копчето How to play од почетната панела на втората форма.
Bтората форма е главната форма (AnagramMagic.cs) која се состои од три панели. Првата панела е основниот дел на играта со четири копчиња од кои едното веќе го споменав.Другите три се за нова игра New Game, за гасење на апликацијата Quit Game и регулирање на звук(Song.cs). Со New Game се префрламе на втората панела.
Втората панела се состои од поле за име кое не треба да биде подолго од 15 карактери(било какви) и неколку копчиња.Копчињата Consonants и Vowels служат за рачно избирање на букви од кои ќе треба да се формира збор и вкупно треба да се изберат точно 9,а копчето 9 Random Letters всушност го прави именуваното ,веднаш генерира 9 букви.Тогаш се овозможува и да се започне со играње преку Play ,a со Back се враќате на првата панела.Со Play се префрламе на третата и главна панела.
![alt tag] (https://cloud.githubusercontent.com/assets/7173015/2939107/0ad09dfa-d937-11e3-87f5-0e5cf1983bee.png)
Главната панела се состои од еден тајмер претставен преку Пита(која произлегува од класта Pie.cs) кој што информира за преостанатото време на секој играч,започнува од 30 секунди и тоа е време за кое треба да се состави било каков збор кој ќе биде валиден од соодветно генерираните букви.Овозможено е користење на тастатура за бирање на буквите или користење на лев клик.Во текот на тие 30 секунди овозможени се копчињата IAMDONE и SHUFFLE така што со притискање на првото се означува дека играчот сака да премине на наредна рунда и најверојатно дал соодветен одговор, а со второто копче се овозможува размешување на генерираните букви со цел полесно да може да се увиди некој збор.Играта за еден играч трае 5 рунди и во 5тата рунда единствена разлика од сите претходни рунди е тоа што играчот мора да погоди збор со должина 9 , односно да се искористат сите букви,при што во 5тата рунда секогаш ќе постои таков збор , односно буквите кои ќе се генерирани ќе даваат барем едно точно решение со 9 букви, а сите други зборови со должина помала од 9 не се признаваат за точни.Од прва до четврта рунда воопшто не е битно колкава ќе биде должината се додека е точен зборот , но сепак поенатата на самата игра е да се потрудите колку е можно да се формираат подолги зборови.Играчот преминува од една на друга рунда со помош на копчето Next Round.Поените ќе претставуваат збир од сите рунди ,односно збир од должината на сите зборови кои се погодени,секоја буква носи еден поен доколку зборот е точен.Тука се наоѓа и соодветен Group Box кој ги содржи деталите за соодветниот играч ,неговото име,поени и најдобриот (најдолгиот) погоден збор, и постои уште едно поле коа бележи дали тековно избраниот збор е валиден или не.
![alt tag] (https://cloud.githubusercontent.com/assets/7173015/2939178/f09611a0-d93a-11e3-9ef5-ecc2513b73e2.png)
Валидноста исто така ја претставуваме со едно зајче(слика) кое преминува низ екранот доколку зборот е невалиден или појавување на ѕвездички(слика претставена со класата Stars.cs) доколку одговорениот збор во соодветната рудна е валиден.
Покрај досега споменатите копчиња , постојат и Play Again ,New Game,Best Players и истото копче за регулирање на звукот како на почетната панела.Со Play Again ,истиот играч почнува да игра повторно и се враќа назад на втората панела каде избира рачно букви или бира веднаш да се генерираат 9 букви при што нема можност за промена на името кое веќе го избрал,додека со New Game се овозможува и полето за избирање на ново име , односно може да се претстави нов играч.Копчето Best Players(функционира со помош на класата ReadWriteCsv.csv) ги прикажува најдобрите 10 играчи(секој играч се дефинира преку класата Player.cs) кои некогаш играле на соодветниот играч и функционира при повторно активирање на апликацијата.
![alt tag] (https://cloud.githubusercontent.com/assets/7173015/2939180/09e3f0d2-d93b-11e3-861f-b8575a6e3b2a.png)
Селектираните букви се пренесуваат на местата кои што се празни и доколку сакаме да избришеме некоја од избраните овозможено е со лев клик на последно избраната или со користење на backspace.Имате можност да ја враќате само последната буква и последователно во обратен редослед може да се вратат сите избрани букви , но не може да го бришете одговорот по друг редослед.Проверката дали избраните букви формираат валиден збор всушност ја правиме со споредување на соодветно формираниот збор со зборови сместени во дрво-структура исполнето од зборови од Resources,односно во Resources поставивме датотека која содржи зборови од англискиот јазик(речник),сето ова се прави преку класата Words.cs.
Опис на класата RandomLetters.cs
Со иницијалзиација на оваа класа во соодветната форма овозможуваме исполнување на поставените копчиња од истата форма со случајно генерирани букви , со цел копчињата да ни претставуваат визуелен приказ дека работиме со тастатура.Односно текстот во копчињата е по една буква.Во конструкторот на објектот од класата RandomLetters праќаме листа од копчиња од формата AnagramMagic.cs.
Тука се наоѓаат и неколку функции(операции) како pickConsonants(),со чија помош се избираат случајно генерирани согласки помеѓу 4 и 6 и pickVowels(),со чија помош се избираат случајно генерирани самогласки исто така помеѓу 4 и 6 со цел збирот да биде 9.Двете ги користиме за исполнување на текстот на соодвените копчиња.
Покрај овие функции кои враќаат како резултат листи од карактери ,исполенто исклучиво со букви,постои и функцијата fillRandom() која овозможува веќе избраните букви кои се запишани како текст на копчињата да може да си ги преместуваат местата без при тоа да е потребно менување на локациите на копчињата,односно оваа функција помага при имплементација на Shuffle копчето ,ги разместуваме веќе избраните букви на различни копчиња без да се генерираат нови и без да ги менуваме позициите на копчињата.Исто така оваа функција прави ToUpper() затоа што се повикува и еднаш при првото полнење на копчињата,односно сите стануваат големи со цел да нема понатамошни забуни при користење и формирање на збор,проверка на збор итн.Ова е void функција.
Тука постојат и функциите getVowel() и getCons() кои што враќаат по една согласка ,односно самогласка соодветно(враќаат char).Двете функционираат на ист начин , го користат Random објекот и со негова помош добиваме соодветно случајна буква.Двете се користат во втората панела од главната форма , односно со нивна помош доколку играчот сака да избира рачно буква по буква тие се користат при користење на копчињата Consonants и Vowels.
Опис на класата Star
Во оваа класа чуваме една битмапа во која се наоѓа слика од ѕвезда и една точка која ја земаме од главната форма преку конструкторот , а тоа е локацијата на лабелата во која се испишува VALID кога внесениот збор од страна да играчот е валиден. Покрај конструкторот во оваа класа се наоѓа методот Draw кој служи за исцртување на 5 ѕвезди. Секоја ѕвезда се исцртува на истата локација како секоја од буквите од зборот VALID. Во главната форма кога е погоден даден збор наизменично трепкаат ѕвездите и буквите на лабелата. Тоа е овозможено преку настанот timer3_Click во кој со помош на еден flag наизменично се повикува исцртување на ѕвездите или прикажување на лабелата.