RAZVOJ IGRICA Danijel Pobi, dipl. Ing. Računarstva
Mar 21, 2016
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čenjeMali broj bibliotekaObjectPascal/DelphiDetekcija type grešaka
prilikom kompajliranjaVećina raspoloživih
biblioteka su wraperi oko postojećih C/C++ biblioteka i API-a
Vodeći programski jezik (industrijski standard)
Kompliciranije za učitiOgroman broj bibliotekaC++ (Java, C#)Veća fleksibilnost i veća
šansa pogreškeVelik broj biblioteka
omogućava rad za sve platforme, sustave i zadatke
OSNOVE PROGRAMIRANJA C/C++Podatkovni tipovi
PASCAL C/C++
integerrealcharbooleantype, vararraypacked array[n] of char^integer
intfloatchar- (false 0, true <>0)enum[]char[n], char**int
OSNOVE PROGRAMIRANJA C/C++Kontrola toka
PASCAL C/C++if uvjet then naredbe
else naredbe
while uvjet do naredbe
repeatu naredbe until uvjet
for izraz to izraz do naredbeFor izraz downto izraz do naredbe
Case izraz of izraz : naredbe.
if (uvjet) naredbeelse 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;
beginwriteln(‘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 varijabliGetmem()Freemem()Addr, Compare, Cseg, Dseg, FillByte, FillChar, High, IndexByte, Move, New, Ofs, Sptr-Ukratko jako kompliciran memory management
Statičko zauzimanje po varijablinewdelete -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• Class• Interface
(sučelje)• Member
accessibility (pristup)
• private• protected• public
#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;}
OSNOVE PROGRAMIRANJA C/C++Metoda• 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
#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();}
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
Mreža Video
Aplikacijski Sloj
HID
Zvuk
Simulacijska Logika
Timer File System
OSNOVE PROGRAMIRANJA C/C++Enkapsulacija• 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)
//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);}
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• 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
class Vozilo{int težina;float snaga;}
class Automobil:Vozilo{int colindri;string rezultatNurberring;}
class Avion:Vozilo{float rasponKrila;float maxVisinaLeta;}
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ČKEPovezivanje tijekom kompajliranjaVeliki krajnji program (exe file)Dijelovi potrebni izvođenju se direktno kopiraju u izvršnu datotekuIzmjena na biblioteci zahtjeva ponovno kompajliranje programaBrž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đenjaMali krajnji program (mali exe file)Nema kopiranja dijelova, samo se stavljaju poveznice na bibliotekuIzmjena 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 datotekamaPogodno 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 StudioDemonstracija kreiranja projektaIzvođenjeDebugging (brakpoint)Debug i release mod