|
Pravljenje igara Programski jezici, tehnike, alatke u službi pravljenja igara... |
|
Alatke vezane za temu | Vrste prikaza |
12.8.2006, 12:53 | #141 | |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: objasnjenja pocetniku
Polako bre čoveče! Tako kako si ti počeo ne počinje nijedan ozbiljan početnik u bilo kom programskom jeziku! Pogledao sam sajt čiji si link dao i sve što je dato tamo je namenjeno isključivo naprednim i već pomalo iskusnim korisnicima. Pa ne misliš valjda da je prva stvar koja se radi u nekom programskom jeziku implementacija RSA algoritma ili embedovanje exe fajlova jedan u drugi? Znači ako si već krenuo da učiš po tutorijalima onda bar izaberi neki početnički. Pošto ja nikada nisam koristio tutorijale, osim u slučajevima nekih naprednijih tehnika, ovde ne mogu da ti pomognem. Treba da vodiš računa o još jednoj činjenici koju sam ja već par puta napomneuo u ovoj temi. Biraj dobro svoje tutorijale
Preporuka. Ako već hoćeš da na ultra-mega-giga brz način naučiš da radiš u Visual C++ 6-ici onda nabavi negde SAMS-ovo izdanje "Teach yourself Visual C++ in 21 days" i realno za mesec dana ćeš biti sposoban da koristiš većinu stvari koje su ti kao početniku potrebne u Visual C++-u. Nažalost, ostaćeš uskraćen za najvažniji deo u celoj stvari, sam programski jezik, jer se ova knjiga orijentiše na primenu Visual komponente MS-ovog paketa. Bez obzira na zle jezike ovo je odlična knjiga za svakog početnika. Što se tiče tvog problema grešku prijavljuje linker i to najčešće u situaciji kada pogrešno konfigurišeš tip aplikacije na početku rada. Ukoliko hoćeš da napraviš konzolnu aplikaciju onda ne smeš da koristiš MFC i slične biblioteke. Primera radi, ako aplikacija treba da se "odigrava" samo u konzolu onda napraviš nov workspace i u njemu ili dodaš čist C/C++ source fajl ili ideš na opciju "Win32 Console Aplication". Ako hoćeš da napraviš Windows-like aplikaciju onda izabereš "MFC App Wizzard" ili slično. To što ti sada ništa ne radi najverovatnije ima za razlog činjenicu da si jednostavno počeo da "pakuješ" sve te kodove u jedan workspace i da si napravio haos ili da si, kao što sam pomenuo, malo "čačnuo" podešavanja. Još jednom, pre nego što bilo ko ovde iznese svoja "zapažanja" u vezi nečega neka se bar potrudi da za početak odradi fundamentalne stvari kako treba a ovde bi za početak bilo dobro bar osnovno upoznavanje sa Visual C++-om Citat:
I mala napomena. Nemoj da se igraš sa podešavanjima u "šestici" zato što ćeš samom sebi navući bespotrebne nevolje. Ovo tek možeš da radiš kad shvatiš šta koja opcija radi. Ako baš voliš da se "igraš" onda instaliraj neku .NET verziju pa udri do mile volje jer one imaju malo bolju kontrolu "egzibicija korinsika" |
|
12.8.2006, 14:06 | #142 |
Kekule Mekule
|
Re: objasnjenja pocetniku
Evo recimo ja sam donedavno koristio Dev-C++ i MSVC++ 6.0 uporedo.To je zbog MS-ovih pomenutih bagova sa konzolama(ti linkerski problemi) i jos par nekih enginea koje sam testirao.Sa druge strane mrzelo me je da Qt "konvertujem" na Dev-C++ pa mi treba MSVC++ 6.0. I holococ za sta dajes 3D tutor?DirectX ili OpenGL?
|
12.8.2006, 16:12 | #143 | ||||||
Član
Član od: 4.3.2006.
Lokacija: grad u oblacima
Poruke: 288
Zahvalnice: 1
Zahvaljeno 5 puta na 4 poruka
|
Re: objasnjenja pocetniku
Citat:
Citat:
Dok sam učio na njemu, uspeo sam da smestim hello world u 608 bajta (bez asemblera i hex editora; verovatno je nekome uspelo i manje). Sačuvao sam bin i okačio, a kada se pogleda Hex editorom, nešto tu baš i nema mesta za seriale windowsa i vsa... No opet ne treba biti previše siguran da ne postoje, jer Micro soft je to . U svakom slučaju, ta veličina mi sada u MingW32 ne polazi za rukom. Citat:
Citat:
Citat:
Citat:
Poslednja ispravka: priest (of_the_moon) (14.8.2006 u 22:00) Razlog: fajl je bio prilično nepotreban |
||||||
12.8.2006, 16:30 | #144 |
Veteran
Član od: 27.12.2005.
Lokacija: Vremenske Grobnice, Hiperion
Poruke: 680
Zahvalnice: 99
Zahvaljeno 124 puta na 82 poruka
|
Re: objasnjenja pocetniku
Zar VB ne traži nekakav vb-runtime ( cca 1MB, basic ) , da bi mogao da pokrećeš programe pisane u njemu?
U vezi lova na slona, pa reč je o sledećem: C je prilagođeniji mašini, dok je C++ prilagođeniji ljudskom načinu razmišljanja. U C++ su je mnogo lakše izvesti neke stvari. Npr:-C++ : klasa Matrica sa definisanim operatorom * omogućava da imaš 2 objekta tipa Matrica i da sledeći izraz ima smisla : C=A*B ( A i B su Matrice ) -C : prvo praviš objekat tipa <tip>** ( tip je recimo double ), pa imaš funkciju <tip>** mnozenje(<tip>** A,<tip>** B), pa množiš na sledeći način C=mnozenje(A,B); Ovo je najprostiji primer. |
12.8.2006, 16:56 | #145 | |
Mythbuster
|
Re: objasnjenja pocetniku
Citat:
|
|
12.8.2006, 19:27 | #146 | |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: objasnjenja pocetniku
Citat:
Rekao sam već da trenutno nemam ni trunkice slobodnog vremena (dramatičnosti radi spavam u vrh glave dva-tri sata dnevno ) pa je normalno da nemam više vremena ni za bilo kakvo piskaranje. Kada budem imao vremena (a kada će to biti nezna se) postaviću nekih par jednostavnih engine-a rađenih u C++-u od nule koji su stvarno obimno komentovani pa neće biti teško ni početnicima da se snađu. Naravno u trenutnom stanju fali još dodavanje nekih važnih komentara koji meni nisu bili potrebni dok su pisani ali bi bilo lepo da postoje u krajnjoj varijanti U svakom slučaju koga god mrzi da čeka mene (možda i pametnija solucija ) slobodno neka pročešlja http://www.gamedev.net na kome ima fantastičnih tutorijala o svemu i svačemu. Plus na forumu možete postaviti ama baš svakakvo pitanje i dobićete brz, jednostavan i kvalitetan odgovor. Sajt se prvenstveno osnodi na on ekoji koriste C++ ali ima nekih stvarčica i za Delphi. Ako si možda mislio da me pitaš čemu sam više naklonjen DirectX-u ili OpenGL-u moram da kažem da kod igara više volim da koristim DirectX. Da ovo opet ne bi preraslo u raspravu DirectX vs. OpenGL ponovo podvlačim da meni više leži i da je neke stvari moguće mnogo lakše realizovati nego u OpenGL-u. Bar što se tiče igara. E sada, koga ne mrzi da skida ceo SDK sa Microsoft-ovog sajta |
|
12.8.2006, 19:35 | #147 |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: objasnjenja pocetniku
@priest (of_the_moon)
Nisam mislio na linkove koje si ti dao za optimizaciju aplikacija nego ovaj sajt što je Eclipse pomenuo odakle skida source-ove http://www.planet-source-code.com/ |
12.8.2006, 20:49 | #148 |
Starosedelac
|
Re: objasnjenja pocetniku
Sto ne? Ja sam VB6 ucio iz raznih sourceva
Skines, proucis, naucis |
12.8.2006, 21:00 | #149 |
Veteran
|
Re: objasnjenja pocetniku
Sta sada?
skinem dev c++, 4.9.9.2. i pocnem sa onom tvojom svetom knjigom C++ Practical Programming by Example i stignem cak do helo world i pocinju problemi // a small C++ program #include <iostream> int main() { std::cout << "Hello, world!" << std::endl; return 0; } uradim to i nista... kopmajlujem pa pokrenem i pokaze dos prozor i odma ga zatvori i onda cackam malo dev i idem na neki njegov primer heloo svete i od izbaci #include <iostream> using namespace std; int main (int argc, char *argv[]) { cout << "Hello World!" << endl; cout << "Press ENTER to continue..." << endl; cin.get(); return 0; } i to se razlikuje sa onim iz knjige ali RADI. STA DALJE? |
12.8.2006, 21:15 | #150 | |
V.I.P. GNU/Linux
Član od: 1.11.2005.
Poruke: 11.236
Zahvalnice: 2.140
Zahvaljeno 4.977 puta na 2.897 poruka
|
Re: objasnjenja pocetniku
Citat:
|
|
12.8.2006, 21:17 | #151 |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: objasnjenja pocetniku
O tome sve vreme i pričamo ovih par postova
Da skratim. Oba koda funkcionišu perfektno i rade ono što treba da urade. Glavna razlika između prvog i drugog source-a leži u onom "cin.get();". Osnovna namena ove komande jeste da kada ti na ekranu ispiše "Hello world" program sačeka da "čukneš" neki taster pre nego li se prozor u kome je tekst ispisan zatvori.Druga verzija je pisana sa očiglednom namerom da radi bez problema i u DevC++-u. Pošto tvoja prva verzija nema ovaj deo, kod se jednostavno izvrši i prozor se zatvori veoma brzo tako da ti imaš osećaj kao da je samo "trepnuo" Prvi kod bi realno bio jedino "vidljiv" (tj. prozor bi ostao otvoren po deafultu sve dok ne pritisneš Enter) u MS Visual C++-u pošto isti ubacuje već pominaju rečenicu "Press a key to continue". U svakom slučaju ako budeš nameravao da koristiš DevC++ stavljanje "std::cin.get()" ispred "return 0" je preporučljivo ako je program konzolnog tipa ili treba samo da prikaže neke obrađene informacije ali tako da korisnik stigne da pročita šta mu je sve program "servirao". Nemoj da te ovakva sitnica ili bolje rečeno glupost obeshrabri i nastavi sa sledećim primerima ali vodi računa o svemu šta je ovde već rečeno. To znači da pošto vidim da nameravaš da koristiš DevC++ možeš slobodno da koristiš "using namespace std;" a da na svim mestima gde ti se pojavi "std::" u kodu (ako postoji) jednostavno izbaciš ovaj deo kao nepotreban. Mada ako ga ostaviš kompajler se neće buniti edit: sad videh da je voodoo_nbg već "bacio magiju" ali nije bilo loše ako si pročitao i ovaj post. |
12.8.2006, 21:34 | #152 |
Veteran
Član od: 27.12.2005.
Lokacija: Vremenske Grobnice, Hiperion
Poruke: 680
Zahvalnice: 99
Zahvaljeno 124 puta na 82 poruka
|
Re: objasnjenja pocetniku
Dodaj sledeće linije:
Kod:
... #include <stdlib.h> ... int main(int argc,char** argv) { ... system("PAUSE"); return 0; } |
12.8.2006, 22:51 | #153 |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: objasnjenja pocetniku
A pa kolega bez ljutnje ali ovo malkice više naginje na C stranu nego na "hard-core" C++
Ne zaboravi da većina početnika koji prate ovu temu koriste literaturu vezanu za C++ a ne za C pa neko može da se zapita recimo šta su kog đavola "stdlib.h" itd. Naime, iako bi ovaj kod radio ne bih ga preporučio C++ polaznicima iz par razloga. Prvi je korišćenje C headera kao što je "stdlib.h" i to u ovom slučaju čisto da bi se pozvala "system" funkcija. Pošto se program već koristi za ispis teksta to znači da mora biti "include-ovano" još minimalno i "stdio.h" zaglavlje. Malo preterano korišćenje resursa a i ne preterano svrsishodno kada je u C++ varijanti (koji se ovde i uči) potrebno koristiti samo jedno zaglavlje koje obavlja isti posao. Umesto C headera stvarno preporučujem navikavanje na C++ alternativu "iostream" koja u sebi sadrži sve što je potrebno za rad sa ulazom i izlazom. Iako realno gledano "std::cin.get()" radi nešto potpuno drugačije od "system"-a krajnji efekat po korisnika je isti jer program čeka na intervenciju korisnika. Prednost korišćenja C++ pristupa bi u ovom slučaju bila i ta što bi korisnik koji radi aplikaciju recimo na srpskom mogao da "servira" svoj tekst tipa "Utcukajte si taster da nastavite..." a ne standardni "Press any key to continue". Druga stavka je i korišćenje samog "system-a" iz zaglavlja "stdlib.h". Lično mrzim da sistemu jednostavno prosledim neku jednostavnu komandu a da na njemu bude kako će komandu (u ovom slučaju status "PAUSE") da interpretira. Zašto koristiti ovako "pojednostavljivanje" kada aplikacija može sasvim lepo i kraće da se napiše a da bude apsolutno poznato šta se u datom trenutku dešava? I to opet korišćenjem samo "iostream-a" Doduše i sam DevC++ pri kreiranju generičke konzolne aplikacije voli da koristi dodatni "cstdlib" da bi pozvao isti taj "system" ali opet kao što kažem po meni porpilično nepotrebno. Još jedna stvar. Početnici će takođe sigurno da se zbune šta znači ono "int argc,char** argv" jer toga nema nigde ni u jednom "HelloWorld" programu koji se uči u C++ kursu. Kad sam već ovde napomenuću da ove promenljive sadrže podatke o tome šta ste još dodali kao argumente u komandnoj konzoli kada ste pozivali program. Znači ako na primer upišete u konzoli komandu "helloworld.exe -talk -curse -voice" vaš program sada odmah po pozivanju sadrži dve promenjljive "argc" i "argv". Prva promenjljiva je ceo broj i sadrži broj prosleđenih argumenata prilikom pozivanja komande a to bi ovde bilo 3 (talk,curse,voice). "Argv" je nešto što se zove polje pokazivača na pokazivače ili jednostavnije rečeno može se porediti sa nizom koji sadrži adrese gde se nalaze svi oni argumenti koje ste ukucali pri pozivanju programa. Ovo je malo napredniji deo C-a i C++-a tako da je sve ovo trebalo da bude samo informacije radi Odužih ali u suštini za HelloWorld program ovaj deo uopšte nije potreban |
12.8.2006, 22:54 | #154 |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: objasnjenja pocetniku
E sad da ne bi bilo više zabuna oko toga kako kog đavola treba da izgleda jednostavan "HelloWorld" program koji će da radi na svim sistemima i svim kompajlerima evo jednog jednostavnog "malo dorađenog" "C++ standard full-proof" "HelloWorld" programa! Ovaj kod uzima u obzir i MSVC++ kikseve sa namespace deklaracijama.
Kod:
#include <iostream> // otvaranje standardnog zaglavlja int main () { std::cout << "Hello World!" << std::endl; // ispis teksta std::cout << "Utcukajte si taster da nastavite..." << std::endl; //ispis teksta std::cin.get(); // program ceka da se pritisne neki taster return 0; // povratak vrednosti "0" operativnom sistemu sto znaci da je sve OK } |
12.8.2006, 23:15 | #155 |
Kekule Mekule
|
Re: objasnjenja pocetniku
Ozbilnije npr.
Kod:
#include <iostream> int main() { int varijabla1; // varijabla povratnog tipa int(celobrojni broj) int varijabla2; std::cout << "Unesite prvi broj: " << std::endl; std::cin >> varijabla1; std::cout << "Unesite drugi broj: " << std::endl; std::cin >> varijabla2; std::cout << "Zbir brojeva je: " << varijabla1 + varijabla2 << std::endl; return 0; } Kod:
int varijabla3 = varijabla1 + varijabla2; |
12.8.2006, 23:30 | #156 |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: objasnjenja pocetniku
Odličan "napredniji" primer
Dodao bih samo da kada je potrebno definisati više od jedne promenljive istog tipa na jednom mestu moguće ih je odvojiti zarezom. Primera radi umesto definicije tri promenjljive zasebno: Kod:
double kolicina; double cena; double ukupno; Kod:
double kolicina, cena, ukupno; Moram da priznam da ova tema počinje da mi se sviđa jer se sve više ljudi uključuje u nju sa nekim predlozima i informacijama ili što bi se reklo konačno sa nečim konkretnim i opipljivim Samo bih možda preporučio da svaki ponuđeni kod bude malo prokomentarisan ili da bar sadrži komentar u okviru koda kako bi bio razumljiv. |
12.8.2006, 23:41 | #157 |
Kekule Mekule
|
Re: objasnjenja pocetniku
Evo nesto slicno samo sa unosom teksta:
Kod:
#include <iostream> int main() { char ime[21]; // niz od 20 karaktera - 21 = null terminator std::cout << "Kako se zoves? " << std::endl; std::cin.get(ime, 21); // uzima niz karaktera do n std::cout << "Tvoje ime je: " << ime << std::endl; return 0; } |
13.8.2006, 0:59 | #158 |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: objasnjenja pocetniku
Mali komentar o ovom poslednjem kodu. ANDROSS nećeš zameriti ali ovde smo da učimo zar ne
Definicija Kod:
char ime[21]; Ovde sledi i objašnjenje toga šta je to "null terminator" ANDROSS-ov program u suštini radi jednu veoma jednostavnu stvar. Pita korisnika za ime koje korisnik unosi nakon čega ispisuje uneto ime. Kako se to radi. Jednostavno. Pratimo ANDROSS-ov kod. Prva linija programa Kod:
char ime[21]; Drugi red Kod:
std::cout << "Kako se zoves? " << std::endl; Deo koda Kod:
std::cin.get(ime, 21); Deo koda Kod:
std::cout << "Tvoje ime je: " << ime << std::endl; Ovde na scenu stupa problem sa tzv. "null terminatorom". Naime, u C-u i C++-u svi string-ovi na kraju moraju da imaju tzv. "null-terminator" koji označava kraj stringa. On se označava sa "\0". Kako se često stringovi unose preko tastature a poslednji taster pri unosu je ENTER treba ispred tog terminatora dodati još jedno mesto za "novi red" koji se označava sa "\n". Znači ako ovde ukucate recimo ime "Misa" vaš string za upis će imati dužinu od 6 a ne 4 karaktera! O ovome treba voditi računa a posebno u složenijim slučajevima. Da ovde ne bi bilo zabune "\n" ima dužinu od jednog karaktera jer pripada grupi specijalnih karaktera koji se označavaju sa početnim "\" u imenu. Postoji puno specijalnih karaktera kao što su: "\a" - beep (aktivira beeper računar i čuje se zvuk, veoma interesantno ), "\b" - backspace, "\t" - vertikalni tabulator, "\v" - horizontalni tabulator, "\"" (ide obrnuta kosa crta pa navodnik) - navodnik itd. Enter na kraju za posledicu u ovom slučaju ima jednu gadnu manu a to je da automatski (pošto je “ENTER” poslednji bufferovan sa tastature pa zbog brzine izvršenja programa par tih buffer-ovanih ENTER-a "iscuri") okida bilo kakav "std::cin.get();" koji bi se našao eventualno na kraju koda ispred “return” komande. Opet govorim o onima koji ne koriste MSVC++ Dakle za one koji koriste full C++ kompatibilne kompajlere treba primeniti malo izmenjen kod. Poslednja ispravka: holodoc (13.8.2006 u 1:38) |
13.8.2006, 1:01 | #159 |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: objasnjenja pocetniku
U ovom slučaju iskoristiću M.Silenus-ovo rešenje ali u full C++-varijanti. To znači da ćemo umesto C headera „stdlib.h“ koristiti C++-ov ekvivalent „cstdlib“ da bi smo pozvali "system" funkciju koja će da ukoči program kad treba. Kada korisnik pritisne ENTER program izvršava liniju „return EXIT_SUCCESS;“. O čemu se ovde radi uopšte? Standardna zaglavlja neretko sadrže u sebi deklarisane konstante (ne promenljive) kojima su dodeljene vrednosti koje ne mogu da se menjaju. U konkretnom slučaju <cstdlib> sadrži u sebi konstantu „EXIT_SUCCESS“ kojoj je dodeljena vrednost „0“ tako da je ovde „return EXIT_SUCCES;“ ekvivalentno sa „return 0;“.
Dakle verzija ANDROSS-ovog programa koja bi lepo funkcionisala na svim platformama bi izgledala ovako: Kod:
#include <cstdlib> // zaglavlje potrebno za poziv "system" funkcije #include <iostream> // standardno zaglavlje ulaza i izlaza int main() { char ime[21]; // deklaracija niza koji sadrzi karaktere duzine 21 std::cout << "Kako se zoves? " << std::endl; // unos imena std::cin.get(ime,21); //unos imena; maksimalna duzina 21 karakter std::cout << "Tvoje ime je: " << ime << std::endl; // ispis unetog imena system("PAUSE"); // pauziranje aplikacije return EXIT_SUCCESS; // vracanje informacije o uspesnom izvrsenju } |
13.8.2006, 22:32 | #160 |
Mythbuster
|
Re: objasnjenja pocetniku
Da, ovo je odlična tema i treba imati što više ovakvih, kojima će početnici moći da uplove u programerske vode. Neću komentarisati C++ kodove, iako ih razumem, jer ipak prvenstveno radim u VB-u, a ovde ima dosta boljih poznavaoca C++ od mene, već ću samo pokazati kako bi dati kodovi otprilike izgledati u VB-u , bez ikakvog poziva na flejm, nego čisto da malo uporedimo sintaksu i određena rešenja, što nekome može biti korisno... Nadam se da vam to ne smeta. Elem, da vidimo...
Kod:
#include <iostream> // otvaranje standardnog zaglavlja int main () { std::cout << "Hello World!" << std::endl; // ispis teksta std::cout << "Utcukajte si taster da nastavite..." << std::endl; //ispis teksta std::cin.get(); // program ceka da se pritisne neki taster return 0; // povratak vrednosti "0" operativnom sistemu sto znaci da je sve OK } Kod:
Msgbox "Hello World" 'ispisuje tekst u navodnicima u prozoru Što se tiče koda koji sabira dva broja Kod:
#include <iostream> int main() { int varijabla1; // varijabla povratnog tipa int(celobrojni broj) int varijabla2; std::cout << "Unesite prvi broj: " << std::endl; std::cin >> varijabla1; std::cout << "Unesite drugi broj: " << std::endl; std::cin >> varijabla2; std::cout << "Zbir brojeva je: " << varijabla1 + varijabla2 << std::endl; return 0; } Kod:
Dim varijabla1 'deklaracija prve varijable Dim varijabla2 'deklaracija druge varijable varijabla1 = InputBox("Unesite prvi broj", "Unos podataka", "0") 'prompt za unos prvog broja varijabla2 = InputBox("Unesite drugi broj", "Unos podataka", "0") 'prompt za unos drugog broja MsgBox "Zbir unetih brojeva je " & Val(varijabla1) + Val(varijabla2) 'prikazujemo zbir brojeva, a funkcija val omogucava da ukoliko je korisnik uneo neki tekst varijabli dodeli vrednost nula |
Bookmarks sajtovi |
Tagovi |
programiranje, tutoriali |
Alatke vezane za temu | |
Vrste prikaza | |
|
|