{"comment":{"url":"https://api.github.com/repos/mPopovska/Sudoku-master/comments/11124015","html_url":"https://github.com/mPopovska/Sudoku-master/commit/53518b8cb190062bfbba4d662e0a02e28f682273#commitcomment-11124015","id":11124015,"user":{"login":"ikozolovska","id":12382501,"avatar_url":"https://avatars.githubusercontent.com/u/12382501?v=3","gravatar_id":"","url":"https://api.github.com/users/ikozolovska","html_url":"https://github.com/ikozolovska","followers_url":"https://api.github.com/users/ikozolovska/followers","following_url":"https://api.github.com/users/ikozolovska/following{/other_user}","gists_url":"https://api.github.com/users/ikozolovska/gists{/gist_id}","starred_url":"https://api.github.com/users/ikozolovska/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ikozolovska/subscriptions","organizations_url":"https://api.github.com/users/ikozolovska/orgs","repos_url":"https://api.github.com/users/ikozolovska/repos","events_url":"https://api.github.com/users/ikozolovska/events{/privacy}","received_events_url":"https://api.github.com/users/ikozolovska/received_events","type":"User","site_admin":false},"position":null,"line":null,"path":"","commit_id":"53518b8cb190062bfbba4d662e0a02e28f682273","created_at":"2015-05-10T16:49:32Z","updated_at":"2015-05-10T16:49:32Z","body":"Објаснување на проблемот\r\n\r\nСудоку  е логичка игра (сложувалка, задача). Целта на оваа канонична сложувалка е да се внесе број од 1 до 9 во секое поле од 9×9 матрицата, која пак е составена од 3×3 подматрици (наречени „региони“), почнувајќи со разни броеви кои се дадени во некои полиња. Секоја редица, колона и регион мора да содржи една и само една инстанца од секој од броевите од 1 до 9. За да се реши задачата потребно е трпение и логички способности. И покрај тоа што прв пат се појавува во американско енигматско списание во 1970, „Судоку“ добива на популарност и во Јапонија во 1986 г, за во 2005 г. да се здобие со меѓународна популарност. Првото светско првенство во судоку е одржано во Лука, Италија, од 10 до 12 март 2006 г.\r\n\r\nИмплементација на решение\r\nНашата апликација содржи:\r\n•\tПочнување на нова игра\r\n•\tИзбирање на одредени опции\r\n•\tПрикажување на најдобри резултати\r\n•\tИзлегување од играта\r\n\r\nИмплементацијата на решението ја започнавме со развивање на формата Form1 (која што го претставува почетниот изглед на играта Судоку). Почетниот изглед нуди повеќе опции:\r\n•\tPlay \r\n•\tOptions \r\n•\tStats\r\n•\tExit \r\n\r\nСо избор на опцијата Play се отвара нова форма (форма Difficulties) која што нуди 4 тежини (во зависност од избраната тежина соодветно се генерира сложувалка). Откако ќе се одбере тежина, се отвара нова форма (форма Game), каде што соодветно свири музика во позадина (доколку е одбрана една од мелодиите кои што се поставени како опции од формата Options). Исто така, на формата има поставено textbox за внесување на името на играчот (соодветно има поставено валидација која што го обврзува играчот да го внесе името) и лабела во која што се прикажува времето од започнување на играта. Дополнително се поставеи три копчиња и при нивно кликнување се извршуваат соодветни актиности:\r\n•\tHint - се прикажува понуда за помош (доколку е избрана соодветната опција за помош од формата Options). При клик на копчето Hint на првoто поле кое што ќе биде слободно најдено, ќе се впише соодветната вредност која што треба да биде поставена на тоа поле. \r\n•\tEnd - формата Game се затвора, а се појавува формата со тежини (формата Difficulties). \r\n•\tCheck – функцијата на ова копче соодветно е опишана подоле во документот.\r\n\r\nСо избор на опцијата Options се отвара нова форма (форма Options) каде што играчот \r\nможе да направи избор:\r\n•\tДали да свири некоја од музиките кои што се поставени во позади додека ја решава сложувалката (соодветно има поставено опција None со која се спречува свирењето на музиката) \r\n•\tДали да биде покажано копчето за помош (hint) на формата  Game.\r\n\r\nСо избор на опцијата Stats се отвара нова форма (форма Stats) каде во listbox се прикажувааат имињата на играчите со соодветното време за коешто ја решиле сложувалката подредени во опаѓачки редослед. Исто така, класите се серијабилни така што при затворање на формата податочите остануваат зачувани.\r\n\r\nСо избор на опцијата Exit се затвора формата и со тоа се затвора и апликацијата.\r\n\r\nНа главната форма Form1 поставени се:\r\n•\tAcceptButton кое што ја има улогата на Play\r\n•\tCancelButton кое што ја има улогата на  Exit.\r\n\r\nНа секоја од формите соодветно се поставени акции при избор на копчето Back и при затворање на формата со што од моменталната форма се враќа играчот на претходната форма.\r\n\r\nОпишување на функции од кодот\r\nВо класата Game користиме конструктор со аргументи public Game(Difficulties d, Form1 f, Options o) кој прима инстанци од формите\r\nDifficulties, Form1 и Options. Инстанцата од Options ни е потребна за да знаеме кое ниво на тежина е одбрано и според тоа да \r\nприкажеме матрица со соодветна тежина. Во зависност од тежината имаме различни услови за тоа колку полиња ќе останат празни за\r\nпополнување. За секоја од тежините имаме по 4 матрици од кои се избира една на случаен начин. Откако ќе се\r\nизбере една матрица, се генерира 81 TextBox кои соодветно се пополнуваат со вредности. Секако дел од нив ги оставаме празни за пополнување,\r\nостанатите на својството Enabled имаат вредност false.\r\n\r\nФункцијата checkSudoku() се повикува со клик на копчето Check во формата Game. Со оваа функција проверуваме дали \r\nима непополнети полиња или погрешно внесени вредности, притоа се испишува соодветна порака. Доколку има погрешно внесени вредности\r\nистите ги бришеме.\r\n\r\nФункцијата btnHint_Click() се повикува со клик на копчето Hint во формата Game. Со оваа функција овозможуваме помош. Во една игра има вкупно 5 Hints. Откако ќе се искористат сите на секој нареден клик се испишува порака дека немате повеќе Hints. Доколку сите полиња во формата се пополнети оваа функција не прави ништо. Исто така бројот на Hints останува непромент. Во оваа функција користиме помошна функција која се вика getHint(). Функцијата проверува дали има непополнети полиња во формата и доколку има враќа true, во спротивно враќа false.\r\n\r\nУпатство за играње на играта\r\nОткако ќе се стартува почетната форма Form1 од понудените опции треба да се избере Play (доколку играчот сака да смени одредени опции, тоа може да го направи со избророт од опцијата Options). Потоа играчот треба да избере соодветна тежина со која што ќе биде генерирана сложувалката.Откако ќе се избере соодветната тежина, се прикажува генерираната сложувалка и играчот може да започне со нејзино решавање. Секој играч има соодветно овозможени 5 можности за помош (5 hints). Откако ќе се пополнат сите полиња на сложувалката, се проверува дали вредностите кои што се внесени се валидни. Доколку внесените вредности се валидни, се испишува соодветна порака и играчот (неговото име и времето за кое што ја решил сложувалката) се додава во листата во формата Stats. Со тоа играта завршува. Доколку има внесените вредности се невалидни или пак има останато некое празно поле, соодветно се испишува порака и играчот е вратен на формата Game се додека не се поправат сите неправилности.\r\n\r\nScreen Shots\r\nИзгледот на главната форма\r\n\r\n ![sudoku](https://cloud.githubusercontent.com/assets/12382501/7555234/df53c346-f744-11e4-860a-d8bc6751d032.png)\r\n\r\nИзгледот на формата Difficulties\r\n \r\n![difficulties](https://cloud.githubusercontent.com/assets/12382501/7555244/20b94e32-f745-11e4-8bf6-383da840a14b.png)\r\n\r\n\r\nИзгледот на формата Options\r\n \r\n![options](https://cloud.githubusercontent.com/assets/12382501/7555247/36145290-f745-11e4-80d4-cdbb54764f89.png)\r\n\r\nИзгледот на формата Game\r\n\r\n![sudokugame](https://cloud.githubusercontent.com/assets/12382501/7555249/429b036a-f745-11e4-9c38-abc4b8edf32c.png)\r\n\r\n \r\n"}}