Blog o home-made izradi igara i novostima
Izrada Igara
Anketa
Da li bi htjeli napraviti svoju vlastitu igru?




Shoutbox
12.11.2017. 9:43 :: SOUVENIR ANAK ISLAMI
0812 9038 9038 (WA), HARGA SOUVENIR PERNIKAHAN MURAH MERIAH
12.11.2017. 10:26 :: SOUVENIR BAYI MURAH
0812 9038 9038 (WA), HARGA TUMBLER STARBUCKS HONG KONG
12.11.2017. 11:11 :: ALAT PRINT DI MUG
0812 9038 9038 (WA), TEMPAT JUALAN SOUVENIR DI BOGOR
12.11.2017. 13:01 :: HARGA MIKA UNTUK SOUVENIR GELAS
0812 9038 9038 (WA), TOKO SOUVENIR INDONESIA DI BANDUNG
12.11.2017. 13:27 :: TEMPAT JUAL SOUVENIR DI MALANG
0812 9038 9038 (WA), SOUVENIR GANTUNGAN KUNCI UNIK
12.11.2017. 13:50 :: JUAL MUG COATING CIBUBUR
0812 9038 9038 (WA), PAKET ULTAH ANAK TERMURAH
14.11.2017. 4:43 :: SOUVENIR MURAH PALEMBANG
0812 9038 9038 (WA), AGEN SOUVENIR PERNIKAHAN DI BANDUNG
14.11.2017. 5:12 :: SOUVENIR EROPA MURAH
0812 9038 9038 (WA), MUG PRINT FOTO
14.11.2017. 5:56 :: BELI SOUVENIR MURAH DI LOMBOK
0812 9038 9038 (WA), JUAL GELAS HARVEST TIME WARNA
14.11.2017. 7:04 :: TOKO KADO KITA JOGJA
0812 9038 9038 (WA), GROSIR GIFT BOX MURAH
14.11.2017. 8:03 :: ANEKA SOUVENIR ULTAH MURAH
0812 9038 9038 (WA), SOVENIR GELAS KECIL
14.11.2017. 18:54 :: COUPLE MUGS LONG DISTANCE
0812 9038 9038 (WA), HARGA MUG BAKAR
14.11.2017. 19:50 :: JUAL SOUVENIR ULANG TAHUN ANAK DI BALI
0812 9038 9038 (WA), MUG SABLON BANJARMASIN
14.11.2017. 20:47 :: SOUVENIR PERNIKAHAN MURAH D SURABAYA
0812 9038 9038 (WA), GROSIR SOUVENIR ULANG TAHUN MANGGA DUA
14.11.2017. 23:12 :: TOKO SOUVENIR PERNIKAHAN SOLO
0812 9038 9038 (WA), JUAL SOUVENIR PERNIKAHAN DI SUKABUMI
15.11.2017. 1:48 :: TOKO SOUVENIR PERNIKAHAN DEPOK
0812 9038 9038 (WA), ESTHER SOUVENIR KABUPATEN SIDOARJO JAWA TIMUR
15.11.2017. 2:02 :: SOUVENIR PERNIKAHAN MURAH BANDUNG
0812 9038 9038 (WA), JUAL SOUVENIR PERNIKAHAN BATAM
15.11.2017. 2:11 :: SOUVENIR MURAH PERNIKAHAN SURABAYA
0812 9038 9038 (WA), PUSAT GROSIR SOUVENIR PERNIKAHAN DI MALANG
15.11.2017. 2:31 :: HARGA MUG KARTUN
0812 9038 9038 (WA), MUG STANDAR PROMOSI
15.11.2017. 2:38 :: GELAS DAN MUG
0812 9038 9038 (WA), SOUVENIR NIKAH DI CIPINANG
15.11.2017. 4:04 :: VISI MISI PERUSAHAAN SOUVENIR
0812 9038 9038 (WA), PUSAT GROSIR SOUVENIR DI PALEMBANG
15.11.2017. 5:08 :: SOUVENIR SIRAMAN MURAH
0812 9038 9038 (WA), AGEN SOUVENIR PERNIKAHAN MURAH
15.11.2017. 5:58 :: SOUVENIR GELAS WINE DI SURABAYA
0812 9038 9038 (WA), HARGA SOUVENIR GELAS DI PASAR ASEMKA
15.11.2017. 6:27 :: GROSIR SOUVENIR PERNIKAHAN MURAH DI PALEMBANG
0812 9038 9038 (WA), KADO PERNIKAHAN KHAS JOGJA
15.11.2017. 7:17 :: HARGA GELAS ALUMUNIUM
0812 9038 9038 (WA), TEMPAT PEMBUATAN MUG DI BALI
15.11.2017. 7:42 :: JUS GELAS BESAR KUALA TERENGGANU
0812 9038 9038 (WA), MIKA SOUVENIR MURAH DI SURABAYA
15.11.2017. 8:39 :: GROSIR SOUVENIR PERNIKAHAN IMPORT
0812 9038 9038 (WA), PUSAT SOUVENIR DI TANAH ABANG
16.11.2017. 22:31 :: AGEN OBAT FOREX ASLI JAMBI
AGEN OBAT FOREX ASLI JAMBI
16.11.2017. 22:32 :: Jual Obat Forex Asli Pembesar Penis Di Medan
Jual Obat Forex Asli Pembesar Penis Di Medan
16.11.2017. 22:34 :: Agen Jual Viagra Obat Kuat Batam
Agen Jual Viagra Obat Kuat Batam
Google analytics
Blog
ponedjeljak, listopad 15, 2012
Pozdrav,

 

dugo sam bio neaktivan, no planiram opet pocet pisati tutoriale, ali na novoj adresi. Sve dosadasnje tutoriale cu prebaciti na svoju novu adresu gdje imam vise organizacijskih mogucnosti, i tamo nastavit pisati nove.

 

A nova adresa će biti ova: danijel.korent.info

Izrada-Igara @ 10:24 |Komentiraj | Komentari: 0
subota, veljača 12, 2011
4. PYGAME 1 - OSNOVNE FUNKCIJE

4.1. UVOD
Pygame je library (ili modul u pythonskom rijecniku) koji olaksava izradu 2D igara u python programskom jeziku. Pomocu njega mozete ucitati slike sa diska u memoriju i crtati ih u prozoru na zeljenim koordinatama, provjeriti da li korisnik tipka ili radi nesto sa misem, loadirati i svirati zvucne datoteke, provjeravati presijecanje dvaju kvadrata, itd. To naravno nisu sve mogucnosti al su one najvaznije i koje se najvise koriste, no za pocetak cu staviti samo najosnovnije stvari.


4.2. INICIALIZIRANJE
Da bi uopce mogli koristiti te mogucnosti moramo prvo napraviti nekoliko koraka. Moramo "importati" pygame modul da bi mogli koristiti njegove funkcije. Ovo se radi na jednostavan nacin, prvo se napise "import" pa ime modula:

import pygame

Nakon ove linije mozemo pozivati pygame funckije, al ih jos ne mozemo koristiti, moramo prvo pozvati pygame funkciju "init()" da se ona interno incijalizira te tek onda mozemo koristiti njegove ostale funkcije:

pygame.init()


4.3. OTVARANJE PROZORA
Da bi otvorili prozor i dobili varijablu(objekt) po kojem mozete crtati, koristi se pygame funkcija pygame.display.set_mode(). Ovaj poziv vraca varijablu(u pygame ju zovu surface) po kojoj mozete crtati (kojeg cu nadalje zvati glavni surface). To nam je ujedno i najvazniji surface u cijelom programu, jer to sto crtate po tom glavnom surface-u vidi se na vasem monitoru. Evo kako se poziva sa svojim argumentima:

glavni_surface = pygame.display.set_mode(rezolucija, opcije, dubina_boje)


4.3.1. REZOLUCIJA
Rezolucija se salje kao par dva cjelobrojna broja, npr: (800, 600) - u pythonu se ovakvi parovi zovu "tuples" i jos ce biti spomenuti. Jako je vazno da taj par bude u vlastitoj zagradi jer ce ga inace python prepoznati kao dva zasebna argumenta umjesto kao jedan "tuple", npr:

glavni_surface = pygame.display.set_mode( (800, 600) , opcije, dubina_boje)


4.3.2. OPCIJE
U ovaj argument saljete razne opcije koje zelite koristiti, recimo ako zelite da igra bude u fullscreen modu ili ako ne zelite onaj windows "okvir" oko prozora. Mozete koristiti razne kombinacije opcija, da bi postavili vise od jedne opcije stavite izmedu njih bitwise operator "|". Evo popis opcija:
Code:
   pygame.FULLSCREEN    - kao sto i pise, otvara fullscreen umjesto prozora
   pygame.DOUBLEBUF     - koristi dva buffera da animacije bude "glatke"
   pygame.HWSURFACE     - hardversko ubrzanje, radi samo u fullscreen modu (i navodno samo u Windows-ima?)
   pygame.OPENGL        - moguce je koristiti opengl u pygame prozoru, ova opcija to mogucuje
   pygame.RESIZABLE     - stvorenom prozoru se mogu u OS-u mijenjati dimezije sa misem, defaultno se ne moze
   pygame.NOFRAME       - ne crta onaj OS okvir i kontrole (minimize, close etc), samo pygame povrsinu


Primjer pozivanja:
glavni_surface = pygame.display.set_mode( (800, 600) , pygame.DOUBLEBUF | pygame.NOFRAME, dubina_boje)


4.3.3. DUBINA BOJE
Ovim argumentom si odabirete dubinu boje, odnosno koliko bitnu boju zelite koristiti u aplikaciji. Pygame preporucuje da ovaj argument ostavite prazan, koje je po defaultu 0, te ce pygame sam odrediti najbolji format koji moze koristiti u pokrenutom okruzenju. Ako za potrebe aplikacije bas trebate odredeni format boje, mozete ovdje staviti kao argument. Ako je taj format nedostupan pygame ce ga emulirati, sto opterecuje procesor, pa se zbog toga i preporucuje da si pygame sam odabere format. Primjer:

Najbolje je pozvati bez color depth argumenta:
glavni_surface = pygame.display.set_mode( (800, 600) , pygame.DOUBLEBUF | pygame.NOFRAME)

Ali ako bas trebate mozete, npr. za 32 bitnu boju:
glavni_surface = pygame.display.set_mode( (800, 600) , pygame.DOUBLEBUF | pygame.NOFRAME, 32)


4.4. UCITAVANJE SLIKE
Da bi ucitali neku sliku koristi se funkcija pygame.image.load. Kao argument ubacite ime slike (sa folderom ako nije u istom folderu gdje je i pokrenuti program). Ta funkcija vraca pygame objekt, tocnije surface, koji sadrzi sadrzi sliku iz te datoteke u svojoj memoriji. Ti surface-i se mogu "ljepiti"/nacrtati na bilo koji drugi surface na bilo kojim koordinatama na tom surfaceu. Nama je najvaznija/najzanimljivija mogucnost crtanja na onaj spomenuti "glavni_surface" kod kojeg se sve sto je nacrtano vidi na ekranu. To ce i biti glavni nacin crtanja igre, ucitavanje slika elemenata igre u surface i crtanje tih surface-a na glavni surface na zadanim koordinatama.

Evo primjer ucitavanja slike:

brod_surface = pygame.image.load("brod1.jpg")

Da bi spomenuto crtanje surface objekata jedan na drugi (ili blitanje kako ga zovu u pygame-u) bilo sto brze, (vrlo) pozeljno je da prilikom ucitavanje slike upotrijebite i metodu convert() koja format ucitane slike "izjednaci" sa formatom glavnog surfacea, te je time crtanje/blitanje maksimalno optimizirano. Evo primjer:

brod_surface = pygame.image.load("brod1.jpg").convert()

Ukoliko koristite sliku sa alpha kanalom, onda umjesto convert() stavite convert_alpha() jer obicni convert izbaci alpha kanal iz slike u memoriji.

4.4.1. TRANSPARENTNOST SLIKA
Ukoliko imate sliku recimo nekog broda sa zelenom pozadinom, a ne zelite da se i ta zelena pozadina nacrta u vasoj igri, koristite format koji podrzava transparentnost (recimo .png) i oznacite taj dio kao transparentan. Alternativa je da, nakon sto dobijete surface kod ucitavanja slike, sa metodom surface objekta "set_colorkey" oznacite koja boja mora biti transparentna. Kada to napravite, svi pixeli u slici koji su te boje se nece vidjeti u programu.

Primjer.
brod_surface.set_colorkey( (R, G, B) )

- R, G i B varijable predstavljaju crvenu (R), zelenu(G) i plavu(B) komponentu boje, i vrijednosti koje mozete staviti su u rangu od 0 do 255. Naprimjer da oznacite potpuno zelenu boju kao transparentnu radite ovako:

brod_surface.set_colorkey( (0, 255, 0) )

4.5. SURFACE OBJEKTI
Surface objekti su pygame objekti koji sadrze neku sliku u svojoj memoriji, i kao sto sam vec bio spomenuo mogu se blitati na neki drugi surface. Za tu radnju se koristi metoda blit od samog surface objekta. Metodu poziva surface objekt na koji se blita neki drugi surface, a argument mu je taj surface objekt koji se blita na njega, i koordinate na koje se blita.

Primjer:
glavni_surface.blit(brod_surface, (x, y) )

U ovom primjeru se na glavni surface blita objekt brod_surface, odnosno na glavni surface se crta slika ucitana iz datoteke brod1.jpg, i blita se na kordinatama (x,y) unutar objekta glavni surface.


4.6. OSVJEZAVANJE PROZORA
Nakon sto smo poceli blitati po glavnom surface-u, treba jos samo jedan korak da bi se promjene vidjele na monitoru, pozvati funkciju pygame.display.flip. Ono sto mi blitamo na glavni surface ne vidimo tako dugo dok se ne pozove ova funkcija, nakon sto opet blitamo to se isto ne vidi tako dugo dok se opet ne pozove ova funkcija. Kolko puta pozovemo ovu funkciju toliki nam je framerate, odnsno FPS, znaci da bi nam animacije izgledale tecno trebala bi biti pozvana vise od 30 puta u sekundi.

Poziva se bez argumenata, primjer:
pygame.display.flip()

Dakle ovime se crta sadrzaj glavnog surface-a na vas monitor. Ali ima jedan problem, ako imate objekte koji se micu, znaci prvo blitate sliku objekta na jednu poziciju pa nakon nekog vremena na drugu, u glavnom surface-u se tada nalaze obje slike. Zbog toga se nekako treba izbrisati prvu ako se zeli ostaviti dojam gibanja objekta a ne kloniranja po nekoj putanji.

Najjednostavniji nacin je da se na pocetku svakog frame-a prije bilo kakvog crtanja prebrise cijeli sadrzaj glavnog buffera. To mozemo na dva nacina, buduci da se u igrama obicno uvijek nalazi neka pozadina, prvo se blita pozadina po cijelom glavnom surfaceu te smo time prebrisalo sve staro i rijesili problem. Ako se ne koristi pozadina najbolje je surface napuniti nekom bojom sa metodom surface objekta koja se zove "fill". Metoda fill oboji cijeli surface nekom bojom koju smo poslali kao argument (kao RGB komponente boje).

Primjer:
glavni_surface.fill( (R,G,B) )

- R, G i B varijable predstavljaju crvenu (R), zelenu(G) i plavu(B) komponentu boje, i vrijednosti koje mozete staviti su u rangu od 0 do 255. Naprimjer za potpuno crvenu boju staviti ovako:

glavni_surface.fill( (255,0,0) )



4.7. USER INPUT
Svakom pritiskom neke tipke na tipkovnici ili pomakom misa, pygame nam salje "event" objekt koji nas informira sto je korisnik napravio. Ti eventi u sebi sadrze nekoliko varijabala/atributa: koje su vrste, te za razlicite vrste eventa dodane varijable, tipa o kojoj tipki se radi, ili npr. ako se radi o misu, na kojim je kordinatama ili koji je gumb pristisnut. Da bi dobili te event-e koristimo pygame funkciju pygame.event.get koja nam salje te event-e.

Evo primjer uzimanja eventa u petlji i ispisivanje (brojcane) vrste event-a.

Code:
for event in pygame.event.get():
   print event.type



da nebi mi morali provjeravati evente ovako: if event.type == 1: sto nije bas pregledno niti lako pamtljivo, pygame sadrzi odredene konstante koje tim brojevima daju ime. Recimo za pritisak tipke ima konstanta pygame.KEYDOWN te event mozete provjeravati ovako:

Code:
if event.type == pygame.KEYDOWN:



Evo popis (najvaznijih) konstanta za provjeravanje event.type-a:

Mis:
   pygame.MOUSEBUTTONDOWN
   pygame.MOUSEBUTTONUP
   pygame.MOUSEMOTION

Tipkovnica:
   pygame.KEYDOWN
   pygame.KEYUP

Sistemski:
   pygame.QUIT - posalje ako je pritisnut gumb x u desnom-gornjem kutu prozora



4.7.1. EVENTI SA TIPKOVNICE
Imamo dva tipa (event.type) eventa sa tipkovnice, onaj koji se generira kada se neka tipka pritisne (pygame.KEYDOWN) i onaj koji se generira kada se ta tipka pusti (pygame.KEYUP). Ti eventi sadrze jos neke varijable/attribute:

event.type == pygame.KEYDOWN:

- event.key - sadrzi cjelobrojni id broj koji predstavlja neku tipku, moze se koristiti sa konstantama koje cu popisati
- event.unicode - vraca string koji sadrzi znak tipke koju ste pritisnuli
- event.scancode - vraca scancode tipke koju ste pritisnuli


event.type == pygame.KEYUP:

- event.key - isto kao i kod pygame.KEYDOWN eventa


Na ovom linku se nalazi popis konstanta sa kojima mozete usporedivati event.key:

http://www.pygame.org/docs/ref/key.html

kod svake ove konstante se takoder treba staviti "pygame." ispred nje. Da bi nam kod bio citkiji i uredniji moze se izbjeci to pisanje "pygame." kod pygame konstanti, da bi to postigli mora se dodati ova linija na pocetku koda:

from pygame.locals import *


4.7.2. EVENTI SA MISA
Mis generira tri eventa, kad se mis pomakne - pygame.MOUSEMOTION, i kad se pritisnu ili puste gumbi (ili kotacic) - pygame.MOUSEBUTTONDOWN i pygame.MOUSEBUTTONUP.

event.type == pygame.MOUSEBUTTONDOWN:

- event.button - sadrzi integer sa mogucom vrijednosti od 1 do 5, nazalost za gumbe misa ne znam imena konstanti (ako tko zna neka javi) pa cu staviti ovdje popis: (naravno vi mozete svoje napraviti, tipa: LIJEVO = 1, DESNO = 3 itd.)


event.button == 1 - pritisnut lijevi gumb
event.button == 2 - pristisnut kotacic
event.button == 3 - pritisnut desni gumb
event.button == 4 - kotacic scrollan prema gore
event.button == 5 - kotacic scrollan prema dolje

- event.pos - vraca tuple sa dvije vrijednosti, jedna je x a druga y pozicija misa u prozoru, evo primjer koristenja:
x, y = event.pos


event.type == pygame.MOUSEBUTTONUP:

- event.button - sadrzi integer sa mogucom vrijednosti od 1 do 3 (scrollanje kotacicem generira samo pygame.MOUSEBUTTONDOWN vrstu eventa)
- event.pos - isto kao i pygame.MOUSEBUTTONDOWN


event.type == pygame.MOUSEMOTION:

- event.pos - isto kao i pygame.MOUSEBUTTONUP
- event.rel - vraca tuple sa dvije vrijednosti, relativan x i y pomak misa, za koliko se mis pomaknuo od zadnje pozicije
Eto sada bi vam onaj jedostavan program iz posta Primjer soruce koda interaktivnog programa (source) trebao biti puno razumljiviji.
Izrada-Igara @ 15:27 |Komentiraj | Komentari: 0
nedjelja, prosinac 5, 2010
3. FUNKCIJE


3.1. DEFINIRANJE FUNKCIJE
Funkcija se definira sa rijecju "def", nakon koje slijedi ime funkcije, pa argumenti u zagradi (ili prazna zagrada ako ih nema), te na kraju dvotocka. Nakon sto je ovo napisano, u redu ispod nje se moze napisati kod koji ce ta funkcija izvrsiti. Kod mora biti u indentu, znaci ne smije biti u ravnini sa definicijom u prvom redu vec mora biti pomaknut udesno sa "space" ili "tab".

Primjer:

Code:
def Funkcija():
   print "Ovo je pokusna funkcija!"



3.2. POZIVANJE FUNKCIJA
Pozivanje neke funkcije se vrsi upisivanjen njenog imena, pa argumenata u zagradi (ili prazna zagrada ukoliko ih nema). Primjer pozivanja funkcije iz onog prvog primjera:



Code:
def Funkcija():
   print "Ovo je pokusna funkcija!"

Funkcija()  #ovdje se poziva funkcija


3.3. SLANJE ARGUMENATA U FUNKCIJU
Argumenti koje saljemo u funkciju se definiraju unutar zagrade funkcije, dovoljno je samo napisati ime varijable kod definicije te to ime mozemo koristiti unutar tijela funkcije.

Primjer:



Code:
def Ispisi_podatke(ime, visina):
   visina = float(visina) / 100
   print ime, "je visok", visina, "metara"

a = raw_input("Upisite ime ucenika: ")
b = raw_input("Upisite visinu mucenika u cm: ")

Ispisi_podatke(a, b)



3.4. VRACANJE VRIJEDNOSTI IZ FUNKCIJE
Takoder mozemo napisati funkciju koja vraca neku vrijednost. Dovoljno je da se u kodu funkcije napise naredba "return" i nakon nje vrijednost ili varijabla koju vracamo.

Primjer:



Code:
def Suma(x, y):
   return x + y
   
a = 10
b = 5
c = Suma(a, b)
d = Suma(a, Suma(c,b) )

print c
print d



3.5. DEFAULTNE VRIJEDNOSTI ARGUMENATA
Argumentima/varijablama unutar zagrade kod definicije funkcije mozemo staviti i neke standardne vrijednosti, te onda kod pozivanja funkcije ta vrijednost se ne mora obavezno poslati u funkciju nego se moze izostaviti, pri cemu funkcija onda koristi standardnu vrijednost.

Primjer:



Code:
def Pitaj(pitanje = "Unesi svoje ime: "):
   return raw_input(pitanje)
   
Pitaj()
Pitaj("Upisi svoju visinu: ")



Jedino ogranicenje koje imate je da argument bez standardne vrijednosti ne moze biti naveden nakon nekog argumenta sa standardnom vrijednoscu, odnosno prvo se popisu svi argumenti bez vrijednosti, pa tek onda oni sa standardnom vrijednoscu. Ovo mozete vidjeti u iduca dva primjera, prvi primjer javlja gresku dok drugi radi dobro.

Primjer_1 - ovaj kod javlja gresku:



Code:
def Function(a = 1, b, c = 2):
   print "a =", a
   print "b =", b
   print "c =", c
   
Function(10)



Primjer_2:



Code:
def Function(b, a = 1, c = 2):
   print "a =", a
   print "b =", b
   print "c =", c

Function(10)



3.6. POZIVANJE FUNKCIJE SA KEYWORDIMA
Takoder funkcije mozete pozivati i tako da u zagradi osim vrijednosti navedete ime varijable iliti keyword. Mozete sve varijable u funkciji poslati pomocu keyworda pri cemu sam redoslijed nije bitan, a mozete i taj nacin kombinirati sa slanjem samo vrijednosti ili varijable. Kod takvog kombiniranja redoslijed slanja vrijednosti je naravno bitan, prvo se salju sve vrijednosti bez keyworda (pazeci na redoslijed izmedu njih), pa onda vrijednosti sa keywordom, pri cemu redoslijed vrijednosti sa keywordom opet nije bitan.

Primjer:



Code:
def Function(a, b, c = 50, d = 100):
   print "a =", a
   print "b =", b
   print "c =", c
   print "d =", d
   print " --- "

Function(5, 10)
Function(5, 10, 15, d = 20)
# Function(10, b = 5, 15, d = 30) - ovo linija je pogresna
Function(10, c = 5, b = 15, d = 30)
Function(d = 4, a = 1, b = 2, c = 3)
Izrada-Igara @ 21:13 |Komentiraj | Komentari: 0
petak, travanj 2, 2010
2. KONTROLA TOKA PROGRAMA


2.1. UVOD
U ovom poglavlju ce biti objasnjeno nekoliko osnovnih naredba za kontrolu toka programa u pythonu: "if" i "while", te nekoliko naredba isto za kontrolu toka koje se mogu upotrijebiti nakon nekih od tih naredba: "elif", "else", "continue" i "break". Takoder ce ovdje biti spomenuta i "pass" naredba, te funkcija "raw_input".

Evo da odma objasnim funkciju raw_input(), ova funkcija se koristi za input korisnika, kad se u programu pozove ova funckija, program ceka da korisnik nesto upise i to vrati kao string. U zgradu se moze upisati poruka koju ispise prije nego sto pocne cekak unos od korisnika.

primjer_1:

Code:
ime = raw_input("Upisite svoje ime: ")
print "Dobrodosao", ime


primjer_2:

Code:
broj = int(raw_input("Upisite svoj sretni broj: "))
print "Vas sretni broj je:", broj



2.2. "IF" NAREDBA
Naredba "if" logicki provjerava neki izraz, i ako je rezultat "True" izvrsi se neki dio koda. Upotrebljava se tako da se prvo napise sama naredba "if", pa neki izraz te dvotocka, nakon cega se ispod te naredbe u indentu pise kod koji se izvrsi ukoliko je zadani izraz "True".

Primjer:

Code:
a = int(raw_input("Unesite neki broj: "))
if a > 5:
   print "Varijabla a je veca od 5"


Kada se unese broj veci od 5 program ispise poruku "Varijabla a je veca od 5", ako nije veca program nista ne ispise.


2.2.1. "ELIF" NAREDBA
Naredba "elif" nam omogucuje da dodamo proizvoljan broj uvjeta u istom indentu za petljom "if".

Primjer:

Code:
a = int(raw_input("Unesite neki broj: "))
if a > 5:
   print "Varijabla a je veca od 5"
elif a < 5:
   print "Varijabla a je manja od 5"


naredba "elif" se izvrši samo ukoliko prethodni "if" ili "elif" u indentu nije bio ispunjen.


2.2.2. "ELSE" NAREDBA
Naredba "else" nam omogucuje da zadamo programu sto da napravi ako nijedan uvjet u if-elif petlji nije ispunjen:

Primjer:

Code:
a = int(raw_input("Unesite neki broj: "))
if a > 5:
   print "Varijabla a je veca od 5"
elif a < 5:
   print "Varijabla a je manja od 5"
else:
   print "Varijabla a nije ni manja ni veca od 5, odnosno sadrzi vrijednost 5"


2.3. "WHILE" NAREDBA
Naredba "while" logicki provjerava neki izraz i izvrsava zadani kod tako dugo dok je izraz True, odnosno kaze se da je kod u petlji. Upotrebljava se tako da se prvo napise sama naredba "while", pa neki izraz te dvotocka, nekon cega se ispod te naredbe u indentu pise kod koji se stalno iznova izvrsava ukoliko je izraz "True".

Primjer:

Code:
a = 1
while a < 10:
   a = a + 1
   print a
   
print "Kraj programa"


2.3.1. "CONTINUE" NAREDBA
Kad se ova naredba pozove u pelji, izvrsavanje zadanog koda u indentu se ne izvrsi do kraja nego se prekida kod te naredbe i pocinje izvrsavanje koda u indentu ispocetka, znaci sama petlja se i dalje izvrsava.

Primjer:

Code:
a = 1
while a < 10:
   a = a + 1
   if a == 5: continue
   print a

print "Kraj programa"


petlja preskace ispisivanje naredbe print a kad je varijabla a == 5

2.3.2. "BREAK" NAREDBA
Ova naredba je slicna "continue" naredbi sa razlikom da se petlja petlja vise ne izvrsava nego se potpuno izlazi iz nje.

Primjer:

Code:
a = 1
while a < 10:
   a = a + 1
   if a == 5: break
   print a

print "Kraj programa"


ako je varijabla a == 5, izlazi se iz while petlje

2.4. "PASS" NAREDBA
Ova naredba ne radi apsolutno nista, i najcesce sluzi samo kao "placeholder" kad jos nema koda ili za lakse pracenje indenta kod visetrukih levela indenta.

Primjer:

Code:
while Bodovi > 200:
   pass # TODO: napisati kod
Izrada-Igara @ 22:28 |Komentiraj | Komentari: 1 | Prikaži komentare
nedjelja, ožujak 14, 2010
1. VARIJABLE, DODJELJIVANJE, I ARITMETICKE I LOGICKE OPERACIJE


1.1. TIPOVI PODATAKA
U pythonu raspolazemo sa standardnim tipovima podataka koje mozemo dodjeliti varijablama, no njihove mogucnosti su vece nego u jezicima tipa C++. Evo popis onih jednostavnijih:

Bool - (True, False) - vjerojatno vec svima poznato - moze imati samo dvije vrijednosti True ili False
Integer - (3, 4, 512) - cjelobrojni tip
Float - (1.32, 1.0, 3.14) - realan broj, preciznost ovisi o platformi na kojoj se python vrti
String - ("pizza", 'pivo', "tv") - niz znakova

Primjetili ste da kod niti jednog tipa nisam napisao kolko je bitni ili maksimalnu velicinu, to je zato jer ih prakticki niti nema, Python se sam brine o velicini varijabala i dinamicki uzima vise prostora u memoriji ukoliko je to potrebno, tako da vi mozete dodjeljivati vrijednosti bez da se morate brinuti je li prevelika za varijablu.


1.2. STVARANJE VARIJABALA
Varijable se u Pythonu stvaraju na ovaj nacin:

Ime_varijable = vrijednost_koju_joj_pridruzujemo

npr.:
Broj_bodova = 12.5

U imenu varijable se mogu koristiti velika i mala slova, brojevi i underscore (hrvatska rijec za to?). Velicina imena varijable je neogranicena, no preporucujem da tu mogucnost ipak ne iskoristavate previse.

Oni koje "dolaze" sa C-like jezika su primjetili da nigdje nema zadano koji kojeg je tipa varijabla, odnosno koji tip podatak moze primiti. E pa varijabla je onog tipa kojeg je i ono sto je u nju poslano, i bilo koja varijabla moze primiti bilo koji tip podataka. Integer varijabla se kreira tako da joj se pridruzi cjelobrojni tip, za float varijablu naravno float tip, a za string dodajte vrijednostu u navodnicima, Python prihvaca "test" ili 'test'.

Pokrenite python interpreter (kao sto je opisano u clanku 0.1 ) te probajte upisivati ovo:

a = 1
print a #print ispisuje vrijednost varijble u konzolu, u interpreteru umjesto ovoga mozete napisati samo ime varijable, odnosno a
b = "Neko ime"
print b
b = True #paziti da je prvo slovo veliko
print b
b = 2.34
print b
print a
c = a + b #racunanje pomocu varijabala
print c


kao sto vidite, varijabli a se moze bez problema dodjeliti bilo koji tip podataka bez obzira na tip koji trenutno sadrzava i python se nece buniti. Kakva se magija dogada ispod toga da je to moguce bit ce naknadno objasnjeno u iducim temama.


1.2. MOGUCE OPERACIJE SA VARIJABLAMA
Sa Pythonom je naravno moguce raditi aritmeticke i logicke operacije. Operacije mozete raditi sa razlicitim(mjesanim) tipovima varijabala.


1.2.1. LOGICKI OPERATORI
LOGICKI: OR, AND, NOT
BITWISE: |(or), &(and), ^(xor), ~(not), << (shift left), >> (shift right)
(o bitwise operacijama necu pisat jer ih necemo trebati, koga zanima: http://en.wikipedia.org/wiki/Bitwise_operation)

Za one koji ne znaju/ne razumiju logicke operatore odnosno boolean algebru, evo kratko objasnjenje :
Kod boolean algebre vrijednosti mogu imati samo dva stanja: True ili False, istinit ili neistinit, 1 ili 0, ovisi kako tko prezentira vrijednosti. Nad tim vrijednostima se mogu vrsiti odredene operacije, nazvane logicke operacije. Najosnovnije i najcesce koristene operacije su:

OR, AND i NOT

Evo tablica rezultat racunanja sa OR (u nasem primjeru cemo koristiti 1 i 0)

OR
0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1
- kao sto se vidi rezultat je uvijek 1 ili True ako je bar jedan operand 1 ili True, i po tome cete si najlakse zapamtiti

AND
0 and 0 = 0
0 and 1 = 0
1 and 0 = 0
1 and 1 = 1
- razultat je 1 ili True samo ako su svi operandi 1 ili True

NOT
not 0 = 1
not 1 = 0
- not se u biti vrsi nad jednim operandom, i kao sto se i vidi u primjeru, daje suprotnu vrijednost varijabli

Zasto nam ovo uopce treba? Boolean varijable i stanja su jako korisna, i u programiranju igara se cesto koriste boolean varijable, npr. za stanja koja mogu biti samo istinita ili neistinita - recimo je li ukljucena gravitacija ili pauza. Jednostavnije je i preglednije provjeriti neku varijablu kao logicki tip neko kao brojcani tip. Takoder se koristi za razna usporedivanja i sl. Npr.: izraz "ako je Igrac u zraku" "i ima padobran", ova dva izraza mogu imati samo dvije vrijesnosti, istina ili neistina (True or False). Naravno mi zelimo da igrac moze otvoriti padobran samo u slucaju da je igrac stvarno u zraku i ima padobran, odnosno ako su oba izraza True ili 1. Ako je prvi izraz False, odnosno igrac nije u zraku onda ni ne treba otvarati padobran, a ako jest u zraku ali je drugi izraz False, odnosno nema padobran, onda ni ne moze otvoriti padobran (znaci lose mu se pise). Da vizualno prikazem iz onog sto smo sad zakljucili kako izgleda truth tablica za naseg jadnog igraca na mukama.

Igrac:
Code:
u zraku -   ima padobran -  igrac otvara padobran
0 (False)     0 (False)      =  0 (False)
0 (False)     1 (True)       =  0 (False)
1 (True)      0 (False)      =  0 (False)
1 (True)      1 (True)       =  1 (True)


Ako pogledamo one tablice gore vidimo da nam najvise odgovara AND operator za usporedbu ova dva stanja, on vraca True samo ako su oba slucaja True, u nasem slucaju ako igrac jest u zraku i ako ima padobran, te cemo u ovom slucaju naravno njega i koristiti. Nadam se da je sad ovo jasnije za one koji su imali nedoumice :)

Svaki python objekt/varijabla se moze provjeriti je li True ili False vrijednosti, pa cak i instance klase. Za brojcane tipove, ako je 0 onda se u Pythonu smatra da je False, ako je bilo koji drugi broj(ukljucujuci negativne) je True. Nizovi podataka ,poput string, lista ili dictionary-a (bit ce kasnije objasnjeno), su False ako su prazni, ukoliko nisu onda su True. Ovo cesto zna bit korisno.

Logicke operacije mozemo raditi sa bilo kojim objektima u bilo kojoj kombinaciji (upravo zbog toga jer se svaki objekt moze provjeriti je li True ili False). Bitwise operacije mozemo radit samo sa brojevima.

Upalite python interpreter te probajte ovo upisivati:

a = "pokus"
b = 0.0
print a and b
print a or b
print (a or b) and 3
c = ( a or b) and 3
print c



Kao sto se vidi, Python se ne buni sto radimo operacije sa razlicitim tipovima varijabala, i ne vraca samo True ili False nego u vrijednost koja predstavlja taj True ili False.


1.2.2. OPERATORI ZA USPOREDBU VARIJABALA
Operatori za usporedivanje: <, <=, >, >=, ==, !=

a < b - vraca True ako je varijabla 'a' manja od 'b'
a <= b - vraca True ako je varijabla 'a' manja od ili jednaka 'b'
a > b - vraca True ako je varijabla 'a' veca od 'b'
a >= b - vraca True ako je varijabla 'a' veca od ili jednaka 'b'
a == b - vraca True ako je varijabla 'a' jednaka 'b'
a != b - vraca True ako je varijabla 'a' nije jednaka 'b'

Ovo ce te najcesce koristiti za usporedivanje znamenki ili stringova. Recimo je li pozicija nekog objekta unutar ili izvan nekog podrucja ili objekta.

Tehnicki, mogu se usporedivati razliciti tipovi podataka bez javljanja greske, no neke (vecina) kombinacije su beskorisne. Najkorisnija je mogucnost direktnog usporedivanja intger i float tipa.

Upalite python interpreter i probajte ovo:

print 3 < 4
print 3 > 4

print 3 > 3.5
print 3 < 3.5
print 3 == 3.0

print "aa" < "bbb"
print "aa" > "bbb"

print "aa" > 3
print "aa" < 3
print "aa" == 2

print "aa" == "bb"
print "aa" == "aa"



Vjerojatno neke rezultate niste ocekivali, recimo mozda se ocekivalo da se string moze usporedivati po velicini. No to nije slucaj i vecina operacija usporedivanja sa stringom su beskorisna osim usporedivanja jesu li dva stringa jednaka. Da bi dobili (i usporedili) velicinu nekog stringa koristite funkciju len(neki_string). Ta funkcija vraca integer kojem je vrijednost velicina stringa poslanog u funkciju.

Probajte recimo ovo:

print len("aa") < len("bbb")
print len("aa") > 1



1.2.3. ARITMETICKI OPERATORI
Aritmeticki operatori: +, -, *, **, /, //, %

x + y - vraca zbroj vrijednosti u x i y
x - y - vraca razliku vrijednosti u x i y
x * y - vraca umnozak vrijednosti u x and y
x / y - vraca rezultat dijeljenja izmedu vrijednosti u x i y
x // y - vraca samo cjelobrojni dio dijeljenja (ne zaokruzuje)
x % y - vraca ostatak dijeljenja izmedu vrijednosti u x i y
-x - negira x
x ** y - vraca rezultat potenciranja, gdje je x argument a y potencija


1.2.4. OSTALI OPERATORI I FUNKCIJE VEZANE ZA OPERACIJE SA VARIJABLAMA
Ostali operatori: =, +=, -=, *=, /=

x = y - u varijablu x se salje vrijednost iz varijable y

x += y - isto kao x = x + y
x -= y - isto kao x = x - y
x *= y - isto kao x = x * y
x /= y - isto kao x = x / y
x **= y - isto kao x = x ** y
x //= y - isto kao x = x // y

Sto se tice ova zadnjih sest primjera, iako narebe tipa x += y i x = x + y daju na izlazu jednake vrijednosti, interno se u Pythonu te dvije naredbe drugcije odrade sto u nekim specificnim slucajevima vodi do nepozeljnih (ili pozeljnih) rezultata. Ovo ce biti konkretnije razjasnjeno u iducim poglavljima.


Popis funkcija:

abs(x) - vraca apsolutnu vrijednost od x (vrijednost bez predznaka)
pow(x, y) - vraca rezultat potenciranja, gdje je x argument a y potencija
round(x) - za okruzuje realni broj (moze se dodati jos jedan optimalni integer koji govori funkciji kod koje decimale da zaokruzi x)


1.3. PRETVARANJE JEDNOG TIPA PODATKA U DRUGI TIP
Pretvaranje vrijednosti iz jednog tipa u drugi je vrlo lako uz pomoc ovih funkcija:

int(x) - pretvara vrijednost iz varijable x (broj ili string) u integer tip i vraca vrijednost (ne zaokruzuje realni broj)
float(x) - pretvara vrijednost iz varijable x (broj ili string) u realni broj i vraca vrijednost
str(X) - pretvara vrijednost iz varijable x (neki broj) u string i vraca vrijednost


1.4. DIJELJENJE DVOJE VRIJEDNOSTI TIPA INTEGER
Sada kada imate popis svih vaznih operacija slobodno ih malo isprobajte. Ja bi samo posebno izdvojio ovaj primjer:

a = 15
b = 8
c = a / b
print c



Ako ste ovo probali, rezultat koji ste dobili vjerojatno nije onaj koji ste ocekivali. Vracena vrijednost je integer jer su oba operanda integer te u tom slucaju Python vraca vrijednost integer tipa, koja ujedno i nije zaokruzena. Na ovo posebno treba paziti kod dijeljenja varijabala jer moze unesti logicke greske koje su teske za naci. Da bi rezultat bio realan broj, odnosno float tip, barem jedan operand mora biti float tip. Rjesenje problema je to da se vrijednost koja salje stavi kao float ili vrijednost u varijabli koja sadrzi integer pretvori u float tip. Npr.:

a = 15.0 # moze se pisati i samo kao 15.
b = 8
c = a / float(b)
print c



1.5. KOMBINIRANJE VISE OPERACIJA
U Pythonu naravno mozete u jednom izrazu (expression-u) raditi vise operacija, npr.:

a = 2 + 5 * 4 - 3
print a


Kao sto se vidi iz rezultata, u Pythonu takoder neke operacije imaju visi prioritet a neke nizi, recimo mnozenje ima visi prioritet nego zbrajanje. Da bi izbjegli ovo kada je to potrebno, koriste se zagrade, npr.:

a = (2 + 5) * (4 - 3)
print a


Evo popis operatora rangiranih po prioritetu, pocevsi od najveceg prioriteta do najnizeg:

1. **
2. -x
3. *, /, //, %
4. +, -
5. <, <=, >, >=, <>, !=, ==
6. not x
7. and
8. or


Ovdje mozete vidjeti potpuni popis: http://docs.python.org/reference/expres ... ml#summary


--
Izrada-Igara @ 14:30 |Komentiraj | Komentari: 2 | Prikaži komentare
petak, ožujak 5, 2010
0. UVOD

0.0. Opis
Ovo je tutorial o izradi jednostavne igre u programskom jeziku Pythonu (2.x) uz pomoc modula Pygame. U ovom tutorialu ce biti opisane samo one mogucnosti Pythona i Pygame-a koje su potrebne za raditi jednostavnije igre, ostale ce biti samo povrsno spomenute ili uopce nece biti spomenute. Oni koji nisu nikad programirali morali bi prije citanja Python&PyGame GameDev clanaka, procitati ovo: LINK


0.1. Sto je Python i zasto ga koristiti?
Python je mocni multi-platformski "high level" programski jezik koji se od ostalih jezika izdvaja po jako citkom kodu (ako se i pravilno pise naravno), velikom efikasnoscu(brzinom) pisanja koda i ogromnom library-u koja standardno dolazi s njim, te koji radi na svim poznatijim platforma bez izmjena koda. Efikasnost/brzina pisanja koda je puno veca u usporedbi prema C, mogucnost nastanka gresaka teskih za naci je puno manja, te Python dolazi sa interpreterom, sto znaci da ne pretvara kod u izvrsni (npr. .exe) pa se tek onda moze pokrenuti, nego kod izvodi odma, liniju po liniju, znaci nema vise toga da kod banalnih promjena u kodu morate cekat da se kompajlira dio ili cijeli program pa tek onda pokrenut. Da li to znaci da se programi pisani u pythonu mogu pokrenuti samo sa pythonom? Ne, python program se moze iskompajlirati u .exe , recimo sa py2exe programom, dok recimo pygame ima i skriptu (python skriptu naravno :D) za taj program naziva pygame2exe.

Gdje ga nabaviti? Python je besplatni i opensource, te se moze skinuti ovdje: http://www.python.org/download/ - preorucujem zadnju verziju 2.6.4

Dosta Linux distribucija dolazi vec sa instaliranim python interpreterom, najcesce se nalazi u /usr/local/bin. Ako se taj direktorij nalazi u search pathu pythonov interpreter se moze pokrenuti jednostavnim upisivanjem u shell. U Windowsima ipak ne dolazi defaultno te se mora instalirati. Nakon instalacije interpreter se moze pozvati upisivanjem python u run prozoru. Ovo pozivanje interpretera je handy jer se brzo i jednostavno moze isprobati nesto.


0.2. Sto je Pygame i zasto ga koristiti?
Pygame je modularni library za Python namijenjen jednostavnoj i brzoj izdradi igara. Pygame je wraper oko SDL-a i prilicno mu je slican. Ima podrsku za loadiranje i crtanje slika, njihovo manipuliranje, dobivanje inputa sa ulaznih jedinica, loadiranje i sviranje zvucnih dototeka i sl.

Gdje ga nabaviti? Pygame je besplatni i opensource, te se moze skinuti ovdje: http://www.pygame.org/download.shtml


0.3. Kako pokrenuti python skriptu?
Python skripta se pokrece tako da se pokrene python interpreter sa argumentom imena python programa. U windowsima python installer tokom instalacije stavi da se python skripte mogu pokretati sa dvoklikom misa, tako da se python program moze pokrenuti kao i bilo koji drugi. U linux-u si sami mozete asocirati interpreter sa .py datotekom, najbolje staviti da otvori u konzoli i ostane otvorena, tako mozete vidjeti greske koje interpreter eventualno javi.

Ima jos jedan nacin na Unix systemima:

Quote:
"On BSD’ish Unix systems, Python scripts can be made directly executable, like shell scripts, by putting the line

#! /usr/bin/env python

(assuming that the interpreter is on the user’s PATH) at the beginning of the script and giving the file an executable mode. The #! must be the first two characters of the file. On some platforms, this first line must end with a Unix-style line ending ('\n'), not a Windows ('\r\n') line ending. Note that the hash, or pound, character, '#', is used to start a comment in Python.

The script can be given an executable mode, or permission, using the chmod command:

$ chmod +x myscript.py

On Windows systems, there is no notion of an “executable mode”. The Python installer automatically associates .py files with python.exe so that a double-click on a Python file will run it as a script. The extension can also be .pyw, in that case, the console window that normally appears is suppressed."



0.4. Encoding (kak se to zove na hrvatskom jeziku? O.o)
Uz ASCII moguce je koristiti i druge encodinge u Python kodu, naprimjer UTF-8 ili sl. Na taj naci mozete koristiti razne znakove iz te kodne tablice u stringovima i komentarima, ali ne mozete ih koristiti za imena varijabli, one i dalje moraju biti sastavljena od znakova koje podrzava ASCII (plus standardna prvila o imenovanju varijabla)

Da bi odabrali encoding u vasem kodu, na pocetku dokumenta (i poslije #! /usr/bin/env python ukoliko ga koristite) stavite ovo:

# -*- coding: encoding -*- (gdje je encoding vrsta encodinga kojeg koristite)

npr:
# -*- coding: utf-8 -*-
# -*- coding: iso-8859-15 -*-


0.5. Koje su razlike izmedu Pythona i C/C++?
Buduci da vecina pocetnika zeli poceti raditi igre u C++ jer su culi da ga svi poznati gamedeveloperi koriste, evo da na brojim najvaznije razlike izmedu njega i Pythona

Najveca razlika je u resource i memory managmentu, u samom tretiranju varijabala, te nacinu ogradivanja koda


0.5.0. Indent
Pocnimo od jedne najocitije razlike izmedu Pythona i drugih jezika kad pogledate u neki python kod. U razlicitim jezicima kod se na razlicite nacine "ograduje" da se zna gdje je pocetak i kraj koda koji se izvrsava u npr. nekoj pretlji ili funkciji. Recimo u Pascalu se ograduje sa BEGIN i END, u C/C++ sa vitlicastim zagradama {} a u Pythonu sa indentom, odnosno uvlacivanjem retka.

To se moze napraviti sa tabom ili razmakom - koji su razliciti, pa stoga koristite samo ili jedno ili drugo. U primjerima na forumu ce se koristiti razmak iz razloga jer phpBB ionako tab pretvori u razmake.

Evo konkretni primjer kako to izgleda:

C/C++:

Code:
while 1:
{
neki_kod;
neki_kod;
}


Python:

Code:
while 1:
   neki_kod
   neki_kod



0.5.1. Resource i memory managment
Jedna velika razlika izmedu C++ i Pythona je u nacinu alociranja i tretiranja varijabala. Dok u C++ treba prvo varijabli odrediti tip, te nakon toga varijabla moze biti tocno odredenog tipa, nakon cega joj C++ daje komad memorije, velicina tocno odredena tipom varijable i varijabli daje adresu te memorije. Velicina je fiksna i ne mozete u varijablu staviti vrijednost vecu od one sa kojom je ogranicena. Takoder ako se radi s pointerima na te varijable (sto je nuznost u C++ ako se zeli iskoristiti njegova brzina) postoji opasnost da greskom pisete ili citate varijablu sa krive adrese nakon cega ce se program najcesce srusiti, bez ikakve naznake gdje je greska. Takoder neke varijable treba rucno alocirati i rucno brisati, ako se ne brise kako spada i ostaje u memoriji dolazi do memory leak-a, gdje aplikacija kako radi uzima sve vise memorije dok ne ugusi sistem.

Kod Pythona, varijabla (iz perspektive programera) nije toliko usko vezana za samu memoriju, odnosno nije direktno pisanje i citanje sa neke memorijske adrese nego Python odraduje neki posao/provjere izmedu korisnikovog zadavanja varijable i direktnog pisanja u memoriju. Kad zadajete vrijednost varijabli Python provjerava njenu velicinu i dinamicki alocira onoliko mjesta koliko je potrebno. Dakle programer ne treba brinuti o velicini varijable, o tome brine Python, pa bi se te varijable mogle nazvati pametne varijable ili kako ih u Python worldu zovu - python objekti. Buduci da u Pythonu varijable nisu asocirane/pointane na cistu memorijsku adresu nego na te objekte, u njemu mozete bilo koju varijablu staviti bilo koju vrijednost, zbog toga kod Pythona nema deklariranja varijabala. U C++ to ne mozete osim ako si sami ne napisete kod ili koristite neki vanjski library. Takoder kod Pythona postoji stvar zvana garbage collection (oni sa Jave i C# su culi za to). Kada neki python objekt vise nije asociran na nijednu varijablu garbage collector ga brise iz memorije. Na taj nacin se programer ne trebra brinuti o allociranju i disalociranju varijabala i memorije nego se to automatski vrsi.


0.5.2. Komentiranje
Kometiranje se radi sa znakom # (sharp), nakon tog znaka ostatak reda je komentar -> #komentar

Za komentiranje u vise redaka koriste se trustruki navnodnici -> """ komentar """

Mislim da je ovo cisto dovoljno sto se tice komentiranja, naravno oni znatizeljni slobodno mogu potrazit neke naprednije tehnike i taktike komentiranja.


0.6. IDE za Python
Sto se tice (besplatnih) IDE-a za Python programiranje, od onih koje sam probao preporucio bih sljedece:

Spyder (Windows/Linux/OS X) - *DOWNLOAD + PyQt
PyScripter (Windows) - DOWNLOAD
Wing IDE 101 (Windows/Linux) - DOWNLOAD

*Spyder je napisan u python-u i dolazi u sourcekod obliku. Windows installer ga instalira u folder python\Lib\site-packages\spyderlib,
i pokrece se pokretanjem spyder.py
(da bi ga mogli pokrenuti morate imati instaliran PyQt modul)

Vise informacija mozete naci ovdje:
http://wiki.python.org/moin/IntegratedD ... vironments
Izrada-Igara @ 22:55 |Komentiraj | Komentari: 0
utorak, veljača 16, 2010


GameDev skola je interaktivna on-line skola o programiranju igara za pocetnike. Skola ce se odrzavati na DoubleBuffer -ovom forumu, na podforumu GameDev škole - Python & PyGame , te ce clanci ujedno biti i na ovom blogu.

Pod interaktivna mislim na to da se ne radi o nizanju tutova nego "polaznici" aktivno sudjeluju. Na zadanu tematiku(ovaj puta python+pygame) napisat ce se niz poglavlja. Nakon sto se obradi dovoljno poglavlja tj. dode do dovoljne razine znanja, polaznici zajedno rade jednostavnu igru po vodstvom "predavaca", tematika igre po dogovoru.

Svako poglavlje ce imati svoj topic i sa poglavljem ce doci zadatak ili zadaci. Zadaci ce biti ili samo neki god kod za izvrsiti i vidjeti rezultate da se lakse svati poglavlje,  ili neki zadatak za rijesiti, odnosno napisati kod. Zadaci nece biti neka egzotika, nesto najjednostavnije samo da se vidi da li je poglavlje shvaceno, ako neko zapne na zadatku moze na istom topicu pitati za pomoc. Na izradi igre mogu sudjelovati samo oni koji su aktivno sudjelovali u gamedev skoli.

Da bi sudjelovati u skoli preporucujem da se registrirate na DoubleBuffer-ov forum, iako se mogu i ovdje mogu clanci komentirati i stavljati rijesenja , ipak je to na jednom forumu to puno preglednije. Skola pocinje 21.02. ali se moze i naknadno prikljuciti buduci da su svi clanci na forumu ili blogu te se mogu komentirati, stavljati rješenja ili pitati za pomoc.

Da bi lakse svatili clanke toplo preporucujem da prije procitate tutove na ovom blogu:
"Kako uopce radi CPU?" i "Visi programski jezici"
Izrada-Igara @ 21:58 |Komentiraj | Komentari: 0
nedjelja, siječanj 17, 2010
Ovo je "igra" koju sam napisao u jednom danu tako da bi trebala biti prilicno jednostavna, napisana je u Pythonu + Pygame, u biti je pojednostavljeni pong (da pojednostavljeni). Ovdje se moze skinuti igra sa source kodom:

http://www.box.net/shared/5l95bsqpt5



Uz igru se nalazi devlog u kojem je putpuni opis tijeka izrade igre.
Izrada-Igara @ 17:02 |Komentiraj | Komentari: 2 | Prikaži komentare
utorak, lipanj 23, 2009

Evo i doma se nesto radi :) ... Decki iz Varazdina rade na fantasy MMORPG-u i cilj im je unijeti dasak osvjezenja u svijet MMORPG igara, odnosno napraviti MMORPG koji je drugciji od ostalih - jer, kao sto kazu na svom blogu, ostali MMORPG naslovi su jako slicni pa skoro i isti.

Igra je jos u ranoj fazi razvoja pa ne mogu nesto konkretnije napisati, ali evo link na sluzbeni blog gdje mozete pratiti razvoj igre:

http://mmorpgvz.blogspot.com

I evo jedan video da se vidi koliko su u razvoju do sada dogurali:

http://www.gametrailers.com/user-movie/making-of-tale-of-the-forgotten/321278
Izrada-Igara @ 11:19 |Komentiraj | Komentari: 3 | Prikaži komentare
ponedjeljak, lipanj 15, 2009
Evo naisao sam na jedan maleni tut za python koji je na hrvatkom jeziku pa ce mozda nekoga zanimati. Tut se nalazio na stranici http://zweistein.averi.hr , al buduci da ta stranica vise nije aktivna evo likova na arhiviranu verzija sa web.archive.org ...

1. DIO -> http://web.archive.org/web/20020824085709/http://zweistein.averi.hr/scitech/python1.html

2. DIO -> http://web.archive.org/web/20020824085701/http://zweistein.averi.hr/scitech/python2.html

3. DIO
-> http://web.archive.org/web/20021004121715/http://zweistein.averi.hr/scitech/python3.html

Happy coding! 
Izrada-Igara @ 21:00 |Komentiraj | Komentari: 0