• Apgrejdovali smo forum na XenForo 2.1.1, ukoliko imate predloga vezanih za izgled ili funkcionalnost foruma, ili ukoliko naletite na neki problem, javite nam OVDE

    DEFINISALI SMO PRAVILA FORUMA. Pročitajte ih, pojaviće se automatski kada krenete da čitate nešto!

XNA Programiranje Igara | Tutorijal #07.03 | Još nizova

Uni

PCAXE Addicted
Učlanjen(a)
31.08.2018.
Poruka
2.469
Rezultat reagovanja
984
Moja konfiguracija
PC / Laptop Name:
Lenovo ThinkPad X250 - i5 5300U/8GB/256GB EVO 860/6 Cell
Mice & keyboard:
Bloody V7M & Stock Thinkpad X250 Keyboard
OS & Browser:
Windows 10 + Microsoft Edge | ArcoLinux + i3 + Mozilla Firefox Quantum
Pre svega, kao i uvek, apelujem na vas da, ukoliko ste propustili iti jedan tutorijal iz serije ovih, iščitate dotične, pošto se svi nadovezuju jedni na druge. Ovo možete učiniti unosom "#xna-gwid" bez navodnika u polje foruma "Pretraga...". :)

Šta ćemo danas obraditi?
U uvodnom tutorijalu o nizovima, obradili smo samo jednodimenzione nizove, tj. jednoredne nizove. Međutim nizovi su veoma kompleksni u C#-u, te postoji veliki broj operacija koje možemo obaviti nad njima, kao i više vrsta nizova. Cilj današnjeg tutorijala, jeste obrađivanje vrsta nizova, kao i operacija nad njima. Ako ste spremni, 'ajde da počnemo!

Dimenzije nizova
Nizovi se sastoje iz tzv. dimenzija. Dimenzije možemo zamisliti kao prostor, slično kao u temi o četvrtoj dimenziji ;)
Recimo, jednodimenzionalni niz se prostire kao linija, pa ćemo poziciju elementa u nizu odrediti korišćenjem rednog broja u koloni. Kada bismo dodali još jednu dimenziju, imali bismo niz koji se sastoji iz kolona i redova. Ovo bi značilo da je za određivanje pozicije u nizu potrebno više podataka, tačnije pozicija u redu i u koloni. Ovo možemo ponavljati iznova i iznova.
Inicijalizacija dimenzija, vrši se između malih (uglastih) zagrada, navođenjem zapeta. Pogledajmo sledeća tri primera :
int[] niz1 = new int[8];
int[ , ] niz2 = new int[8,6];
int[ , , ] niz3 = new int[8,6,9];
Niz1 u prvom primeru jeste jednodimenzionalni niz, budući da se u njemu ne nalazi niti jedna zapeta. Dimenzije sledećeg niza ograničene su jednom zapetom, te on ima dve dimenzije. Slično važi i za treći niz. Ovim postupkom dolazimo do zaključka da je broj dimenzija moguće odrediti kao n-1, gde je n broj zapeta koje ga određuju.

Višedimenzionalni nizovi
Pošto su nam jednodimenzionalni nizovi dovoljno, na njima se nećemo mnogo zadržavati već ćemo se baziti odmah na dvodimenzionalne. Dvodimenzionalni nizovi su poznatiji kao "matrice". Matrice se sastoje od više jednodimenzionalnih nizova, a određuju ih kolone i redovi, čije su vrednosti uopšteno n i m. Pogledajmo sledeći primer inicijalizacije matrice :
int[ , ] brojevi = new int[2,3];
Ova matrica se sastoji iz 2 kolone i 3 reda. Sada ćemo izvršiti deklaraciju slične matrice :
int[ , ] brojevi = new int[2, 3]
{
{1, 2, 3},
{3, 4, 5}
}
Da bismo pozvali određeni element, ponovo indeks počinje od nula, pa je recimo element brojevi[1, 2] broj 5.
Kreiranje trodimenzionalnih nizova, kao i svih ostalih dimenzija potpuno je identično ovom postupki pa se na tome nećemo zadržavati :)

Nazubljeni nizovi
Ovi nizovi su veoma slični višedimenzionalnim nizovima, osim što ne moraju imati isti broj elemenata u svakoj koloni ili svakom redu. Njih nazivaju i nizovima nizova. Inicijalizacija ovih nizova se vrši vrlo slično kao multidimenzionalnih :
int[][] brojevi = new int[2][];
Broj zagrada će varirati u odnosu na broj dimenzija koje naš niz ima. U ovom slučaju su to dve dimenzije. Primetićete da je popunjen samo prvi par zagrada brojevnom vrednošću, to je zato što želimo promenljiv broj redova. Deklaracija elemenata se može izvršiti na sledeći način :
int[][] brojevi = new int[2][]
{
new int[] {1, 2, 3, 4, 5, 6},
new int[] {7, 8, 9}
};
Pozivanje se vrši slično kao inicijalizacija, pozivanjem unutar dva para zagrada. Recimo brojevi[1,1] ima povratnu vrednost 8.

Metode nizova
Naravno da ovaj tutorijal ne bi bio kompletan kada ne bismo pokazali neke praktične metode, pa evo nekoliko najkorišćenijih. :)

Length
Ova metoda klase Array vraća povratnu celobrojnu vrednost o veličini niza. Koristimo je kao imeNiza.Length();
int[] niz;
int velicinaNiza = niz.Length();
IndexOf
Ova metoda se koristi za traženje indeksa elementa po vrednosti. Zapisuje se u obliku Array.IndexOf(imeNiza, element);
int[] niz;
int indeksElementa4 = Array.IndexOf(niz, 4);
LastIndexOf
Ova metoda se koristi za traženje indeksa elementa po vrednosti, počevši od najvećeg indeksa. Koristi se na isti način kao i IndexOf metoda. Razlika je dakle pretraga u suprotnom smeru.

Šta dalje?
Još samo 3 tutorijala nas dele od XNA igara, tako da još samo 2-3 dana su ostala od konkretnog divelopmenta :)
Živko sprema kolekciju vežbi da bih ja stigao da radim na XNA tutorijalima :)
Preostaju foreach petlja, setovi, rečnici i switch :)
 
Vrh