250 likes | 445 Vues
Razvoj igrica. Danijel Pobi, dipl. Ing. Računarstva. Plan predavanja. Osnove programiranja C/C++ Razlike Pascala i C/C++ OOP (Obijektno orijentirano programiranje) Visual Studio Osnove računalne grafike Grafika na elektroničkim uređajima Osnovni elementi Scena
E N D
Razvoj igrica Danijel Pobi, dipl. Ing. Računarstva
Plan predavanja • Osnove programiranja C/C++ • Razlike Pascala i C/C++ • OOP (Obijektno orijentirano programiranje) • Visual Studio • Osnove računalne grafike • Grafika na elektroničkim uređajima • Osnovni elementi • Scena • Praktični rad na Ogre rendering engine-u • Stvaranje scene i elementi • Skripte • Alati • Platforme i višeplatformski razvoj
OSNOVE PROGRAMIRANJA C/C++Zašto C++? PAscal C/C++ Rijeđe korišten (time i slaba dokumentacija) Jednostavan za učenje Mali broj biblioteka ObjectPascal/Delphi Detekcija type grešaka prilikom kompajliranja Većina raspoloživih biblioteka su wraperi oko postojećih C/C++ biblioteka i API-a Vodeći programski jezik (industrijski standard) Kompliciranije za učiti Ogroman broj biblioteka C++ (Java, C#) Veća fleksibilnost i veća šansa pogreške Velik broj biblioteka omogućava rad za sve platforme, sustave i zadatke
OSNOVE PROGRAMIRANJA C/C++Podatkovni tipovi Pascal C/C++ integer real char boolean type, var array packed array[n] of char ^integer int float char - (false 0, true <>0) enum [] char[n], char* *int
OSNOVE PROGRAMIRANJA C/C++Kontrola toka Pascal C/C++ ifuvjet then naredbe else naredbe while uvjet do naredbe repeatu naredbe until uvjet for izraz to izraz do naredbe For izraz downto izraz do naredbe Case izraz of izraz : naredbe . if (uvjet) naredbe else naredbe while (uvjet) naredbe do naredbe while (uvjet) for (izraz;uvjet;izraz) naredbe switch(izraz){ case izraz: naredbe ..... default: naredbe}
OSNOVE PROGRAMIRANJA C/C++Funkcije i procedure PAscal C/C++ function i procedure function f(x,y:integer):integer; procedure f(q: integer); nema procedura, sve su funkcije int f(int x, int y); void k(int q);
OSNOVE PROGRAMIRANJA C/C++Hello World! PAscal C/C++ program HelloWorld; begin writeln(‘Hello World!’); end. #include <iostream> void main() { std::cout<<“Hello World!”; }
OSNOVE PROGRAMIRANJA C/C++varijable PAscal C /C++ var i: integer; mora se deklarirati izvan samog begin-end dijela i:=100; var pozdrav: string; pozdrav:=‘Pozdrav’; Read and Readln int i; može se deklarirati bilo gdje unutar programa i=100; string pozdrav=”Pozdrav”; cin
OSNOVE PROGRAMIRANJA C/C++Memory management PASCAL C/C++ Statičko zauzimanje po varijabli Getmem() Freemem() Addr, Compare, Cseg, Dseg, FillByte, FillChar, High, IndexByte, Move, New, Ofs, Sptr -Ukratko jako kompliciran memory management Statičko zauzimanje po varijabli new delete -Sve ostale funkcije i metode se oslanjaju na ove osnovne dvije -Jednostavan, moćan, ali time i lagano za pogriješit
OSNOVE PROGRAMIRANJA C/C++OOP • Class (klasa) • Method (metoda) • Abstraction (abstrakcija) • Encapsulation (enkapsulacija) • Polimorphism (polimorfizam) • Dynamic dispatch (dinamično slanje) • Inheretance (nasljeđivanje) • Instance (instanca) • Recursion (rekurzija)
OSNOVE PROGRAMIRANJA C/C++Klasa #include <iostream> using namespace std; class Vozilo{ public: string ime; int godiste; float snaga; float tezina; Vozilo(); ~ Vozilo(); } void main(){ Vozilo auto(); auto.ime=”Ariel Atom”; auto.godiste=2009; auto.snaga=200; auto.tezina=500; cout<<”Sportski auto je ”<<auto.ime; } Class Interface (sučelje) Member accessibility (pristup) private protected public
OSNOVE PROGRAMIRANJA C/C++Metoda #include <iostream> using namespace std; class Vozilo{ public: string ime; float snaga; float tezina; Vozilo(); ~ Vozilo(); void setSnaga(float ks){ snaga=ks; } void setTezina(float kg){ tezina=kg; } float HPperTon(){ return snaga/(tezina/1000); } } void main(){ Vozilo auto(); auto.setSnaga(200); auto.setTezina(500); cout<<ja.HPperTon(); } Metode u klasama se mogu smatrati kao procedure, one definiraju ponašanje klase Metode kao i klase mogu biti private, protected i public Metode mogu biti povezane za klasu statično (tijekom kompajliranja) i dinamično (tijekom izvođenja programa) Abstraktna metoda i sučelje Overload Override virtual
OSNOVE PROGRAMIRANJA C/C++Abstrakcija „Abstrakcija u programiranju je proces kojim se podaci i program definirani sa prezentacijom svoje forme sličnom svom značenju” Abstrakcija podataka i programa su različiti koncepti koji se objedinjuju u modernim OOP programskim jezicima C# object Java superclass Ključna riječ virtual Važan koncept abstrakcije programskih slojeva
OSNOVE PROGRAMIRANJA C/C++Enkapsulacija //Vozilo.h #include <iostream> using namespace std; class Vozilo{ string ime; float snaga; float tezina; Vozilo(); ~ Vozilo(); void setSnaga(float ks); void setTezina(float kg); float HPperTon(); } //Vozilo.cpp void Vozilo::setSnaga(float ks){ snaga=ks; } void Vozilo::setTezina(float kg){ tezina=kg; } float Vozilo::HPperTon(){ return snaga/(tezina/1000); } Enkapsulacija se koristi da bi se sakrile vrijednosti ili stanja struktura podataka unutar klase da bi se spriječio neovlašteni direktan pristup sučelje i implementacija Iznimno važno priradu s bibliotekama i povezivanju na njih Moguće i u starijim jezicima, ali mehanizmi su bili prekomplicirani i neučinkoviti (API pozivi na neprozirne tipove (opaque types) koji direktno rade na memoriji)
OSNOVE PROGRAMIRANJA C/C++Polimorfizam • Omogućava da se vrijednosti različitih podatkovnih tipova obračuju koristeći jedinstveno sučelje • 3 vrste polimorfizma: • Ad-hoc • Parametric • Subtype • Jako često korišten koncept prilikom izrada raznih biblioteka, tj. klasa za rad s različitim podatkovnim strukturama i objektima • Primjer Liste, Stogovi, Hrpe, Stabla, ...
OSNOVE PROGRAMIRANJA C/C++Dynamic dispatch • To je proces odabira koja implementacija polimorfnog operatora će se pozvati prilikom izvođenja • Problem kod polimorfizma je što često nemožemo do izvođenja programa znati s kojim točno podatkovnim tipom radimo ili se podatkovni tip mijenja tijekom izvođenja
OSNOVE PROGRAMIRANJA C/C++Nasljeđivanje class Vozilo{ int težina; float snaga; } class Automobil:Vozilo{ int colindri; string rezultatNurberring; } class Avion:Vozilo{ float rasponKrila; float maxVisinaLeta; } Odnos među objektima Nasljeđivanje se ovdje odnosi na to da klasa može nasljediti atribute i ponašanje od neke prijašnje klase (bazna klasa, superklasa ili roditeljska klasa) Ovim načinom se stvara hijerarhija klasa (u kojoj imamo rezultatne klase: derivirane klase, podklase i dječije klase (child classes)) Nasljeđivanjem imamo veliku modularnost programiranja gdje možemo novim klasama proširivat, mijenjat i prepravaljat nasljeđenu klasu Pozitivno: overriding, code reuse Negativno: previše nasljeđivanja može usporiti izvođenje
OSNOVE PROGRAMIRANJA C/C++Instance Instanca je specifična realizacija objekta Svaki objekt se može varirati na više načina, a svaka realizirana varijanta objekta je instanca. Svaki program koji se izvršava je instanca programa. Objekt je instanca klase
OSNOVE PROGRAMIRANJA C/C++Rekurzija • Misli se na objektnu rekurziju gdje klasa može zvati samu sebe • ključna riječ „this”(self ili me) • svi OOP jezici imaju konstantni pokazivač ili referencu sami na sebe kako bi trenutni objekt mogao pozivati svoje metode i koristiti svoje varijable • Jako moćan saveznik, ali još gori neprijatelj • Kod nekihi programskih jezika može se promjeniti vrijednost, ali time se ne mijenja vrijednost objekta, nego identitet objekta na koji se ostatak metoda referiraj • Mogu se u nekim slučajevima direkno castati u drugio podatkovni tip s eksplicitnim this pointerom
OSNOVE PROGRAMIRANJA C/C++Biblioteke (library) • Biblioteka je kolekcija implementacija ponašanja napisana u obliku jezika s točno definiranim sučeljima s kojima se ponašanje potiče • Organizirano je tako da se može koristiti s više programa koji nemaju nikakvu vezu jedan s drugim • Primjeri iostream, math, API-i poput DirectX i OpenGL,....
OSNOVE PROGRAMIRANJA C/C++Biblioteke (library) • Više vrsta biblioteka: • Statične • Dijeljene • Objektne i klasne • Udaljene • ... • Dva načina povezivanja: • Statički (lib) • Dinamički (dll)
OSNOVE PROGRAMIRANJA C/C++Biblioteke (library) statičke dinamičke Povezivanje tijekom kompajliranja Veliki krajnji program (exe file) Dijelovi potrebni izvođenju se direktno kopiraju u izvršnu datoteku Izmjena na biblioteci zahtjeva ponovno kompajliranje programa Brže se izvodi jer je sav kod u istoj datoteci Primjena u programima gdje nema izmjena, kritična važnost brzine i sigurnosti Povezivanje tijekom izvođenja Mali krajnji program (mali exe file) Nema kopiranja dijelova, samo se stavljaju poveznice na biblioteku Izmjena zahtjeva samo zamjenu biblioteke ako nije bilo izmjena sučelja (ekstremni slučaj) Malo sporije nego statično zbog stalne potrebe za komunikacijom s drugim datotekama Pogodno za komponente koje su pod stalnim razvojem i optimizacijama (DirectX i ostale komponente operativnog sustava kao, driveri, framework, itd...)
Visual Studio • Trenutno najbolji razvojni alat (IDE=interactive developement enviroment) • Mogućnost razvoja za sve platforme i sve sustave • Mogućnost korištenja više programskih jezika C++, C#, VB, SQL, F#, HTML, JavaScript, ... • Neradi na svim operativnim sustavima, nego samo na Windows OS-u • Alternative: Eclypse, CodeBlock, Xcode, Notepad ...
Visual Studio Demonstracija kreiranja projekta Izvođenje Debugging (brakpoint) Debug i release mod
Kraj prvog dijela PITANJA? nema glupih pitanja danijel@dmt-softver.hr zadaće nikom neriješavam, ako ih bude ;)