24
Трећа београдска гимназија Београд, Његошева 15 Матурски рад из информатике ПРОГРАМИРАЊЕ У C# Ментор: Ученик: Милош Мартиновић, проф Урошевић Ђорђе, IV-8 Београд, јун 2012. год.

c# gotovo!

Embed Size (px)

Citation preview

Page 1: c# gotovo!

Трећа београдска гимназија

Београд, Његошева 15

Матурски рад из информатике

ПРОГРАМИРАЊЕ У C#

Ментор: Ученик:

Милош Мартиновић, проф Урошевић Ђорђе, IV-8

Београд, јун 2012. год.

Page 2: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

1

Садржај

1. УВОД .............................................................................................................................. 2

1.1. Програмирање .......................................................................................................... 2

1.2. Microsoft Visual Studio 2010 и C# ............................................................................ 2

2. ПРИНЦИПИ ПРОГРАМИРАЊА ................................................................................ 3

2.1. Објектно оријентисано програмирање ................................................................... 3

3. ОПИС ПРОБЛЕМА ....................................................................................................... 4

3.1. Игра „Јамб“ ............................................................................................................... 4

3.2. Правила ...................................................................................................................... 5

4. КОРАЦИ ЗА РЕШАВАЊЕ ПРОБЛЕМА .................................................................... 6

4.1.Коцкице ..................................................................................................................... 6

4.2. Колоне ....................................................................................................................... 7

4.3. Поља од 1 до 6 .......................................................................................................... 8

4.4. Минимум и максимум ............................................................................................. 9

4.5. Трилинг, покер и јамб ........................................................................................... 10

4.6. Кента и фул ............................................................................................................. 11

5. ПРИКАЗ ИНТЕРФЕЈСА, КОДА И МЕТОДА .......................................................... 12

5.1. Битни делови кода .................................................................................................. 12

5.2. Методе ..................................................................................................................... 15

5.3. Интерфејс ................................................................................................................ 17

6. КОНАЧНИ ПОГЛЕД И НАЧИН КОРИШЋЕЊА ИГРИЦЕ .................................. 20

7. ЗАКЉУЧАК ................................................................................................................. 21

ЛИТЕРАТУРА ............................................................................................................. 22

Page 3: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

2

1. УВОД

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-а 1.0. То је објектно

оријентисани језик опште примене, и намењен је

изради апликација за .NET Framework платформу. Настао је као еволуција C++/C

језика коју је креирао Microsoft да би се радило са .NET Framework окружењем.

По синтакси је јако сличан C-у и Јаvi, тако да уколико неко познаје те програмске

језике веома лако може да пређе на C#, као и обрнуто.

Слика 1. MS Visual Studio лого

Page 4: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

3

Предност C#-a у односу на C++ је у томе што је синтакса простија, па је и

самим тим израда апликација лакша. C# се најчешће користи за израду:

Windows апликација

Web aпликација

Web сервиса

Такође, уколико је потребан приступ базама података, то се може урадити

коришћењем ADO.NET одељка .NET окружења.

2. ПРИНЦИПИ ПРОГРАМИРАЊА

2.1. Објектно оријентисано програмирање

Објектно оријентисано програмирање или краће ООП је један од могућих

приступа програмирању рачунара. За разлику од осталих приступа, у којима је

тежиште на акцијама које се врше на податковним структурама, овде је тежиште

на пројектирању апликације као скупа објеката који измењују поруке. Објектно

оријентисано програмирање (Оbject Oriented Programming, OOP ) је нови приступ

реализацији софтвера као модела реалног света. У објектним програмским

системима све је представљено као објекат (процеси, текст, У/И- операције итд.).

Објектно програмирање заправо најсличније писању симулација за реалне

објекте. Од раних 80-их па до данас, ООП је постало најутицајније у

Слика 2. Изглед кода у C#-у

Page 5: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

4

Слика 3. Обичан јамб листић

комерцијалном развоју софтвера. Програмски језици попут C++ i Java

програмски језик су својом популарношћу утврдили водећи статус ООП као на

неки начин обавезног приступа при развоју софтвера данас, тако да су и језици

који нису били објектно оријентисани додали ООП концепте (Visual Basic,

Pascal…)

3. ОПИС ПРОБЛЕМА

3.1. Игра „Јамб“

Игра јамб је игра коцкицама. Циљ игре је добити што више поена бацањем

коцкица, при чему се добијају различите комбинације, од којих свака носи

одређен број поена. Настала је из игре Yahtzee, коју је осмислио Милтон Бредли,

а која је настала 50-их година XX века. Изузетно је популарна на просторима

бивше Југославије. Може је играти неограничен број играча, а најмање два. Ја

сам покушао да направим верзију јамба за једног играча.

Page 6: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

5

Слика 4. Колоне у јамбу

3.2. Правила

Како бих прилагодио ову игру једном играчу, ограничио сам број колона на

5 најпопуларнијих:

1. „На доле“ - попуњава са редом од 1 до јамба, дакле поља не смеју да

се прескачу.

2. „Слободна“ - може да се попуњава по избору, тј. било којим редом.

3. „На горе“ - попуњава се од јамба до 1, и као и код прве колоне поља

не смеју да се прескачу.

4. Медијална (две стрелице супротно окренуте) - она се редом

попуњава од максимума ка горе и од минимума ка доле.

5. Ручна - Једина колона у којој је дозвољено само једно бацање је

Ручна. Резултат мора бити уписан после првог бацања.

Играч би требало да настоји током игре да у поља од 1 до 6 у свим колонама

уписује довољно велике резултате да би на крају када сабира поља од 1 до 6 имао

збир 60 или већи, јер се у тим случајевима добија бонус од 30. Нпр. ако у колони

имамо четири кеца, три двојке, три тројке, четири петице и три шестице, збир ће

бити 62. Када на то додамо 30 у пољу збир пишемо 92.

Максимум и минимум су поља која се одузимају и тај резултат множи са

бројем јединица. Значи ако имамо максимум 28 и минимум 7, а у тој колони

имамо 4 јединица, у пољу Збир испод минимума уписујемо 84. Уколико се деси

да је минимум већи од максимума, пише се резултат 0.

Доњи део колоне је настао по угледу на игру картама покер:

Кента, представља коцкице по реду (од 1 до 5 или од 2 до 6). Бодује се на

следећи начин: Ако се кента добије из првог бацања пише се 66, ако је из

другог 56 и из трећег 46 поена.

Трилинг, представља комбинацију три исте коцкице, на збир коцкица се

додаје 20.

Фул, представља комбинацију од три исте и две исте коцкице (пет истих

коцкица се не прихвата као фул), додаје се 30.

Page 7: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

6

Слика 5. Коцкице

Слика 6. Коцкице у програму

Покер, представља четири исте, додаје се 40.

Јамб, представља пет истих коцкица, додаје се 50.

Ако играч након бацања нема шта да упише мора да прецрта неко поље

(осим максимума и минимума, где се мора уписати вредност), али има право да

прецртава само поља која су му на реду. Поља у слободној и ручној колони се

увек могу прецртавати.

4. КОРАЦИ ЗА РЕШАВАЊЕ ПРОБЛЕМА

4.1. Коцкице

Први проблем који се јавио јесте бацање коцкица.

Потребно је притиском на дугме генерисати 6 различитих

бројева, пратити колико је бројева бацања остало (зауставити

могућност поновног бацања ако је већ бачено 3 пута), када се

нека коцкица изабере, спречити да се промени при следећем

бацању, при сваком упису у колону ресетовати број преосталих бацања на 3.

Само бацање коцкица се врши притиском на

дугме. Прво се помоћу функције Random.Next

генерише 6 бројева у 6 int-ова, који се исписују у поља

за текст, која представљају 6 коцкица. Након сваког

притиска на дугме за бацање, помоћу IF-а се проверава

да ли је број бацања мањи од 3, и да ли су сви бројеви

кликнути. Када број бацања достигне 3, или су сви

бројеви кликнути, притиском на дугме, ништа се не

догађа. Уколико је на неку коцкицу кликнуто, на

пример на прву, bool prvibrojkliknut добија вредност

true. У том случају, приликом следећег бацања,

вредност те коцкице остаје неизмењена. Поновним кликом на ту коцкицу

вредност bool-a ће се променити на false.

На слици бр. 6 је приказано бацање приликом ког су изабране 3 четворке.

Изнад „коцкица“ се налази текст који показује број преосталих бацања, који се

мења при сваком бацању, и ресетује при упису резултата у колону.

Page 8: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

7

Слика 7. Уписивање нуле

4.2. Колоне

На слици бр. 4 су приказане колоне које се користе у овој верзији Јамба.

После сваког бацања, Играч може да упише резултат у сваку колону у која му

правила дозвољавају. Постоји много услова који морају да се испуне, како би се

резултат уписао. Неки услови су општи, а неки услови су посебни за сваку

колону.

На пример, пре сваког уписа, помоћу

IF-a се проверава да ли није изабрана

ниједна коцкица, у том случају изаћи ће

порука која ће питати Играча да ли жели да

упише резултат 0 у изабрану колону. У

зависности од његовог одговора, уписаће се

0, или се ништа неће догодити. (слика бр. 7)

Такође, после сваког уписа резултата у било коју колону, активира се метода

„novipotez()“ која све бројеве који су кликнути враћа у првобитно стање, ресетује

бројач потеза на почетну вредност и тако започиње нови потез.

Посебне услове ћу објаснити посебно за сваку колону:

1. „На доле“ - На почетку игре је дозвољен упис само на поље број 1, за

сва остала поља постоји IF, који проверава да ли је претходно поље

попуњено, и ако јесте, дозвољава упис у њега. На пример, ако

кликнемо на број 3 у овој колони, извршиће се упит:

if (a2.Text != "")

И уколико је нешто заиста уписано у поље а2, проверава се за сваки

број, да ли је кликнут, и да ли је то број 3, и сваки пут се променљива

„rez” повећава за 3. На крају се вредност те променљиве додељује

пољу а3, и прелази се на следећи потез.

Такође, посебни услови су за поља код броја 6, код минимума и код

јамба. Код броја 6 се након уписа броја уписује и збир у поље az1,

након уписа у поље минимум, уписује се збир у поље аz2 и то

формулом:

az2 = (aMax - aMin)* a1

Page 9: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

8

Слика 8. Грешка у уписивању

Упис у поље аz3 je слично као и код поља az1, само што се рачунају

резултати поља у доњем делу колоне.

2. „Слободна“ - Слободна колона је нешто једноставнија зато што не

постоји одређени ред за уписивање бројева у колоне, али се зато после

сваког уписа мора проверити да ли су уписани сви бројеви из тог дела

колоне, како би се уписао збир. Ту важе већ поменути услови за збир.

3. „На горе“ – Исто као колона „На доле“ само што је обрнуто, први упис

је јамб, а последњи број 1. Због тога се проверавају поља: Кента и број

1. А приликом уписа код броја 1 се уписује резултат и у поље cz1 и cz2

4. Медијална (две стрелице супротно окренуте) - Исто као и „На горе“ и

„На доле“ само што се креће од Минимума на доле и Максимума на

горе.

5. Ручна - Исто као и у слободној, само што је додат услов који

проверава да ли је број бацања 1, и уколико није, избацује поруку која

пита корисника да ли жели да упише резултат 0.

4.3. Поља од 1 до 6

За сваку колону, код за поља од 1 до 6 је мање више сличан. Проверава се за

сваку коцкицу да ли је кликнута, и да ли вредност кликнуте коцкице одговара

кликнутом пољу. У том случају променљивој rez се додаје вредност кликнутог

броја. Такође, постоје неки посебни услови, у зависности од изабране колоне

Page 10: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

9

Слика 9. Код за поље број 2

Слика 10. Минимум и максимум

(нпр за ручну колону се проверава да ли је прво бацање, за број 6 у првој колони

се рачуна збир свих бројева, итд.). На наредној слици можете видети део кода за

поље број 2 у слободној колони:

4.4. Минимум и максимум

Код минимума и максимума, потребно је употребити већ поменуту формулу

((max-min)*број јединица), и у зависности од тога да ли су попуњена сва поља

(јединице, максимум и минимум) исписати збир. Потребно је спречити да се

изабере мање од 5 коцкица, као и свих 6.

Page 11: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

10

Слика 11. Ручни јамб са шестицама,

омиљено бацање сваког играча

4.5. Трилинг, покер и јамб

Трилинг, покер и јамб су нешто компликованији од остатка. Пошто осим

сабирања истих бројева, треба проверити да ли истих бројева има 3,4 или 5.

Како бих олакшао посао, први услов је, да је број кликнутих коцкица 3 за

трилинг, 4 за покер и 5 за јамб, а тек после тога се проверава које су коцкице

изабране, bool n-takockicakliknuta се мења у true, и након тога, свакa n-та

коцкица чији је bool true се додаје на укупан збир rez, и на крају, у

зависности да ли се ради о трилингу, покеру или јамбу, додаје се одређен број

поена (20,40,50).

Направљени су посебни упити: dalijetriling, dalijepoker, dalijejamb, којима се

проверава да ли се испуњавају одређени услови. О њима нешто касније.

Наравно, и овде важе посебни услови у колонама Ручна и Слободна.

Page 12: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

11

4.6. Кента и фул

Највећи проблем са којим сам се сусрео приликом израде овог програма, били

су кента и фул.

Код кенте је потребно проверити о ком се бацању ради, и да ли су изабране

коцкице у реду од 1 до 5 или од 2 до 6. То сам урадио тако што сам вредности

коцкица од 1 до 6 назвао: o, p, q, r, s, t и затим проверавамо редом, да ли: Нека од

тих променљивих има вредност 1 и да ли нека од тих променљивих има вредност

2, и тако све до 5; или исто то, али од 2 до 6. Уколико је неки од ових услова

тачан, значи да се ради о кенти, и након тога треба проверити да ли кликнуте

коцкице сачињавају кенту, и у зависности од тога које је бацање у питању,

доделити одређен број поена.

Код фула је проблем што пратимо две различите вредности коцкица

(XXYYY), и јавља се проблем уколико нпр. коцкице буду 444226, и ако играч

изабере 44426. Мора се проверити да ли је пет коцкица кликнуто, и да ли баш оне

дају фул. То сам решио тако што сам направио упит dalijeful, и у њему сам

испитао да ли се ради о фулу на следећи начин: Прво сам направио 6

променљивих, које имају почетну вредност 0, то су: jedan, dva, tri, cetiri, pet,

sest, и затим сам за сваки број испитивао коју вредност има, и на пример ако

има 4 јединица и 2 петице, променљивa jedan би имала вредност 4 а променљива

pet вредност 2. Након тога се проверава редом: Да ли има 3 јединица и 2 било

које друге коцкице кликнуте? Да ли има 3 двоје и 2 било које друге коцкице

кликнуте? И тако редом до 6. Такође треба пазити да у случају да коцкице буду

XXXXXY, не буде фул. У случају да је испуњен неки од 6 услова, bool ful добија

вредност true

Page 13: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

12

Слика 12. Трилинг

5. ПРИКАЗ ИНТЕРФЕЈСА, КОДА И МЕТОДА

5.1. Битни делови кода

Провера да ли се ради о трилингу:

Page 14: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

13

Слика 13. Покер

Провера да ли се ради о покеру:

Page 15: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

14

Слика 14. Јамб

Провера да ли се ради о јамбу:

Page 16: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

15

Слика 15. Метода novipotez()

5.2. Методе

Сада ћу приказати методе novipotez() i krajigre(), које се покрећу након

сваког уписа. Прва ресетује све битне bool-ове, коцкице, и у њој се покреће

krajigre(), и тако се приликом сваког потеза проверава да ли су сва поља

попуњена, и уколико јесу, исписује се коначан резултат, уз пратећу поруку.

Page 17: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

16

Слика 16. Метода krajigre()

На слици бр. 16 поред броја један, налази се провера да ли су сва поља

попуњена, поред броја 2 рачуна се збир свих збирова, а поред броја 3, ресетују се

сва поља, бришу се сви резултати, покреће се нова партија.

Page 18: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

17

Слика 17. Интерфејс

5.3. Интерфејс

На слици 17 можемо видети приказ празне табеле, то је прво што видимо при

покретању игре:

Page 19: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

18

Слика 18. Крај партије

На слици 18 можемо видети крај партије, као и поруку која нас обавештава

о нашем резултату, после које следи питање да ли желимо да почнемо нову игру

(слика 22):

Page 20: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

19

Слика 19. Грешка када нису изабране све коцкице

Слика 20. Провера за упис нуле

Слика 21. Грешка приликом уписа у ручну колону

Слика 22. Нова игра

На сликама 19, 20, 21 и 22, можемо видети неке од порука које излазе током игре:

Page 21: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

20

6. КОНАЧНИ ПОГЛЕД И НАЧИН КОРИШЋЕЊА ИГРИЦЕ

На слици 17 можемо видети целокупан интерфејс. Начин коришћења игрице

је веома једноставан. Кликом на дугме баци, бацају се коцкице, кликом на

бројеве, бирају се коцкице, и кликом на поље, уписује се резултат.

Циљ ми је био да коришћење игрице буде што једноставније, и да се све

обавља једним кликом.

Уколико корисник промаши поље, изабере мање коцкица, или направи било

какву грешку, постоје поруке (слиике 19 и 21) које обавештавају корисника у

чему је погрешио.

Како не би дошло до грешке, ако корисник жели да прецрта неко поље

(упише резултат 0), пре тога се појави питање (слика 20) на које корисник мора

потврдно да одговори како би се поље заиста прецртало.

Притиском на F2, у сваком тренутку се може почети нова игра.

Page 22: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

21

7. ЗАКЉУЧАК

Настојао сам да на примеру Јамба, за који су мање више сви чули, покажем

како програмирање не мора да буде досадно, и да се ту не ради само о разним

досадним рачунима који делују потпуно бескорисно. Уз помоћ основних петљи и

функција, али и уз мало логичког размишљања, направио сам овај програм који

може послужити као забава, али и као пример решавања неких проблема са

бројевима, као на пример фул, или кента.

Програмирање захтева свакодневни ангажман и поред талента тражи пуно

рада и труда. У данашње доба где се компјутери налазе у готово сваком делу

нашег живота, информатика постаје једна од главних наука у свету. У време где

се свака информација налази на „један клик“ од нас, свако може на интернету да

пронађе безброј лекција и вежби у вези са програмирањем, и потребни су само

жеља и труд како би се савладале основе програмирања.

Већина новијих програма, као и поменути Microsoft Visual Studio 2010, у себи

садрже јако опширне помоћне датотеке из којих можемо научити доста тога. А и

приликом самог програмирања, програм нам сам указује на наше грешке

подвлачењем или исписивањем порука, тако да учимо и док програмирамо.

Page 23: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

22

ЛИТЕРАТУРА

1. http://sr.wikipedia.org/sr/Објектно-оријентисано_програмирање

2. Microsoft Visual C# 2008: Korak po korak, J. Sharp, 2009

3. http://tutoriali.org/C.html

4. Visual C# .NET , Jason Price

5. C# 2008 od početnika do profesionalca, Christian Gross

6. http://www.jamb.rs/PravilaJamba.htm

Page 24: c# gotovo!

Програмирање у C# Ђорђе Урошевић, IV-8

23

Датум предаје: ______________

Комисија:

Председник _______________

Испитивач _______________

Члан _______________

Коментар:

Датум одбране: _____________ Оцена__________ (___)