Трећа београдска гимназија
Београд, Његошева 15
Матурски рад из информатике
ПРОГРАМИРАЊЕ У C#
Ментор:
Ученик:
Милош Мартиновић, проф
Урошевић Ђорђе, IV-8
Београд, јун 2012. год.
Програмирање у C#
Ђорђе Урошевић, IV-8
Садржај 1. УВОД.............................................................................................................................. УВОД .............................................................................................................................. 2 1.1. Програмирање .......................................................................................................... 2 1.2. Microsoft Visual Studio 2010 и C#............................................................................ C# ............................................................................ 2 2. ПРИНЦИПИ ПРОГРАМИРАЊА ................................................................................ 3 2.1. Објектно оријентисано програмирање ................................................................... 3 ПРОБЛЕМА....................................................................................................... 4 3. ОПИС ПРОБЛЕМА....................................................................................................... 3.1. Игра „Јамб“ ............................................................................................................... 4 Правила...................................................................................................................... 5 3.2. Правила...................................................................................................................... 4. КОРАЦИ ЗА РЕШАВАЊЕ ПРОБЛЕМА.................................................................... ПРОБЛЕМА.................................................................... 6 4.1.Коцкице 4.1.Коцкице ..................................................................................................................... 6 4.2. Колоне ....................................................................................................................... 7 4.3. Поља од 1 до 6 .......................................................................................................... 8 4.4. Минимум и максимум ............................................................................................. 9 4.5. Трилинг, покер и јамб ........................................................................................... 10 4.6. Кента и фул ............................................................................................................. 11 МЕТОДА .................................................. ........ 12 5. ПРИКАЗ ИНТЕРФЕЈСА, КОДА И МЕТОДА.................................................. 12 5.1. Битни делови кода .................................................................................................. 12 5.2. Методе ..................................................................................................................... 15 5.3. Интерфејс ................................................................................................................ 17 6. КОНАЧНИ ПОГЛЕД И НАЧИН КОРИШЋЕЊА ИГРИЦЕ .................................. 20 7. ЗАКЉУЧАК................................................................................................................. ЗАКЉУЧАК ................................................................................................................. 21 ЛИТЕРАТУРА............................................................................................................. ЛИТЕРАТУРА ............................................................................................................. 22
1
Програмирање у C#
1.
Ђорђе Урошевић, IV-8
УВОД
1.1. Програмирање Програмирање је термин под којим се најчешће подразумева креирање рачунарских програма, што укључује детаљну теоријску разраду проблема, налажење концептуалног решења и имплементацију коришћењем неког од програмских језика. У најопштијем смислу програмирање значи дефинисање низа корака који се обављају један за другим у циљу извршења одређеног задатка. Постоје разни програмски језици, нпр:
Assembler
Basic
Pascal
Java
Fortran
C/C++ и C#
1.2. Microsoft Visual Studio 2010 и C# Microsoft Visual Studio 2010 је развојно окружење за израду програма у коме је могуће програмирати на неколико различитих програмских програмс ких језика међу којима су: су: C/C++, VB.NET, C#, F#. Такође подржава и XML, HTML, CSS и JavaScript. C# је млад програмски језик који је настао 2002. године као саставни део MS .NET Framework-а Framework-а 1.0. То је објектно Visual Studio Studio лого Слика 1. MS Visual оријентисани језик опште примене, и намењен је изради апликација за .NET Framework платформу. Настао је као еволуција C++/C језика коју је креирао Microsoft да би се радило са .NET Framework окружењем. По синтакси је јако сличан CC-у и Јаvi, тако да уколико неко познаје те програмске језике веома лако може да пређе на C#, као и обрнуто. 2
Програмирање у C#
Ђорђе Урошевић, IV-8
Слика 2. Изглед кода у C#-у
Предност C#C#-a у односу на C++ је у томе што је синтакса простија, па је и самим тим израда апликација лакша. C# се најчешће користи за израду:
Windows апликација
Web aпликација
Web сервиса
Такође, уколико је потребан приступ базама података, то се може урадити коришћењем ADO.NET одељка .NET окружења.
2.
ПРИНЦИПИ ПРОГРАМИРАЊА
2.1. Објектно оријентисано програмирање Објектно оријентисано програмирање или краће ООП је један од могућих приступа програмирању рачунара. За разлику од осталих приступа, у којима је тежиште на акцијама које се врше на податковним структурама, овде је тежиште на пројектирању апликације као скупа објеката који измењују поруке. Објектно оријентисано програмирање (Оbject Oriented Programming, Programming , OOP ) је нови приступ реализацији софтвера као модела реалног света. У објектним програмским системима све је представљено као објекат (процеси, текст, У/ИУ/И- операције итд.). Објектно програмирање заправо најсличније писању симулација за реалне објекте. Од раних 8080 -их па до данас, ООП је постало најутицајније у 3
Програмирање у C#
Ђорђе Урошевић, IV-8
комерцијалном развоју софтвера. Програмски језици попут C++ i Java програмски језик су својом популарношћу утврдили водећи статус ООП као на неки начин обавезног приступа при развоју софтвера данас, тако да су и језици који нису били објектно оријентисани додали ООП концепте (Visual Basic, Pascal…)
3.
ОПИС ПРОБЛЕМА
3.1. Игра „Јамб“ Игра јамб је игра коцкицама. Циљ игре је добити што више поена бацањем коцкица, при чему се добијају различите комбинације, од којих свака носи одређен број поена. Настала је из игре Yahtzee, коју је осмислио Милтон Бредли, а која је настала 5050-их година XX века. Изузетно је популарна на просторима бивше Југославије. Може је играти неограничен број играча, а најмање два. Ја сам покушао да направим верзију јамба за једног играча.
Слика 3. Обичан јамб листић 4
Програмирање у C#
Ђорђе Урошевић, IV-8
3.2. Правила Како бих прилагодио ову игру једном играчу, ограничио сам број колона на 5 најпопуларнијих: 1. „На доле“ - попуњава са редом од 1 до јамба, дакле поља не смеју да се прескачу. 2. „Слободна“ - може да се попуњава по избору, тј. било којим редом. 3. „На горе“ - попуњава се од јамба до 1, и као и код прве колоне поља не смеју да се прескачу. 4. Медијална (две стрелице супротно окренуте) - она се редом попуњава од максимума ка горе и од минимума ка доле. 5. Ручна - Једина колона у којој је дозвољено само једно бацање је Ручна. Резултат мора бити уписан после првог бацања.
Слика 4. Колоне у јамбу
Играч би требало да настоји током игре да у поља од 1 до 6 у свим колонама уписује довољно велике резултате да би на крају када сабира поља од 1 до 6 имао збир 60 или већи, јер се у тим случајевима добија бонус од 30. Нпр. ако у колони имамо четири кеца, три двојке, три тројке, четири петице и три шестице, збир ће бити 62. Када на то додамо 30 у пољу збир пишемо 92. Максимум и минимум су поља која се одузимају и тај резултат множи са бројем јединица. Значи ако имамо максимум 28 и минимум 7, а у тој колони имамо 4 јединица, у пољу Збир испод минимума уписујемо 84. Уколико се деси да је минимум већи од максимума, пише се резултат 0. Доњи део колоне је настао по угледу на игру картама покер:
Кента, представља коцкице по реду (од 1 до 5 или од 2 до 6). Бодује се на следећи начин: Ако се кента добије из првог бацања пише се 66, ако је из другог 56 и из трећег 46 поена. Трилинг, представља комбинацију три исте коцкице, на збир коцкица се додаје 20. Фул, представља комбинацију од три исте и две исте коцкице (пет истих коцкица се не прихвата као фул), додаје се 30. 5
Програмирање у C#
Ђорђе Урошевић, IV-8
Покер, представља четири исте, додаје се 40.
Јамб, представља пет истих коцкица, додаје се 50.
Ако играч након бацања нема шта да упише мора да прецрта неко поље (осим максимума и минимума, где се мора уписати вредност), али има право да прецртава само поља која су му на реду. Поља у слободној и ручној колони се увек могу прецртавати.
4.
КОРАЦИ ЗА РЕШАВАЊЕ ПРОБЛЕМА
4.1. Коцкице Први проблем који се јавио јесте бацање коцкица. Потребно је притиском на дугме генерисати 6 различитих бројева, пратити колико је бројева бацања остало (зауставити могућност поновног бацања ако је већ бачено 3 пута), када се нека коцкица изабере, спречити да се промени при следећем Слика 5. Коцкице бацању, при сваком упису у колону ресетовати број преосталих бацања на 3. Само бацање коцкица се врши притиском на дугме. Прво се помоћу функције Random.Next генерише 6 бројева у 6 intint-ова, који се исписују у поља за текст, која представљају 6 коцкица. коцкица. Након сваког притиска на дугме за бацање, помоћу IFIF-а се проверава да ли је број бацања мањи од 3, и да ли су сви бројеви кликнути. Када број бацања достигне 3, или су сви бројеви кликнути, притиском на дугме, ништа се не догађа. Уколико је на неку коцкицу кликнуто, на пример на прву, bool prvibrojkliknut добија вредност Слика 6. Коцкице у програму true. true. У том случају, приликом следећег бацања, вредност те коцкице остаје неизмењена. Поновним кликом на ту коцкицу вредност bool-a ће се променити на false. false. На слици бр. 6 је приказано бацање приликом ког ко г су изабране 3 четворке. Изнад „коцкица“ се налази текст који показује број преосталих бацања, који се мења при сваком бацању, и ресетује при упису резултата у колону. 6
Програмирање у C#
Ђорђе Урошевић, IV-8
4.2. Колоне На слици бр. 4 су приказане колоне које се користе у овој верзији Јамба. После сваког бацања, Играч може да упише резултат у сваку колону у која му правила дозвољавају. Постоји много услова који морају да се испуне, како би се резултат уписао. Неки услови су општи, а неки услови су посебни за сваку колону. На пример, пре сваког уписа, помоћу IF-a IF-a се проверава да ли није изабрана ниједна коцкица, у том случају изаћи ће порука која ће питати Играча да ли жели да упише резултат 0 у изабрану колону. У зависности од његовог одговора, уписаће се 0, или се ништа неће догодити. (слика бр. 7) Слика 7. Уписивање нуле
Такође, после сваког уписа резултата уписа резултата у било коју колону, активира се метода „novipotez()“ novipotez()“ која све бројеве који су кликнути враћа у првобитно стање, ресетује бројач потеза на почетну вредност и тако започиње нови потез. Посебне услове ћу објаснити посебно за сваку колону: 1.
„На доле“ - На почетку игре је дозвољен упис само на поље број 1, за сва остала поља постоји IF, IF, који проверава да ли је претходно поље попуњено, и ако јесте, дозвољава упис у њега. На пример, ако кликнемо на број 3 у овој колони, извршиће се упит: if (a2.Text != "" "") )
И уколико је нешто заиста уписано у поље а2, проверава се за сваки број, да ли је је кликнут, и да ли је то број 3, и сваки пут се променљива „rez” rez” повећава за 3. На крају се вредност те променљиве додељује пољу а3, и прелази се на следећи потез. Такође, посебни услови су за поља код броја 6, код минимума и код јамба. Код броја 6 се након уписа броја уписује и збир у поље az1, az1, након уписа у поље минимум, уписује се збир у поље аz2 и то формулом: az2 = (aMax - aMin)* a1 7
Програмирање у C#
Ђорђе Урошевић, IV-8
Упис у поље аz3 je слично као и код поља az1, az1, само што се рачунају резултати поља у доњем делу колоне. 2.
„Слободна“ - Слободна колона је нешто једноставнија зато што не постоји одређени ред за уписивање бројева у колоне, али се зато после сваког уписа мора проверити да ли су уписани сви бројеви из тог дела колоне, како би се уписао збир. Ту важе већ поменути услови за збир.
3.
„На горе“ – Исто – Исто као колона „На доле“ само што је обрнуто, први упис је јамб, а последњи број 1. Због тога се проверавају прове равају поља: Кента и број 1. А приликом уписа код броја 1 се уписује резултат и у поље cz1 и cz2
4.
Медијална (две стрелице супротно окренуте) - Исто као и „На горе“ и „На доле“ само што се креће од Минимума на доле и Максимума на горе.
5.
Ручна - Исто као и у слободној, само што је додат услов који проверава да ли је број бацања 1, и уколико није, избацује поруку која пита корисника да ли жели да упише резултат 0.
Слика 8. Грешка у уписивању
4.3. Поља од 1 до 6 За сваку колону, код за поља од 1 до 6 је мање више сличан. Проверава се за сваку коцкицу да ли је кликнута, и да ли вредност кликнуте коцкице одговара кликнутом пољу. У том случају променљивој rez се додаје вредност кликнутог броја. Такође, постоје неки посебни услови, у зависности од изабране колоне 8
Програмирање у C#
Ђорђе Урошевић, IV-8
(нпр за ручну колону се проверава да ли је прво бацање, за број 6 у првој колони се рачуна збир свих бројева, итд.). На наредној слици можете видети део кода за поље број 2 у слободној колони:
Слика 9. Код за поље број 2
4.4. Минимум и максимум Код минимума и максимума, потребно је употребити већ поменуту формулу ((max-min)*број ((max-min)*број јединица), јединица ), и у зависности од тога да ли су попуњена сва поља (јединице, максимум и минимум) исписати збир. Потребно је спречити да се изабере мање од 5 коцкица, као и свих 6.
Слика 10. Минимум и максимум 9
Програмирање у C#
4.5.
Ђорђе Урошевић, IV-8
Трилинг, покер и јамб
Трилинг, покер и јамб су нешто компликованији од остатка. Пошто осим сабирања истих бројева, треба проверити да ли истих бројева има 3,4 или 5. Како бих олакшао посао, први услов је, да је број кликнутих коцкица 3 за трилинг, 4 за покер и 5 за јамб, а тек после тога се проверава које су коцкице изабране, bool n-takockicakliknuta се мења у true, свакa n-та n-та true, и након тога, свакa коцкица чији је bool true се додаје на укупан збир rez, и на крају, у зависности да ли се ради о трилингу, покеру или јамбу, додаје се одређен број поена (20,40,50). Направљени су посебни упити: dalijetriling, dalijetriling, dalijepoker, dalijepoker, dalijejamb, dalijejamb, којима се проверава да ли се испуњавају одређени услови. О њима нешто касније. Наравно, и овде важе посебни услови у колонама Ручна и Слободна.
Слика 11. Ручни јамб са шестицама, омиљено бацање сваког играча
10
Програмирање у C#
4.6.
Ђорђе Урошевић, IV-8
Кента и фул
Највећи проблем са којим сам се сусрео приликом израде овог програма, били су кента и фул. Код кенте је потребно проверити о ком се бацању ради, и да ли су изабране коцкице у реду од 1 до 5 или од 2 до 6. То сам урадио тако што сам вредности коцкица од 1 до 6 назвао: назвао : o, p, q, r, s, t и затим проверавамо редом, да ли: Нека од тих променљивих има вредност 1 и да ли нека од тих променљивих има вредност 2, и тако све до 5; 5 ; или исто то, али од 2 до 6. Уколико је неки од ових услова тачан, значи да се ради о кенти, и након тога треба проверити да ли кликнуте коцкице сачињавају кенту, и у зависности од тога које је бацање у питању, доделити одређен број поена. Код фула је проблем што пратимо две различите вредности коцкица (XXYYY), XXYYY), и јавља се проблем уколико нпр. коцкице буду 444226, 444226, и ако играч изабере 44426. 44426. Мора се проверити да ли је пет коцкица кликнуто, и да ли баш оне дају фул. То сам решио тако што сам направио упит dalijeful, и у њему сам испитао да ли се ради о фулу на следећи начин: Прво сам направио 6 променљивих, које имају почетну вредност 0, то су: jedan, jedan, dva, dva, tri, tri, cetiri, cetiri, pet, pet, ако sest, sest, и затим сам за сваки број испитивао коју вредност има, и на пример има 4 јединица и 2 петице, променљивa променљив a jedan би имала вредност 4 а променљива pet вредност 2. Након тога се проверава редом: Да ли има 3 јединица и 2 било које друге коцкице кликнуте? Да ли има 3 двоје и 2 било које друге коцкице кликнуте? И тако редом до 6. Такође треба пазити да у случају да коцкице буду XXXXXY, XXXXXY, не буде фул. У случају да је испуњен неки од 6 услова, bool ful добија вредност true
11
Програмирање у C#
Ђорђе Урошевић, IV-8
5.
ПРИКАЗ ИНТЕРФЕЈСА, КОДА И МЕТОДА
5.1.
Битни делови кода
Провера да ли се ради о трилингу:
Слика 12. Трилинг 12
Програмирање у C#
Ђорђе Урошевић, IV-8
Провера да ли се ради о покеру:
Слика 13. Покер
13
Програмирање у C#
Ђорђе Урошевић, IV-8
Провера да ли се ради о јамбу:
Слика 14. Јамб
14
Програмирање у C#
5.2.
Ђорђе Урошевић, IV-8
Методе
Сада ћу приказати методе novipotez() i krajigre(), krajigre(), које се покрећу након сваког уписа. Прва ресетује све битне bool-ове, bool-ове, коцкице, и у њој се покреће krajigre(), krajigre(), и тако се приликом сваког потеза проверава да ли су сва поља попуњена, и уколико јесу, исписује се коначан резултат, уз пратећу поруку.
Слика 15. Метода novipotez()
15
Програмирање у C#
Ђорђе Урошевић, IV-8
Слика 16. Метода krajigre()
На слици бр. 16 поред броја један, налази се провера да ли су сва поља попуњена, поред броја 2 рачуна се збир свих збирова, а поред броја 3, ресетују се сва поља, бришу се сви резултати, покреће се нова партија.
16
Програмирање у C#
Ђорђе Урошевић, IV-8
5.3. Интерфејс На слици 17 можемо видети приказ празне табеле, то је прво што видимо при покретању игре:
Слика 17. Интерфејс
17
Програмирање у C#
Ђорђе Урошевић, IV-8
На слици 18 можемо видети крај партије, као и поруку која нас обавештава о нашем резултату, после које следи питање да ли желимо да почнемо нову игру (слика 22):
Слика 18. Крај партије
18
Програмирање у C#
Ђорђе Урошевић, IV-8
На сликама 19, 20, 21 и 22, можемо видети неке од порука које излазе током игре:
Слика 19. Грешка када нису изабране све коцкице
Слика 20. Провера за упис нуле
Слика 21. Грешка приликом уписа у ручну колону
Слика 22. Нова игра
19
Програмирање у C#
6.
Ђорђе Урошевић, IV-8
КОНАЧНИ ПОГЛЕД И НАЧИН КОРИШЋЕЊА ИГРИЦЕ
На слици 17 можемо видети целокупан интерфејс. Начин коришћења игрице је веома једноставан. Кликом на дугме баци, бацају се коцкице, кликом на бројеве, бирају се коцкице, и кликом на поље, уписује се резултат. Циљ ми је био да коришћење игрице буде што једноставније, и да се све обавља једним кликом. Уколико корисник промаши поље, изабере мање коцкица, или направи било какву грешку, постоје поруке (слиике 19 и 21) 21) које обавештавају корисника у чему је погрешио. Како не би дошло до грешке, ако корисник жели да прецрта неко поље (упише резултат 0), пре тога се појави питање (слика 20) 20) на које корисник мора потврдно да одговори како би се поље заиста прецртало. Притиском на F2, F2, у сваком тренутку се може почети нова игра.
20
Програмирање у C#
7.
Ђорђе Урошевић, IV-8
ЗАКЉУЧАК
Настојао сам да на примеру Јамба, за који су мање више сви чули, покажем како програмирање не мора да буде досадно, и да се ту не ради само о разним досадним рачунима који делују потпуно бескорисно. Уз помоћ основних петљи и функција, али и уз мало логичког размишљања, направио сам овај програм који може послужити као забава, али и као пример решавања неких проблема са бројевима, као на пример фул, или кента. Програмирање захтева свакодневни ангажман и поред талента тражи пуно рада и труда. У данашње доба где се компјутери налазе у готово сваком делу нашег живота, информатика постаје једна од главних наука у свету. У време где се свака информација налази на „један клик“ од нас, свако може на интернету да пронађе безброј лекција и вежби у вези са програмирањем, и потребни су само жеља и труд како би се савладале основе програмирања. Већина новијих програма, као и поменути Microsoft Visual Studio 2010, у себи садрже јако опширне помоћне датотеке из којих можемо научити доста тога. А и приликом самог програмирања, програм нам сам указује на наше грешке подвлачењем или исписивањем порука, тако да учимо и док програмирамо.
21
Програмирање у C#
Ђорђе Урошевић, IV-8
ЛИТЕРАТУРА 1. 2. 3. 4. 5. 6.
sr.wikipedia.org/sr/Објектно -оријентисано_програмирање http:// Microsoft Visual C# 2008: Korak po korak, korak, J. Sharp, 2009 http://tutoriali.org/C.html Visual C# .NET , Jason Price C# 2008 od početnika do profesionalca , Christian Gross http://www.jamb.rs/PravilaJamba.htm
22
Програмирање у C#
Датум предаје:
Ђорђе Урошевић, IV-8
______________
Комисија: Председник _______________ Испитивач
_______________
Члан
_______________
Коментар:
Датум одбране: _____________
Оцена__________ Оцена__________ (___)
23