Sunteți pe pagina 1din 10

DIN

PARTEA AUTORULUI

iculi, da la muli trebuie s le mai mulumesc Parc a fi la discursul


de acceptare al premiului Oscar: mi-e fric s nu nceap orchestra s cnte
i s fiu invitat afar de pe scen. Oricum, n primul rnd i mulumesc lui
Andr LaMothe fiindc mi-a dat o ans i fiindc m-a invitat la prnz. Am s m revanez
pentru asta ntr-o zi. Le mulumesc tuturor celor de la Premier Press: editorului de producie
Jenny Davidson, redactorului Kezia Endsley, editorului de achiziii Emi Smith i editorului
CD-ului, Brandon Penticuff.
Mulumiri i lui Adam Hepworth, care i-a petrecut o mare parte din ocupata lui zi
citindu-mi textul i corectnd o mulime de greeli. Tuturor frailor i surorilor mele, lui
Rachi, care s-a oferit s m ajute, dei era la un ocean distan, Nagina, al crei ajutor i
susinere (i numeroase telefoane) m-au ajutat s o scot la capt, i lui Ramit, care mi-a
oferit un mode i care m-a ajutat la greu (i care mi-a dat ansa s folosesc cuvntul
suspensie ntr-o propoziie). V mulumesc c ai fost aici i m-ai ajutat cnd am avut
nevoie. Mamei i tatlui meu: n-a fi reuit asta fr voi. V iubesc foarte mult.
n final, mulumiri lui Edgar L. Ibarra (Feo) pentru desenele sale i lui Thomas Stenbck
pentru munca lui la muzica de pe acest CD. De asemenea, lui Ari Feldman, fiindc mi-a
permis s-i folosesc biblioteca de sprite-uri pe CD.
De asemenea, pentru crearea unui program demo al crii, mulumesc lui Jason Brasier
i lui Edgar Ibarra pentru Rockfall, precum i lui Marcus Eikon Smith pentru Galaxiga.
i tuturor ale cror nume le-am uitat, se tiu ei cine sunt. Mulumesc!

IV

D ESPRE

AUTOR

M ANEESH SETHI a urmat liceul n California i este student al Universitii Stanford


ncepnd cu anul 2006. A lucrat n domeniul Web designului i al dezvoltrii nc din
clasa a cincea. A fost fondatorul i designerul-ef al unei companii de design pentru site-uri
Web, numit Standard Design. Sethi a predat programarea jocurilor la emisiunea Call for
Help a canalului american TechTV i la conferine de programare a jocurilor, precum
Xtreme Game Developer Xpo. Este autorul volumului Web Design for Teens i a primei
ediii a acestei cri (publicat n limba englez), ambele aprute la editura Course PTR,
precum i a crii How to Succeed as a Lazy Student.
n afar de programarea jocurilor, lui Maneesh i place s joace jocuri (desigur), s
practice sporturi precum tenisul i baschetul i, natural, s doarm. Poi s afli mai multe
despre Maneesh, precum i despre tricourile i suporturile pentru iPod-uri, la adresa
www.maneeshsethi.com.

C UPRINS

Introducere ................................................................... XI

PARTEA I: BAZELE
Capitolul 1

LIMBAJULUI

BASIC ............................ 1

Primii pai ....................................................................... 3


Un scurt istoric al limbajului BASIC ................................................... 3
Instalarea programului BlitzPlus .............................................. 4
Ferestre i panouri ................................................................... 5
Bare cu instrumente ................................................................ 6
Meniuri ..................................................................................... 7
Primul joc: KONG .............................................................................. 7
Compilarea codului ................................................................ 16
Rezumat ........................................................................................... 18

Capitolul 2

Primele noiuni de BASIC ............................................ 19


Salut, lume! ......................................................................................
Variabile ...........................................................................................
Declararea variabilelor ...........................................................
Utilizarea variabilelor .............................................................
Date de intrare .................................................................................
Condiionalele ..................................................................................
Adevrat i fals ......................................................................
IfThen (dacatunci) ........................................................

VI

19
23
23
24
26
28
28
29

Cuprins
IfThenElse (dacatuncialtfel) ..................................
SelectCase .........................................................................
Operatori logici .................................................................................
Operatorul NOT .....................................................................
Comanda Goto .................................................................................
Un joc de ghicit cu interfa text .......................................................
Rezumat ...........................................................................................

Capitolul 3

Bucle, funcii, tablouri i tipuri ................................... 41


Noiunea de bucl ............................................................................
ForNext ..............................................................................
WhileWend .........................................................................
RepeatUntil ........................................................................
Funcii ..............................................................................................
Consideraii privind domeniul de vizibilitate ..........................
Cnd se folosesc funciile ......................................................
Tablourile .........................................................................................
Tablouri multidimensionale ....................................................
Utilizarea tipurilor .............................................................................
Sisteme de coordonate ..........................................................
ForEachNext ..................................................................
Totul la un loc: Textanoid! ................................................................
Rezumat ...........................................................................................

Capitolul 4

30
32
33
35
35
37
39

41
42
46
48
51
53
57
58
64
67
75
77
79
93

Factorul stil ................................................................... 95


Dezvoltarea stilului ........................................................................... 95
Spaiul liber i indentarea ...................................................... 96
Comentarii ........................................................................................ 97
Comentarii anterioare programului ........................................ 99
Comentarii n programul principal........................................ 100
Comentarii de funcie ........................................................... 100
Nume de funcii i de variabile ....................................................... 101
Nume ................................................................................... 101
Format de nume .................................................................. 101
Rezumat ......................................................................................... 103

VII

VIII

Cuprins

PARTEA

Capitolul 5

II-A: N

FINE, GRAFIC!................................

105

Primele noiuni de grafic ......................................... 107


Crearea ferestrei grafice ................................................................
Lime i nlime .................................................................
Adncimea de culoare .........................................................
[Mode] ..................................................................................
Imagini............................................................................................
LoadImage ...........................................................................
DrawImage ..........................................................................
CreateImage ........................................................................
MaskImage ..........................................................................
Culori ..............................................................................................
RGB .....................................................................................
Color ....................................................................................
Cls i ClsColor .....................................................................
Rezumat .........................................................................................

Capitolul 6

107
108
109
110
114
114
116
118
122
125
126
128
130
131

Rsfoirea paginilor i reprezentarea pixelilor......... 133


Rsfoirea paginilor .........................................................................
Buffere .................................................................................
SetBuffer ..............................................................................
CreateImage ........................................................................
Blocarea i deblocarea bufferelor ..................................................
Lock/Unlock .........................................................................
ReadPixel()/ReadPixelFast() ...............................................
WritePixel/WritePixelFast ....................................................
Utilizarea bufferelor: un program de desenare ..............................
Iniializare ............................................................................
Bucla principal ...................................................................
Funcii ..................................................................................
Rezumat .........................................................................................

133
136
137
143
156
156
157
161
166
168
170
172
180

Cuprins

Capitolul 7

Primele noiuni de programare a imaginilor ........... 181


Transformri ...................................................................................
Translaia .............................................................................
Scalarea ...............................................................................
Rotaia .................................................................................
Paralactic .....................................................................................
TileBlock i TileImage .........................................................
Rezumat .........................................................................................

Capitolul 8

Animaie ...................................................................... 227


Utilizarea bitmap-urilor la animaii .................................................
Realizarea bitmap-urilor ......................................................
Afiarea micrii ..................................................................
Rezumat .........................................................................................

Capitolul 9

227
234
239
247

Detecia coliziunilor ................................................... 249


Coliziuni de baz ............................................................................
Cercuri de delimitare ......................................................................
Distana dintre puncte ..........................................................
Raze ....................................................................................
Casete de delimitare ......................................................................
Coliziuni pixel-imperfecte ...............................................................
Coliziuni pixel-perfecte ...................................................................
Rezumat .........................................................................................

PARTEA

181
181
186
209
217
218
225

III-A: ULTIMELE

Capitolul 10

PIESE DIN PUZZLE

249
253
253
255
260
268
272
274

.................. 275

Manipularea datelor de intrare ................................. 277


Manipularea tastaturii .....................................................................
KeyDown() ...........................................................................
KeyHit() ................................................................................
Maparea mouse-ului pe ecran .......................................................
Afiarea cursorului mouse-ului ............................................
Ce-ai spus? Tratarea apsrilor pe butoanele mouse-ului .
Rotia mouse-ului .................................................................
Tratarea datelor introduse de la joystick ........................................
Rezumat .........................................................................................

277
278
285
294
295
298
306
310
312

IX

Cuprins

Capitolul 11

Sunete i muzic ........................................................ 313


Sunete ............................................................................................
ncrcarea sunetelor ............................................................
Ascult cu atenie - redarea sunetelor .................................
Muzic ............................................................................................
Canale i PlayMusic() ..........................................................
Niic zpceal d canale ..................................................
Rezumat .........................................................................................

Capitolul 12

Inteligena artificial .................................................. 337


Numere aleatoare ..........................................................................
Crearea unui temporizator cu funcia MilliSecs() ................
Vntoarea i evitarea ...................................................................
Vntoarea ..........................................................................
Evitarea ................................................................................
Rezumat .........................................................................................

Capitolul 13

337
342
349
349
354
356

Ultima frontier: Invaderz!!! ...................................... 359


S-i dm btaie: planificarea jocului ..............................................
Constante, funcii i tipuri ale jocului Invaderz!!! ............................
Cum se joac Invaderz!!! ...............................................................
Epilog .............................................................................................

PARTEA

313
314
316
330
330
331
335

359
362
366
368

IV-A: ANEXE ............................................. 371

Anexa A

Referina codurilor de scanare ................................. 373

Anexa B

Legturi (link-uri) utile ............................................... 379


Link-uri pentru BlitzBasic ............................................................... 379
Link-uri generale legate de programarea jocurilor ......................... 380

Anexa C

Ce se afl pe CD ......................................................... 381


Source ............................................................................................
Art ...................................................................................................
Sounds ...........................................................................................
Games............................................................................................
Programs .......................................................................................

382
382
382
382
383

Index ............................................................................ 384

INTRODUCERE

ei, salut, cititorule. Mersi c mi-ai cumprat cartea. i sunt cu adevrat


recunosctor pentru asta.

Ce este programarea? Programarea, dup definiia din Programming.com, este un set


de instruciuni codate care permite unei maini, mai ales unui calculator, s efectueze o
succesiune dorit de operaii. Cu alte cuvinte, programarea i permite s-i faci calculatorul
s fac ceea ce vrei tu s fac. Programarea se folosete n toate aspectele legate de
calculator, dar exist diferite tipuri de programare. n aceast carte vom vorbi despre
programarea jocurilor.
Programarea jocurilor este foarte diferit de toate celelalte tipuri de programare. Cnd
i porneti calculatorul, vezi deseori programe statice, care stau locului i ateapt s faci
ceva. Jocurile, nu. Jocurile sunt mereu active i n-au nevoie ca juctorul s ntreprind
vreo aciune ca s le menin n funciune.
Sigur, asta nseamn cumva c programarea jocurilor este niel mai dur dect alte
stiluri de programare? Da i nu. Dei uneori programarea jocurilor poate fi dificil, cartea
de fa se strduiete s transforme dificultatea n a doua natur. Vom folosi un limbaj de
programare numit BASIC, care, aa cum probabil i imaginezi, este destul de elementar
(n limba englez basic).

Ce conine cartea?
Aceast carte se dorete a fi un ghid care s nvee pe orice nceptor s proiecteze i
s dezvolte jocuri. n carte vei gsi o sumedenie de informaii, toate scrise cu scopul de a
v ajuta s v atingei scopul de a crea un joc. Fiecare capitol se bazeaz pe capitolele
anterioare i face cartea s semene cu o scar - o urci pas cu pas. Ultimul capitol te ajut
s-i foloseti toate cunotinele ajunse la punctul culminant pentru producia unui joc
final.

XI

XII

Introducere

Partea I discut despre limbajul BlitzPlus. n acest interval, nu vom vorbi despre
programele grafice, ci vom folosi texte pentru a scoate n eviden punctele de reper ale
limbajului.
Partea a II-a ofer cititorului toate noiunile privind grafica jocurilor. Gsii aici
informaii precum modificarea culorilor, ncrcarea i afiarea imaginilor, crearea de
fundaluri derulante i altele asemenea.
Partea a III-a examineaz alte aspecte legate de programarea jocurilor. Cititorul poate
nva s utilizeze datele introduse de la tastatur, sunetele i muzica, dup cum poate lua
n calcul inteligena artificial. De asemenea, aceast parte conine jocul final spre a crui
realizare tinde ntreaga carte.
Partea a IV-a conine toate anexele crii. Vei descoperi toate codurile de scanare
(pentru manipularea intrrilor), o list a site-urilor Web unde i poi aprofunda cunotinele,
precum i coninutul CD-ului.

Cine eti tu?


Cred c poi s rspunzi la ntrebarea asta mai bine dect mine, dar stai s-i spun ce
anume caut eu la un cititor. Mai nti, bnuiesc c eti fie un adolescent interesat n
programarea jocurilor, fie un printe interesat ca odrasla s nvee programarea jocurilor.
Cam la asta se reduce totul: interesul. Cartea nu este gndit s fie dificil. Ea l ajut pe
cititor s ptrund n lumea programrii jocurilor.
Cerinele sunt literalmente foarte reduse. Tot ce-i trebuie sunt cunotine elementare
de matematic, precum adunarea, scderea, nmulirea i mprirea. Dac stpneti aceste
tehnici, eti practic pregtit! De asemenea, a sugera cititorului s cear ajutorul printelui
ori de cte ori este nevoie. Vom folosi unele noiuni rudimentare de algebr, dar cazurile
sunt rare i reduse ca numr, deci n-ar trebui s fie greu de neles.
Nu trebuie s ai alte noiuni de limbaje de programare. Nu c nu i-ar fi de folos dac
le ai, desigur. Dac tii alte limbaje, ai ce nva i din aceast carte. Dar Programarea
jocurilor pentru adolesceni permite nsuirea noiunilor de programare a jocurilor, alturi
de abilitatea de implementare propriu-zis a jocurilor.
Dac eti printele unui copil care vrea s nvee programare, asta este cartea de care
ai nevoie. Programarea n general este un subiect lung i plictisitor, dar programarea jocurilor
i permite copilului tu s nvee lucruri distractive. Ajut-i copilul la programare n timp
ce el sau ea parcurge cartea. Nu numai c vei nva amndoi programare, dar, cine tie?
poate c astfel se va ntri legtura dintre printe i copil (asta vine de la psihologul din
mine).

Introducere

Cine sunt eu?


Salut la tot poporul! Eu sunt Maneesh Sethi, sunt student i motivul pentru care scriu
aceast carte este fiindc am convingerea c, fiind la rndul meu adolescent, a fi cel mai
indicat s-i ajut pe ali adolesceni s nvee programare. Am nceput s programez n
1999, n C i C++. Cu doi ani n urm am descoperit BlitzPlus i de atunci l studiez.
BlitzPlus pare a fi metoda cea mai simpl pentru ca orice nceptor s nceap a scrie
jocuri, i vreau s-l ajut pe cititor s avanseze ct mai rapid posibil. Site-ul Web al acestei
cri este situat la adresa www.maneeshsethi.com i mi poi trimite mesaje cu orice ntrebri
(nainte sau dup ce ai cumprat cartea) la maneesh@maneeshsethi.com. mi place la
nebunie s primesc mesaje de e-mail!

Convenii folosite n aceast carte


Not
Notele furnizeaz informaii suplimentare referitoare la o caracteristic, dezvolt o idee privind cum
trebuie efectuat o anumit operaie sau ilustreaz o chestie haioas.
Atenie
Acestea te avertizeaz cu privire la probleme poteniale i-i arat ce s nu faci.
Sugestie
Sugestiile ofer informaii pertinente cu privire la o metod mai bun, mai rapid sau mai uoar de a
face un anumit lucru.

S ne pregtim de dans
Dac tot mai rsfoieti cartea aceasta la librrie, acum e momentul s o iei acas. Cei
de la librrie ar mai fericii dac mai nti ai cumpra-o (ca i mine, de altfel!).
Prima parte i prezint rapid toate detaliile limbajului de programare BlitzPlus.
i uite-aa ncepem

XIII