You are on page 1of 18

SREDNJA ELEKTROTEHNIČKA ŠKOLA

SARAJEVO

MATURSKI RAD
TEMA: Naziv maturskog rada

Mentor : Učenik:
Ime Prezime dipl. el. ing. Ime i prezime

Sarajevo, juni 2017.


Sadržaj
1. Uvod .................................................................................................................................................... 3
1.1 Šta su videoigre? ........................................................................................................................... 3
1.2 Kako su nastale videoigre? ............................................................................................................ 3
2. Razvojno okruženje ............................................................................................................................. 4
2.1 C# ( C-sharp) .................................................................................................................................. 4
2.2 Microsoft Visual Studio ................................................................................................................. 4
2.3 Kakve aplikacije možemo pisati u C# ? .......................................................................................... 5
2.4 .NET Platforma .............................................................................................................................. 5
3. Osnove objektno-orijentisanog programiranja ................................................................................... 6
3.1 Šta je objektno-orijentisano programiranje (OOP)? ..................................................................... 6
3.2 Osnovni koncepti OOP-a ............................................................................................................... 6
3.2.1 Klase ....................................................................................................................................... 6
3.2.2 Objekti .................................................................................................................................... 6
3.2.3 Metode ................................................................................................................................... 7
3.2.4 Konstruktori ............................................................................................................................ 7
3.2.5 Nasljeđivanje .......................................................................................................................... 7
3.2.6 Zatvorenost ............................................................................................................................ 7
4. Šta je „Color Clicker“ i kako je nastao? ............................................................................................... 8
4.1 Guitar Hero .................................................................................................................................... 8
4.2 Color Clicker................................................................................................................................... 8
5. Programski kod ................................................................................................................................... 9
5.1 Početna forma ............................................................................................................................... 9
5.2 Okretanje Krugova i stvaranje nota............................................................................................. 11
5.3 Note i krugovi .............................................................................................................................. 14
5.4 Restartovanje igrice i exit ............................................................................................................ 15
ZAKLJUČAK............................................................................................................................................. 16
LITERATURA ........................................................................................................................................... 17

2
1. Uvod

1.1 Šta su videoigre?

Videoigra je igra koja se igra pomoću računala ili igraćih konzola priključenih na računalo
ili TV. U novije vrijeme je jedan od najpopularnijih oblika zabave u svijetu. Videoigre se iz
dana u dan razvijaju i poboljšavaju im se tehničke karakteristike. Postaju sve
važniji gospodarski čimbenik mnogih zemalja.Osnovni zahtjevi videoigara su izlazni grafički
uređaji (najčešće monitor), te ulazni grafički uređaji. Novije igre zahtijevaju grafički procesor
i mrežnu opremu.

1.2 Kako su nastale videoigre?

Povijest videoigara seže do 1947. godine kada je Thomas T. Goldsmith dobio ideju videoigre
i patentirao je. Prva videoigra koja je bila predstavljena javnosti bila je Tenis za
dvoje Williama Higinbothama 1958. Godine.Prva računalna igra bila je Spacewar! iz 1961.
godine koju su osmislili dva studenta Massachussetskog instituta za tehnologiju (MIT)
prema znanstveno-fantastičnoj priči Skylark.
Prva generacija videoigara sastojala se od tekstualnih igara. To su bile igre u kojima je
igrač ručno unosio zapovijedi i tako određivao kuda se želi kretati. Druga generacija
videoigara predstavljala je mješavinu tekstualnih igara i igara sa statičnom grafikom.
Vodeći žanr u 70-im i 80-im godinama 20. stoljeća bile su tekstualne avanture. Prva
tekstualna avantura bila je Adventure (Crowther and Woods 1976), napravljena 15 godina
nakon Spacewara.
Kako se sklopovlje razvijao, tako su i igre postajale kompleksnije. Računala 80-ih godina bila
su već dovoljno snažna da pokrenu igre s grafikom, pa je došlo razdoblje grafičkih avantura.
Dolaskom miša tekstualno okruženje je zamijenjeno grafičkim. Tako su u osamdesetim
godinama strateške igre preuzele titulu najpopularnijih.
S razvijanjem tehnologije računala su postala dovojno jaka da renderiraju pokretne objekte,
pa je to dovelo do pojavljivanja novih žanrova kao što su simulacije letenja i vožnje
automobilom. Također je došlo do unaprijeđenja postojećih žanrova.
U ranim devedesetim godinama razvojna kuća Apogee Software je kreirala demo verzije
igara, što je igračima omogućilo da prvi dio igre probaju besplatno, ali su za ostatak igre
morali platiti.FPS žanr je kreiran predstavljanjem igre Wolfenstein 3D (id Software, 1992.
godine). Wolfenstein 3D predstavlja jednu od najprodavanijih igara svih vremena. Vodeći
proizvođači konzola su bili Sega i Nintendo. 1993. godine id Software je izdao pucačinu u
prvom licu Doom koji je bio prijelomna tačka u grafici i dizajnu za to vrijeme.

3
2. Razvojno okruženje

2.1 C# ( C-sharp)

C# je programski jezik višestruke namjene koji obuhvata imperativne,


deklarativne,funckionalne, generične, objektno-orjentisane i komponentno-orjentisane
programske discipline. Jedan je od Microsoftovih projekata unutar .NET inicijative. Microsoft
ga je razvio kao nadogradnju na svoj C++, što se iz C# logoa može i primjetiti kao
kombinacija 4 '+' znaka u jedan znak. Prednost C# nad C++ jeste u njegovom objektnom
okruženju, modernijem pristupu i lakšem objektno-orjentisanom kodiranju. C# developeri
nastoje C# učiniti lahkim i pristupačnim za sve generacije programera od onih najosnovnijih
do već ekspertnih programera zbog toga što se u C# mogu razvijati razni oblici aplikacija koje
koriste korisnicima.

2.2 Microsoft Visual Studio

Microsoft Visual Studio je integrisano razvojno okruženje (ili IDE) koga pravi Microsoft.
Koristi se za razvoj računarski programa za Windows, web stranice, aplikacije i usluge.
Koristi Microsoft-ove platforme za razvoj poput aplikativnih programskih interfejsa (API)
za Windows, Windows Forms, Windows Presentation Foundation, WindowsStore i Microsoft
Silverlight. Može proizvesti nativni kôd i upravljani kôd (eng. managed code).
Visual Studio sadrži urednik izvornog koda koji podržava IntelliSense (komponenta koja
predlaže ostatak koda) kao i refaktoriranje koda. Integrisani debugger radi na nivou izvornog i
mašinskog koda. Program takođe sadrži alate poput dizajnera oblika koji se koristi za
pravljenje aplikacija sa grafičkom korisničkim interfejsom, web dizajnera, dizajnera klasa i
dizajnera shema baza podataka. Visual Studio podržava različite programske jezike i
dozvoljava uredniku koda i debuggeru da podržava (u različitoj mjeri) skoro bilo koji
programski jezik, pod uslovom da servis za taj jezik postoji.
Ugrađni jezici su C, C++ i C++/CLI (preko Visual C++), VB.NET (preko Visual Basic
.NET)-a, C# (preko Visual C#) i F# (počevši od programa Visual Studio 2010). Podrška
za ostale programske jezike poput M, Python, i Ruby-ja kao i ostalih je dostupan
instalacijom jezičkih servisa koji se mogu zasebno instalirati. Takođe
podržava XML/XSLT, HTML/XHTML, JavaScript i CSS.

4
2.3 Kakve aplikacije možemo pisati u C# ?

C# je vrlo fleksibilan programski jezik koji dozvoljava kreiranje razvnovrsnih programa kao
što su Windows aplikacije, Web aplikacije, web servisi itd.

Windows aplikacije su aplikacije tipa Microsoft Office-a koje imaju izgled standardnih
Windows aplikacija. Ovo je pojednostavljeno korištenjem modula Windows obrazaca unutar
.NET okruženja, koji u stvari čini biblioteka kontrola (kao što su dugmići, palete alatki, meniji
itd), a koje nam koriste pri izradi Windows korisničkog interfejsa (UI).

Web aplikacije su web stranice koje možemo vidjeti kroz bilo koji web pretraživač. Ovaj
sistem se naziva Active Server Pages NET (ASP.NET), a C# možemo koristiti za izradu
ASP.NET aplikacija uz pomoć web obrazaca.

Web servisi su nov i uzbudljiv način izrade aplikacija koje su razmjenljive prirode. Koristeći
web servise preko Interneta možemo razmjenjivati bilo koju vrstu podataka. koristeći prostu
sintaksu, ne vodeći računa o tome u kom jeziku je napisana aplikacija niti na kom sistemu je
postavljena.

2.4 .NET Platforma

Projektno okruženje .NET je nova platforma za razvoj aplikacija napravljena od strane


Microsoft-a, a dizajnirano je tako da se može koristiti od strane bilo kog programskog jezika.
Ovo uključuje C#, kao i C++, Visual Basic i Javascript. Svi ovi programski jezici imaju
pristup projektnom okruženju .NET i mogu međusobno da komuniciraju. Sasvim je moguće
kod programiranja u C# koristiti kod napisan u Visual Basic.NET, kao i obrnuto. Projektno
okruženje .NET najvećim dijelom se sastoji od ogromne biblioteke kodova koju
upotrebljavamo preko klijentskih jezika. Ova biblioteka podijeljena je na različite module
koje koristimo u zavisnosti od našeg zadatka. Neki moduli su podijeljeni u različite
podmodule.

Pisanje aplikacija unutar .NET projektnog okruženja u stvari znači pisanje koda uz pomoć
.NET biblioteke koda. Preporučuje se korištenje Visual Studio-ja za programiranje. Prednost
ovog okruženja je lahkoća kojom se mogućnosti .NET tehnologije mogu integrisati u naš kod.
Da bi se C# kod izvršio neophodno ga je prevesti u izvorni ili originalni kod.

5
3. Osnove objektno-orijentisanog programiranja

3.1 Šta je objektno-orijentisano programiranje (OOP)?

OOP je način pristupa realizaciji softvera kao modelu realnog svijeta. Objektno orjentisano
programiranje predstavlja poptuno novi način u realizaciji programa i programskih interfejsa
za razliku od starih konzolnih aplikacija. Kod OOP-a mnogo manje vremena se potroši na
pisanje koda dok većina vremena se potroši u samom dizajniranju aplikacija, što nije bio
slučaj kod običnog (konzolnog) programiranja. Akcenat OOP-a je na objektima (dijelovima
programa) koji nešto rade, a ne na algoritmima tj. na tome kako nešto radi. OOP pruža
nekoliko bitnih koncepata, a to su: klase, objekti, metode i svojstva, konstruktori i destruktori,
nasljeđivanje, polimorfizam itd.

3.2 Osnovni koncepti OOP-a


3.2.1 Klase

Klasa je osnovna organizaciona jedinica programa u objektno orijentisanom jeziku. Klasa


predstavlja tip, skup objekata istih svojstava. Klasa je tip, a objekat je primjerak klase. Klasa
predstavlja neki apstraktni tip koga definiše korisnik jezika. Kao što u nekom jeziku postoje
ugrađeni tipovi -int, char, real, ovdje nam je dozvoljeno da definišemo proizvoljan broj
promjenljivih svog tipa i da iskoristimo potpuno ravnopravno. Uočavanje zajedničkih
svojstava bitnih za funkcionisanje sistema i izdvajanje skupa entiteta koji imaju zajednička
svojstva se naziva asptrakcijom.
Klasa ima određene atribute (osobine) i operacije (akcije) koje se mogu vršiti nad objektima
klase. Atributi najčešće predstavljaju unutrašnjost klase tj. njenu realizaciju, dok operacije
predstavljaju ono što se spolja može raditi sa objektima klase. Svojstvo defmisanja
proizvoljno mnogo promjenljivih nekog apstraktnog tipa se naziva svojstvom višestrukih
primjeraka. Klasa predstavlja tip za koji se mogu kreirati primjeri. Primjeri klase se zovu
objekti. Klase u Visual Basic .NET-u se prave korišćtenjem naredbe Class.

3.2.2 Objekti

Objekat je predstavljanje nečega što postoji. Kako je klasa tip, objekat predstavlja
promjenjljivu toga tipa u programu. Svaki objekat ima sopstvene elemente koji su navedeni u
deklaraciji klase, a takođe ima i svoje karakteristike: identitet, stanje i ponašanje.

6
3.2.3 Metode

Metode predstavljaju funkcije koje prikazuju ili mijenjaju stanje objekta u kodu.Metode
proširenja u C# dopuštaju programerima da koriste statičke metode kao da su one metode sa
tabele klasne metode, što dopušta programerima da dodaju metode objektu za koji osjećaju da
treba postojati na tom objektu i njegovim derivatima.Tip dynamic dopušta metodu vezivanja
runtimea, što dopušta pozivanje metoda slično kao u JavaScriptu i objektnu kompoziciju
runtimea.C# ima podršku za strogo tipovane funkcijske pointere preko koda delegate . Kao
što Qt framework ima pseudo-C++ komande signal i slot, C# ima semantiku specifičnu
okružnim stilskim događajima "publish-subscribe", mada C# za to koristi delegate.C# nudi
,kao Java, synchronized pozivanje metoda, preko atributa [MethodImpl(MethodImpl
Options.Synchronized)].

3.2.4 Konstruktori

Konstruktor je posebna vrsta metode zadužena za inicijalizaciju objekta njegove klase.


Razlikuje se od metode po tome što ima isto ime kao i klasa te nema povratni tip (čak niti
void). Može postojati i više konstruktora (što se također naziva, kao kod metoda,
preopterećenje (eng. overloading)) koji se razlikuju samo po formalnim parametrima tj.
ulaznim podacima koji kreiraju objekt.

3.2.5 Nasljeđivanje

Naziv nasljeđivanje odnosi se na činjenicu da jedna klasa može naslijediti dio ili svu strukturu
i ponašanje od druge klase. Klasa koja nasljeđuje zove se podklasa (subclass) klase od koje
nasljeđuje. Ako je klasa B podklasa klase A onda ja klasa A nadklasa (superclass) klase B.
Podklasa može nadopunjavati strukturu i ponašanje klase koju nasljeđuje, a može i zamijeniti
ili izmijeniti naslijeđeno ponašanje, ali ne i naslijeđenu strukturu. Odnos između podklase i
nadklase je često prikazan kao dijagram u kojem je podklasa prikazana ispod i povezana na
nadklasu.

3.2.6 Zatvorenost

Zatvorenost je koncept po kojem je informacija u klasi zaštićena od direktnog pristupa i


jedini način da se promjeni informacija je kroz utemeljene metode. Tako da ako imamo
metodu koja pristupa tim informacijama, samo ćemo vidjeti krajnji rezultat ali ne i izvršene
radnje.

7
4. Šta je „Color Clicker“ i kako je nastao?

4.1 Guitar Hero

Guitar Hero serija igrica su muzicke ritam igrice prvi put objavljene 2005 godine od strane
RedOctane i Harmonix.U ovim igricama igraci koriste kontrolere u oblicima raznih
instrumenata,dok u pozadini svira muzika.Poenta igre je da se pritisne odredjena tipka na
kontroleru kada se pojavi nota na ekranu,stvarajuci muziku.Ove igre pokusavaju da imitiraju
pravo sviranje instrumenata.Vecina igri podrzava samostalno igranje,kao karijera,ali podrzava
vise igraca odjednom sto daje osjecaj kao da se u pravom bendu.

4.1 Color Clicker

Color Clicker je u pocetku bila rekreacije Guitar Hero igri gdje je cilj bio da se klikne tacno
slovo u tacno vrijeme.Nakon par ideja igrica je promijenjena tako da se sada cilj da se krug na
desnoj strani ekrana preko predefinisanih tipki okrece i samim tim boje na njemu se okrecu
kako bi se izjednacile boje kruga i boje nota koje se krecu ka njemu.Nakon nekog vremena
pocinje da se ubrzava kretanje nota ,a i koliko se brzo stvaraju sto otezava igricu.Ako se desi
da nota uradi pogresnu boju gubimo zivot koji se nalazi na dnu ekrana u obliku
progress_bara,i kada nam zivot padne na 0 igrica se zavrsava i vraca nas u main menu

8
5. Programski kod
5.1 Početna forma

Slika 1. Početna forma

U pocetnoj formi mozemo da biramo par stvari kao


1.Ime igraca
2.Koliko boja ce imati krug(2-4)
3.Koliko krugova mozemo upravljati(1-4)
4.Koliko zivota imamo(1-10)
5.Brzina stvaranja nota(500ms-2000ms)
6.Brzina kretanja nota(6-15)
7.Jezik
8.Start tipka koja pokrece igricu sa datim opcijama

9
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
this.Hide();
Form1 f = new Form1();
f.PassValue(moves,nofcir, nofcol,hp, spawn, moves, name,languagei);
f.Show();
}
}

Slika 2. Kod za slanje informacija iz forme2(main menu) u formu1(igrica)

public void PassValue(int a,int b,int c,int d,int e,int f,string g,int h)

{
moves = a;
nofcir = b;
nofcol = c;
hp = d;
spawn = e;
moves = f;
name = g;
languagei = h;
fix();
}

Slika 3. Kod za primanje informacija od forme 2 u formi 1

public void fix()

{
Spawn.Interval = spawn;
progressBar1.Maximum = hp;
progressBar1.Value = hp;

CirclesList[2] = Boxes2;
CirclesList[3] = Boxes1;
CirclesList[4] = Boxes0;

abox.Image = CirclesList[nofcol].Images[0];
sbox.Image = CirclesList[nofcol].Images[0];
dbox.Image = CirclesList[nofcol].Images[0];
fbox.Image = CirclesList[nofcol].Images[0];
}

Slika 3. Kod za postavljanje zivota,imagelist-a i slika krugova

10
5.2 Okretanje Krugova i stvaranje nota

Okretanje kruga je uradjeno preko keydown komande koja gleda ako je kliknuta jedna od
predefinisanih tipki(A, S, D, F) i mijenja vrijednost boje tog kruga,samim tim dodaje novu
sliku iz imagelist-a.

Slika 4. Izgled krugova

if (e.KeyCode == Keys.A)
{

BoxNumber[1]++;
if (BoxNumber[1] >= nofcol) BoxNumber[1] = 0;
abox.Image = CirclesList[nofcol].Images[BoxNumber[1]];

}
if (e.KeyCode == Keys.S&& nofcir > 1)
{
BoxNumber[2]++;
if (BoxNumber[2] >= nofcol) BoxNumber[2] = 0;
sbox.Image = CirclesList[nofcol].Images[BoxNumber[2]];
}
if (e.KeyCode == Keys.D && nofcir>2)

Slika 5. Kod za okretanje krugova

BoxNumber[] predstavlja trenutnu boju jednog od krugova i povecava se za jedan kada


pritisnemo tipku,ako prestupi broj boja(nofcol) koje smo definisali u main menu vraca se
nazad na 0. CirclesList[] je array od tri image_list-a(za kugove sa dvije,tri i cetiri boj.Nofcir je
broj krugova definisanih,ako smo odredili da samo jedan krug radi onda ce samo abox se
rotirati,ako smo odredili da dva onda ce abox i sbox itd.Stvaranje nota je uradjeno preko
timera koji poziva komande random koja izabere dva nasumicna broja(jedan za boju drugi za
lokaciju gdje ce stvorit tu notu).Boja note zavisi od varijable nofcol,a lokacija od nofcir.

11
public void NewImage()

{
for (int i=0;i<1000;i++)
{
if(!pspawned[i])
{
pspawned[i] = true;
int randomnote = rnd.Next(0, nofcol);

pic[picint] = new PictureBox(); pic[picint].Parent =ActiveForm;


pic[picint].Size = new Size(30, 30);
pic[picint].SizeMode = PictureBoxSizeMode.AutoSize;
pic[picint].BackColor = Color.Transparent;
pic[picint].Show(); this.Controls.Add(pic[picint]);
pic[picint].SendToBack(); speed[picint] = moves;

if (randomnote == 0) { pic[picint].Image = Notes.Images[randomnote];


PicNumber[picint] = 0; }
if (randomnote == 1) { pic[picint].Image = Notes.Images[randomnote];
PicNumber[picint] = 1; }
if (randomnote == 2) { pic[picint].Image = Notes.Images[randomnote];
PicNumber[picint] = 2; }
if (randomnote == 3) { pic[picint].Image = Notes.Images[randomnote];
PicNumber[picint] = 3; }

randomnmb = rnd.Next(1, nofcir + 1);

if (randomnmb == 1) { pic[picint].Location = new Point(89, 52); }


if (randomnmb == 2) { pic[picint].Location = new Point(89, 143); }
if (randomnmb == 3) { pic[picint].Location = new Point(89, 229); }
if (randomnmb == 4) { pic[picint].Location = new Point(89, 321); }

picint++;
break;
}
}
}

Slika 6. Kod za stvaranje nota

Kod prvo ulazi u petlju od jedan do hiljadu gdje nalazi prvu vrijednost pictureboxa pic koja
nije vec stvorena. Randomnote predstavlja nasumicnu boju slike,picnumber predstavlja
vrijednost te boje u kodu a randomnmb predstavlja lokaciju gdje se stvara nota.

12
Slika 7. Izgled nota u igri

rivate void Move_Tick(object sender, EventArgs e)


{
for (int j = 0; j < picint; j++)
{
if(pic[j].Visible)
pic[j].Left += speed[j]+moves;
}
}

Slika 8. Kod koji omogućava kretanje nota

Kretanje nota se vrsi preko timera.Ide od 0 do picint(picint predstavlja zadnji broj stvorene
note) i ako je visible pomijera ga ka desno za vrijednost speed[j](default brzina nota)+
moves(dodatna brzina koju mozemo birati)

13
5.3 Note i krugovi
for (int j = 0; j < picint; j++)
{
if (pic[j].Bounds.IntersectsWith(abox.Bounds) && pic[j].Visible)
{
if (PicNumber[j] == BoxNumber[1])
{
score++;
PicNumber[j] = 5;
label5.Text = score.ToString();
pic[j].Visible = false;
pic[j].Location = new Point(1, 1);
break;
}
else
{
hp--; pic[j].Visible = false;
pic[j].Location = new Point(1, 1);
}
}

Slika 9. Izgled koda za dodir nota i krugova

Isto kao i prije ima petlja od nula do picint.Provjerava da li picturebox note je u kontaktu sa
picturebox-om kruga.Ako je slucaj da se dodirnu onda provjeraja da li je vrijednost boje note
ista kao i vrijednost boje kruga.Ako jeste dodaje poene,stavlja vrijednost boje na 5 da ne bi
doslo do vise kontakta iste note sa krugom,mijenja label poena u trenutne poene,nota postaje
nevidljiva i odlazi na lokaciju (x,y)=(1,1).U slucaju da boje nisu iste gubimo jedan zivot,nota
postaje nevidljiva i salje se istu lokaciju.

14
5.4 Restartovanje igrice i exit
Kada igrač ostane bez zivota ispisuje ime igraca,poene koje je imao u messagebox-u i klikom
na ok vraca nas u main menu gdje mozemo mjenjati opcije i igrati igricu ponovo.

if (progressBar1.Value - 1 >= 0)
progressBar1.Value = hp;
else { EndGame(); }

if (level == 11) EndGame();


else this.BackgroundImage = Levels.Images[level];

Slika 10. Upit da li smo izgubili zivote i upit da li smo presli sve levele

public void EndGame()


{
picint = 0;
Form2 f = new Form2();
MoveTimer.Stop();
Spawn.Stop();
CheckHit.Stop();
if (level == 10) { MessageBox.Show(language[languagei][3]+" "+ name + " " +
language[languagei][4] + ".\n" + language[languagei][2]+" "+ score + " " +
language[languagei][2]); }
else MessageBox.Show(name +" "+language[languagei][1]+" "+score+" "+
language[languagei][2]);
this.Hide();
f.Show();
}

Slika 11. Void za kraj igre

Na kraju igre sve ugase svi timeri,i ispise se tekst sa poenima igraca.Ako smo dosli do
zadnjeg levela onda nam cestita i ispise poene.

15
ZAKLJUČAK
Napišite vaš zaključak

16
MIŠLJENJE O RADU

Potpis mentora:
__________________________
Ime Prezime dipl.el. ing.

17
LITERATURA

- https://en.wikipedia.org/wiki/C_Sharp_(programming_language)

- http://csharp-station.com/

- Code complete 2

- Pragmatic Programmer

- Programming Pearls

- The Productive Programmer

18

You might also like