You are on page 1of 25

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 Vodeći programski jezik


dokumentacija) (industrijski standard)
Jednostavan za učenje Kompliciranije za učiti
Mali broj biblioteka Ogroman broj biblioteka
ObjectPascal/Delphi C++ (Java, C#)
Detekcija type grešaka Veća fleksibilnost i veća šansa
prilikom kompajliranja pogreške
Većina raspoloživih biblioteka Velik broj biblioteka
su wraperi oko postojećih omogućava rad za sve
C/C++ biblioteka i API-a platforme, sustave i zadatke
OSNOVE PROGRAMIRANJA C/C++
Podatkovni tipovi
PASCAL C/C++

integer int
real float
char char
boolean - (false 0, true <>0)
type, var enum
array []
packed array[n] of char char[n], char*
^integer *int
OSNOVE PROGRAMIRANJA C/C++
Kontrola toka
PASCAL C/C++
if uvjet then naredbe if (uvjet) naredbe
else naredbe else naredbe

while uvjet do naredbe while (uvjet) naredbe

repeatu naredbe until uvjet do naredbe while (uvjet)

for izraz to izraz do naredbe for (izraz;uvjet;izraz) naredbe


For izraz downto izraz do naredbe

Case izraz of izraz : naredbe switch(izraz){ case izraz: naredbe .....


. default: naredbe}
OSNOVE PROGRAMIRANJA C/C++
Funkcije i procedure
PASCAL C/C++

function i procedure nema procedura, sve su


funkcije

function int f(int x, int y);


f(x,y:integer):integer;

procedure f(q: integer); void k(int q);


OSNOVE PROGRAMIRANJA C/C++
Hello World! 
PASCAL C/C++

program HelloWorld; #include <iostream>

begin void main()


writeln(‘Hello World!’); {
end. std::cout<<“Hello
World!”;
}
OSNOVE PROGRAMIRANJA C/C++
varijable
PASCAL C /C++
var i: integer; int i;

mora se deklarirati izvan samog


begin-end dijela može se deklarirati bilo gdje
unutar programa
i:=100;
i=100;
var pozdrav: string;

string pozdrav=”Pozdrav”;
pozdrav:=‘Pozdrav’;

Read and Readln cin


OSNOVE PROGRAMIRANJA C/C++
Memory management
PASCAL C/C++

Statičko zauzimanje po Statičko zauzimanje po


varijabli varijabli
Getmem() new
Freemem() delete
Addr, Compare, -Sve ostale funkcije i
Cseg, Dseg, FillByte, metode se oslanjaju na ove
FillChar, High, IndexByte,
osnovne dvije
Move, New, Ofs, Sptr
-Jednostavan, moćan, ali
-Ukratko jako kompliciran
memory management 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)
#include <iostream>
OSNOVE
PROGRAMIRANJA C/C++ using namespace std;
Klasa
class Vozilo{
public:
• Class string ime;
• Interface (sučelje) int godiste;
float snaga;
• Member float tezina;
accessibility Vozilo();
(pristup) ~ Vozilo();
}
• private
• protected void main(){
Vozilo auto();
• public
auto.ime=”Ariel Atom”;
auto.godiste=2009;
auto.snaga=200;
auto.tezina=500;
cout<<”Sportski auto je ”<<auto.ime;
}
#include <iostream>

OSNOVE using namespace std;


PROGRAMIRANJA C/C++ class Vozilo{
Metoda public:
string ime;
• Metode u klasama se mogu float snaga;
float tezina;
smatrati kao procedure, one
definiraju ponašanje klase Vozilo();
• Metode kao i klase mogu biti ~ Vozilo();
private, protected i public
void setSnaga(float ks){
• Metode mogu biti povezane za snaga=ks;
klasu statično (tijekom }
kompajliranja) i dinamično
(tijekom izvođenja programa) void setTezina(float kg){
tezina=kg;
• Abstraktna metoda i sučelje
}
• Overload
• Override float HPperTon(){
return snaga/(tezina/1000);
• virtual }
}

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 Zvuk Video

Simulacijska
SimulacijskaLogika
Logika
Aplikacijski
AplikacijskiSloj
Sloj

HID Timer File System


//Vozilo.h
#include <iostream>
OSNOVE
PROGRAMIRANJA C/C++ using namespace std;

Enkapsulacija class Vozilo{


string ime;
• Enkapsulacija se koristi da bi se float snaga;
sakrile vrijednosti ili stanja float tezina;
struktura podataka unutar
klase da bi se spriječio Vozilo();
neovlašteni direktan pristup ~ Vozilo();
void setSnaga(float ks);
• sučelje i implementacija void setTezina(float kg);
• Iznimno važno priradu s float HPperTon();
bibliotekama i povezivanju na }
njih
//Vozilo.cpp
• Moguće i u starijim jezicima, ali
mehanizmi su bili void Vozilo::setSnaga(float ks){
prekomplicirani i neučinkoviti snaga=ks;
(API pozivi na neprozirne }
tipove (opaque types) koji
direktno rade na memoriji) 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
class Vozilo{
OSNOVE
PROGRAMIRANJA C/C++ int težina;
Nasljeđivanje float snaga;


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, class Automobil:Vozilo{
superklasa ili roditeljska klasa)
• Ovim načinom se stvara int colindri;
hijerarhija klasa (u kojoj imamo
rezultatne klase: derivirane string rezultatNurberring;
klase, podklase i dječije klase
(child classes)) }
• Nasljeđivanjem imamo veliku
modularnost programiranja gdje
možemo novim klasama
proširivat, mijenjat i class Avion:Vozilo{
prepravaljat nasljeđenu klasu
• Pozitivno: overriding, code
float rasponKrila;

reuse
Negativno: previše nasljeđivanja
float maxVisinaLeta;
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 Povezivanje tijekom izvođenja


Veliki krajnji program (exe file) Mali krajnji program (mali exe file)
Nema kopiranja dijelova, samo se
Dijelovi potrebni izvođenju se stavljaju poveznice na biblioteku
direktno kopiraju u izvršnu Izmjena zahtjeva samo zamjenu biblioteke
datoteku ako nije bilo izmjena sučelja (ekstremni
Izmjena na biblioteci zahtjeva slučaj)
ponovno kompajliranje programa Malo sporije nego statično zbog stalne
potrebe za komunikacijom s drugim
Brže se izvodi jer je sav kod u istoj datotekama
datoteci Pogodno za komponente koje su pod
Primjena u programima gdje nema stalnim razvojem i optimizacijama
izmjena, kritična važnost brzine i (DirectX i ostale komponente operativnog
sigurnosti 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 ;)

You might also like