Sunteți pe pagina 1din 16

M ULUMIRI

artea de fa n-ar fi fost posibil fr efortul susinut al redactorilor, artitilor,


corectorilor, oamenilor din marketing, indexatorilor, specialitilor n machetare i
managerilor de la Premier Press (Course PTR). Le mulumesc tuturor celor de la
Premier Press and Argosy Publishing pentru munca lor excepional: Mitzi Koontz, Scott
Harris, Jenny Davidson, Brandon Penticuff, Emi Smith, Stacy Hiquet, Andy Shafran, Sarah
ODonnell, Heather Hurley, Mark Garvey, Heather Talbot, Kristin Eisenzopf, Jordan Casey,
Elizabeth Furbish, Mike Tanamachi, Tonya Cupp, Kate Binder, Maureen Sheperd i Jan
Crocker. i mulumesc lui Maneesh Sethi pentru revizuirea tehnic a manuscrisului. Cred
c, mulumit eforturilor lor, vei gsi cartea aceasta de calitate i pe placul vostru.
Mulumesc de asemenea minunatei mele soii Jennifer i putilor notri glgioi,
Jeremiah i Kayleigh, ca i celui de-al treilea, care se afl pe drum. Mulumit vou, toate
aspectele vieii noastre mpreun nseamn o fericire i este un privilegiu s-mi mpart
viaa cu voi.
i sunt extrem de recunosctor lui Reiner Prokein pentru folosirea extraordinarei lui
artwork de la Reiners Tilesets (http://www.reinerstileset.de). Recunosc cu mna pe inim
c nici mcar n-a fi ncercat s creez RPG-ul din aceast carte fr s fi dispus de talentul
incredibil al lui Reiner. Artworkul este totul! i mulumesc pentru c oferi lumii sprite-urile
i tile-urile tale de nalt calitate.
Adresez de asemenea mulumiri i aprecieri lui Robin B., pentru excelentul lui editor
de niveluri, Mappy (http://www.tilemap.co.uk). n plus, i mulumesc lui Daniel Sczepansky
de la Cosmigo, pentru Pro Motion (http://www.cosmigo.com), puternicul software de
animaie pentru sprite-uri utilizat n aceast carte.

iv

D ESPRE

AUTOR

JONATHAN S. HARBOUR este de 17 ani juctor nrit i programator, ncepnd cu


primele sisteme: Commodore PET, Apple II i Tandy 1000. A absolvit facultatea de sisteme
informaionale de calcul i-i place s programeze n diverse limbaje, printre care C, C++ i
VB. Are experien cu mai multe platforme, inclusiv Windows, Linux, PocketPC i Game
Boy Advance. Jonathan a scris nou cri despre programare de jocuri, dezvoltare aplicaii,
programare pentru console, programare inter-platforme i modding pentru console. Are
un site Web dedicat programrii de jocuri la adresa http://www.jharbour.com.

C UPRINS

PE SCURT

Introducere ................................................................................................. xvii

PARTEA I: INTRODUCERE

CAPITOLUL 1
Visual Basic .................................................................................................. 3

CAPITOLUL 2
Primul program DirectX .............................................................................. 23

CAPITOLUL 3
Proiectarea jocului ...................................................................................... 39

PARTEA

II-A: CREAREA

LUMII INTERACTIVE A JOCULUI

63

CAPITOLUL 4
Tehnici de baz: desenarea imaginilor bitmap ........................................... 65

CAPITOLUL 5
Editarea nivelurilor cu Mappy ..................................................................... 79

CAPITOLUL 6
Fundamentele derulrii bazate pe tile-uri .................................................... 99

CAPITOLUL 7
Derularea lumii jocului .............................................................................. 113
vi

Cuprins pe scurt

CAPITOLUL 8
Tehnici avansate de derulare ................................................................... 133

PARTEA

III-A: PERSONAJUL

JUCTORULUI

(PJ)

157

CAPITOLUL 9
Tehnic de baz: desenarea sprite-urilor ................................................. 159

CAPITOLUL 10
Tehnic de baz: animarea sprite-urilor ................................................... 183

CAPITOLUL 11
Tehnic de baz: datele introduse de utilizator ........................................ 201

CAPITOLUL 12
Plimbare prin lumea jocului ....................................................................... 231

CAPITOLUL 13
Tehnic de baz: desenarea textului ........................................................ 255

CAPITOLUL 14
Tehnic de baz: detectarea coliziunilor .................................................. 261

PARTEA

IV-A: PERSONAJELE

NON-JUCTOR

(PNJ)

269

CAPITOLUL 15
Crearea claselor de personaje .................................................................. 271

CAPITOLUL 16
Adugarea de PNJ-uri n lumea jocului .................................................... 279

CAPITOLUL 17
Dialogul cu PNJ-uri ................................................................................... 293

CAPITOLUL 18
Angajarea n lupt cu PNJ-uri ................................................................... 303

PARTEA

V-A: TUELE

DE FINISARE

327

CAPITOLUL 19
Adugarea decorurilor n lumea jocului .................................................... 329

vii

viii

Cuprins pe scurt

CAPITOLUL 20
Tehnic de baz: efecte sonore ............................................................... 341

CAPITOLUL 21
Tehnic de baz: muzica de fundal .......................................................... 349

ANEX
Utilizarea CD-ROM-ului ............................................................................ 357
Index ............................................................................................................... 359

C UPRINS

Introducere .............................................................................. xvii


Visual Basic i DirectX .................................................................... xvii
Ritm i experien ........................................................................... xvii
Cerine............................................................................................ xviii
Versiunea de Visual Basic ............................................................. xviii
Versiunea de DirectX ..................................................................... xviii
Contactarea autorului ....................................................................... xix
Convenii utilizate n carte ................................................................ xix

PARTEA I: INTRODUCERE
Capitolul 1

Visual Basic .................................................................... 3


Programarea jocurilor ........................................................................ 3
nti lucrai, apoi punei ntrebri ............................................. 4
Lsai-v creativitatea s se desfoare ................................. 5
Creativitate, talent i munc susinut ..................................... 5
Cerul este unica limit ............................................................. 6
nvai meteugul .................................................................. 7
DirectX ............................................................................................... 8
Adugarea unei referiri la biblioteca de tipuri DirectX ........... 10
Testarea referirii DirectX ........................................................ 10
Suntei gata s scriei cod? ................................................... 14

ix

Cuprins
Prezentarea proiectului jocului .........................................................
Construirea unui RPG ...........................................................
Story-ul ..................................................................................
Bunii i rii ........................................................................
Aventur sau mcel n catacombe? ......................................
Descrierea personajului juctorului .......................................
Rezumat ...........................................................................................

Capitolul 2

14
14
15
16
16
18
21

Primul program DirectX............................................... 23


Iniializarea DirectX .......................................................................... 23
Crearea unui proiect nou ....................................................... 24
Obiectele DirectX i Direct3D ................................................ 24
Crearea dispozitivului primar ................................................. 26
Programul InitDirectX ................................................................................... 28
ncrcarea i afiarea unui fiier bitmap .......................................... 30
Noul proiect LoadBitmap ....................................................... 30
Variabile ................................................................................. 31
Pornirea programului ............................................................. 33
Iniializarea Direct3D ............................................................. 34
ncrcarea unui fiier bitmap ................................................. 35
Desenarea imaginii bitmap .................................................... 37
Nivelul urmtor ................................................................................. 38

Capitolul 3

Proiectarea jocului ....................................................... 39


Firul narativ bazat pe misiune ..........................................................
Proiectarea lumii RPG .....................................................................
Harta lumii ..............................................................................
Regiunile ................................................................................
Personajul juctorului (PJ) ...............................................................
Atributele personajului ...........................................................
Starea personajului ................................................................
Clasele de personaje .............................................................
Personajele non-juctor (PNJ) .........................................................
Arme i armuri ..................................................................................
Magia ...............................................................................................
Comunicaiile ...................................................................................
Luptele .............................................................................................
Nivelul urmtor .................................................................................

39
40
41
44
49
51
52
54
59
59
60
61
61
61

Cuprins

PARTEA

Capitolul 4

II-A: CREAREA

LUMII INTERACTIVE A JOCULUI

63

Tehnici de baz: desenarea imaginilor bitmap ......... 65


nelegerea imaginilor bitmap i a tile-urilor .....................................
Ce este un tile? ......................................................................
Drumul din tile-uri ..................................................................
Desenarea unei poriuni dintr-o imagine bitmap surs ....................
Luarea unui tile ......................................................................
Lumea este un loc mare ........................................................
Restul programului DrawTile .................................................
Nivelul urmtor .................................................................................

Capitolul 5

Editarea nivelurilor cu Mappy ..................................... 79


Crearea lumii jocului ........................................................................
Instalarea programului Mappy ...............................................
Crearea unei hri noi ............................................................
Importarea tile-urilor surs .....................................................
Editarea hrii de tile-uri .........................................................
Salvarea fiierului hart ca FMP ...........................................
Salvarea fiierului hart ca text .............................................
Tehnici avansate de editare a hrii .................................................
Utilizarea straturilor ................................................................
Nivelul urmtor .................................................................................

Capitolul 6

65
65
67
68
68
70
72
78

79
80
80
83
86
90
91
93
94
98

Fundamentele derulrii bazate pe tile-uri .................. 99


Introducere n derulare ..................................................................... 99
O vedere limitat asupra lumii ....................................................... 101
Derularea unei imagini bitmap mari generate de Mappy ..... 103
Crearea programului ScrollScreen ...................................... 103
Nivelul urmtor ............................................................................... 111

Capitolul 7

Derularea lumii jocului .............................................. 113


Construirea imaginii din tile-uri n timpul execuiei ........................
Crearea unui fundal bazat pe tile-uri ...................................
Lucrul profesionist cu tile-uri ................................................
Utilizarea datelor tile-urilor ...................................................
Convertirea datelor hrii ntr-o matrice .........................................
Desenarea tile-urilor n lumea jocului ............................................
Construirea lumii jocului ......................................................
Pardosirea lumii jocului .....................................................
Scrierea programului TileScroll .....................................................

113
114
115
116
119
120
121
122
123

xi

xii

Cuprins
Reutilizarea codului ............................................................. 124
Codul surs TileScroll ......................................................... 125
Nivelul urmtor ............................................................................... 131

Capitolul 8

Tehnici avansate de derulare ................................... 133


Derularea direct a tile-urilor pariale .............................................
Codarea subrutinei de derulare a tile-urilor pariale ............
ncrcarea unui fiier Mappy exportat ............................................
Programul ScrollWorld ...................................................................
Alinierea tile-urilor la bufferul de derulare ............................
Codul surs pentru ScrollWorld ...........................................
Adugarea fiierului Globals.bas .........................................
Adugarea fiierului Direct3D.bas .......................................
Adugarea fiierului TileScroller.bas ...................................
Codul surs principal pentru ScrollWorld ............................
Nivelul urmtor ...............................................................................

PARTEA

Capitolul 9

III-A: PERSONAJUL

JUCTORULUI

(PJ)

133
138
143
145
146
149
149
151
152
153
155

157

Tehnic de baz: desenarea sprite-urilor ................ 159


Prezentarea conceptului de sprite ................................................. 160
Realizarea sprite-urilor cu Direct3D .................................... 160
Desenarea sprite-urilor cu Direct3D .................................... 162
Crearea de sprite-uri Direct3D ....................................................... 163
ncrcarea unei texturi ......................................................... 164
Utilizarea clasei D3DXSprite ................................................................... 166
Structura rutinei de tratare a sprite-ului ............................... 166
Iniializarea unui sprite ......................................................... 168
Desenarea sprite-urilor Direct3D ................................................... 169
Randarea n 2D ................................................................... 170
Poziionarea, scalarea i rotirea sprite-ului ......................... 170
Subrutina reutilizabil SpriteDraw ....................................... 171
Programul SpriteTest ..................................................................... 172
Crearea proiectului .............................................................. 173
Adugarea fiierului Sprite.bas............................................ 174
Codul surs SpriteTest ........................................................ 176
Amuzamente cu sprite-uri .............................................................. 179
Translucena sprite-ului ....................................................... 179
Scalarea sprite-urilor ........................................................... 180
Nivelul urmtor ............................................................................... 181

Cuprins

Capitolul 10

Tehnic de baz: animarea sprite-urilor .................. 183


Micarea sprite-urilor .....................................................................
Animarea sprite-urilor ....................................................................
Crearea sprite-urilor animate ...............................................
nelegerea secvenelor de animaie ....................................
Programul AnimateSprite ...............................................................
Crearea noului proiect .........................................................
Codul surs AnimateSprite ..................................................
Nivelul urmtor ...............................................................................

Capitolul 11

Tehnic de baz: datele introduse de utilizator ...... 201


Alegerea celui mai bun dispozitiv de intrare pentru joc .................
Suportul DirectInput .............................................................
Intrrile de la tastatur .........................................................
Intrrile de la mouse ............................................................
Intrrile de la joystick ...........................................................
Cutarea dispozitivelor de intrare ........................................
Programarea tastaturii ...................................................................
Detectarea evenimentelor de tastatur cu DirectInput ........
Testarea intrrilor de la tastatur .........................................
Programarea mouse-ului ...............................................................
Micarea mouse-ului ...........................................................
Butoanele mouse-ului ..........................................................
Testarea datelor introduse de la mouse ..............................
Programarea joystick-ului ..............................................................
Folosirea DirectInput pentru programarea joystick-ului .......
Testarea intrrii de la joystick ..............................................
Nivelul urmtor ...............................................................................

Capitolul 12

184
186
186
189
192
193
193
199

201
202
203
204
204
204
205
205
206
212
213
214
215
219
220
222
229

Plimbare prin lumea jocului ...................................... 231


Maparea lumii jocului .....................................................................
Refamiliarizare cu harta Irlandei ..........................................
Digitizarea lumii reale ..........................................................
ncrcarea unui fiier binar Mappy .................................................
Exportarea n binar ..............................................................
ncrcarea datelor binare n Visual Basic ............................
Artwork-ul personajului animat ......................................................
Programul WalkAbout ....................................................................
Crearea proiectului ..............................................................
Adugarea fiierelor de suport pentru DirectX ....................

231
232
232
237
237
239
241
242
245
246

xiii

xiv

Cuprins
Adugarea fiierului Globals.bas ......................................... 246
Adugarea fiierului Game.bas ........................................... 247
Nivelul urmtor ............................................................................... 253

Capitolul 13

Tehnic de baz: desenarea textului ....................... 255


Crearea unui font bitmap ...............................................................
Tiprirea fontului bitmap ................................................................
Subrutinele pentru tiprirea textului .....................................
Programul PrintText .............................................................
Nivelul urmtor ...............................................................................

Capitolul 14

Tehnic de baz: detectarea coliziunilor ................. 261


Reacia fa de obiecte solide ........................................................
Intersecia dreptunghiurilor ..................................................
Scrierea unei funcii coliziune reutilizabil ...........................
inerea evidenei tile-urilor rele .........................................
Controlarea coliziunilor ntre tile-uri .....................................
Revizuirea afirii datelor de derulare .................................
Programul CollisionTest ......................................................
Nivelul urmtor ...............................................................................

PARTEA

IV-A: PERSONAJELE

Capitolul 15

NON-JUCTOR

(PNJ)

261
262
262
263
264
265
266
267

269

Crearea claselor de personaje.................................. 271


Clasele de personaje i atributele lor .............................................
Ctigarea de experien i trecerea la niveluri
superioare ......................................................................
Clasele personaje de baz ..................................................
Utilizarea claselor de personaje n joc ...........................................
Fiiere de date pentru personaje .........................................
Tipul de date al clasei de personaj ......................................
ncrcarea i salvarea fiierelor de date binare pentru
personaje .......................................................................
Programul editor de personaje ............................................
Nivelul urmtor ...............................................................................

Capitolul 16

255
256
256
257
260

271
272
273
275
275
275
276
277
278

Adugarea de PNJ-uri n lumea jocului ................... 279


Prezentarea PNJ-urilor ..................................................................
Poziia de start i domeniul de deplasare ............................
Un engine de stri simplu ....................................................
PNJ-uri bune i rele .............................................................

280
281
281
281

Cuprins
Crearea de PNJ-uri refolosibile ......................................................
Tipurile de date i matricele particularizate PNJ .................
Iniializarea PNJ-urilor .........................................................
Deplasarea PNJ-urilor .........................................................
Stabilirea unei destinaii aleatorii .........................................
Desenarea PNJ-urilor ..........................................................
Jocul nou i mbuntit .................................................................
Nivelul urmtor ...............................................................................

Capitolul 17

Dialogul cu PNJ-uri .................................................... 293


Stri comportamentale ...................................................................
ntlnirea cu juctorul ..........................................................
Dialogul cu juctorul ............................................................
Modificarea proiectului Celtic Crusader .........................................
Stri noi ................................................................................
ntlnirea cu juctorul ..........................................................
Desenarea bazat pe stare .................................................
ntlnirea cu juctorul ..........................................................
Dialogul cu juctorul ............................................................
Nivelul urmtor ...............................................................................

Capitolul 18

V-A: TUELE

Capitolul 19

293
294
295
297
297
298
300
300
301
301

Angajarea n lupt cu PNJ-uri ................................... 303


Sistemul de lupte ...........................................................................
Lupta bazat pe stare ..........................................................
Moartea juctorului ..............................................................
Implementarea sistemului de lupte ................................................
Animaiile luptelor ................................................................
Skeleton Knight....................................................................
Angajarea n lupt ................................................................
Managementul strii juctorului ...........................................
Managementul strilor PNJ .................................................
Not despre modularizarea jocului ................................................
Nivelul urmtor ...............................................................................

PARTEA

282
282
283
285
287
288
290
290

DE FINISARE

303
304
307
307
307
309
311
314
316
325
325

327

Adugarea decorurilor n lumea jocului .................. 329


Lumea este un pustiu ..................................................................... 329
Inserarea de decor aleatoriu .......................................................... 330
Matricele decor .................................................................... 331

xv

xvi

Cuprins
ncrcarea graficii decor ......................................................
Modificarea buclei jocului ....................................................
inerea juctorului n afara decorului ..................................
Desenarea sprite-urilor decor ..............................................
Noi animaii de personaje ..............................................................
Animaii Warrior Hero noi ....................................................
Animaii Black Knight noi .....................................................
Nivelul urmtor ...............................................................................

Capitolul 20

Tehnic de baz: efecte sonore ............................... 341


Prezentarea bibliotecii DirectX Audio ............................................
Accesarea bibliotecii DirectSound .......................................
Folosirea DirectSound .........................................................
Programarea DirectSound .............................................................
Sunetele ambientale ............................................................
Crearea obiectului DirectSound ...........................................
ncrcarea unui fiier WAV ..................................................
Mixarea de fiiere .WAV cu DirectSound ............................
Programul SoundTest ..........................................................
Nivelul urmtor ...............................................................................

Capitolul 21

341
342
342
343
343
343
344
344
344
347

Tehnic de baz: muzica de fundal .......................... 349


Cile audio DirectMusic .................................................................
Muzic MIDI sau .WAV ........................................................
Redarea muzicii de fundal ...................................................
Programul MusicTest ...........................................................
Nivelul urmtor ...............................................................................

Anex

331
332
333
335
336
336
337
338

349
350
350
350
355

Utilizarea CD-ROM-ului .............................................. 357

Index ...................................................................................................... 359

INTRODUCERE

un venit! Cartea aceasta v nva cum s v creai propriul RPG (role-playing


game), folosind Visual Basic i DirectX. V voi arta, pas cu pas, cum s construii
fiecare parte a jocului, utiliznd componente DirectX, ca Direct3D. Dac apreciai
c RPG-urile sunt distractiv de jucat, ateptai pn vei ncepe s lucrai la propriul vostru
joc! Construirea unui RPG este mult mai interesant dect jucarea lui, deoarece deinei
controlul complet al lumii RPG-ului i v putei lsa fru liber imaginaiei pentru a crea
aventuri de care s se bucure i alii.

Visual Basic i DirectX


nainte de a ajunge n punctul n care s putei concepe o aventur i construi un RPG
cu Visual Basic, trebuie s nvai limbajul i s nelegei DirectX. elul meu este s v
nv doar ceea ce trebuie s tii n aceast privin, fr s intru n detalii. Vei afla ce
trebuie s cunoatei pentru a construi un RPG i nimic mai mult. n loc s v scriei
propriul RPG cu Visual Basic, putei opta s folosii un produs ca RPG Maker; desigur
este o alternativ bun, dar n-ar fi mai interesant s deinei control complet asupra felului
n care funcioneaz jocul? Utiliznd RPG Maker putei cu certitudine s creai multe
RPG-uri complete, concepute de voi n timpul care ar fi necesar s construii un singur
RPG pornind de la zero i fcnd toat programarea. Dar dup ce v vei scrie propriul
cod, vei cpta o abilitate deloc neglijabil programarea de jocuri! n plus, vei deine
control creativ complet asupra felului cum opereaz jocul.

Ritm i experien
Cartea aceasta trebuie parcurs ca un hobby, fr presiuni din exterior i fr obiective
limitate, deoarece scopul principal este de a v amuza n timp ce nvai cum se programeaz

xvii

xviii

Introducere

jocurile. Nu mi se pare deloc distractiv s introducei listinguri de cod surs copiate dintr-o
carte, aa c nu v voi cere s o facei chiar n toate capitolele. n loc de aa ceva, vei
nva s scriei programe scurte care s demonstreze subiectele principale din fiecare
capitol i, cu timpul, vei ctiga experien. n tot ceea ce urmeaz nu se cere experien,
deoarece eu cred cu fermitate c repetiia practica este modul cel mai bun de a nva,
nu teoria i memorarea.

Cerine
Scopul crii este de a v nva cum s creai un RPG complex, pornind de la zero.
Anterior trebuie s cunoatei programarea n limbajul Visual Basic, fiindc nu-mi voi
pierde timpul s v-o explic. Programarea unui RPG este o provocare serioas, chiar nainte
de a ine seama i de impactul lucrului cu DirectX. n plus, dimensiunea redus a crii de
fa m mpiedic s fac altceva dect s m concentrez asupra acelui el principal. Dac
nu suntei cel puin oarecum familiarizat cu Visual Basic, v recomand struitor s luai
mai nti un manual despre aceste limbaj i abia apoi s citii cartea aceasta. (Un exemplu
bun este Visual Basic Programming for the Absolute Beginner Programarea n Visual
Basic pentru nceptori de Michael Vine.) n caz contrar, probabil c v vei pierde chiar
n primele capitole.

Versiunea de Visual Basic


Cartea aceasta se focalizeaz exclusiv asupra limbajului Visual Basic 6.0. Nu exist
nici un fel de suport pentru Visual Basic .NET, care este un produs complet diferit de 6.0.
Putei utiliza orice versiune de Visual Basic 6.0, inclusiv Learning Edition, ca s rulai
programele prezentate aici. Dac nu avei versiunea 6.0, putei utiliza i Visual Basic 5.0,
deoarece compilatorul ambelor versiuni este aproape acelai. Eu am testat codul pe
versiunile 5.0 i 6.0 i am constatat c funcioneaz.

Versiunea de DirectX
Cartea aceasta utilizeaz DirectX 8.0, deoarece este cea mai recent versiune de DirectX
acceptat de Visual Basic 6.0. Ar fi exagerat s spunem c este o limitare, fiindc DirectX
8 este o bibliotec de jocuri complet i puternic, cu suport 3D foarte avansat unele
dintre caracteristicile sale nici mcar nu sunt utilizate n aceast carte. n cartea de fa, eu
v voi nva cum s construii un RPG complet bazat pe 2D. Nu sunt necesare nici un fel
de caracteristici avansate (cum sunt cele din DirectX 9). Programele mostr folosesc
exclusiv suprafee i texturi Direct3D.

Introducere

Contactarea autorului
La adresa http://www.jharbour.com, ntrein un site Web care conine informaii despre
aceast carte ce v pot fi utile. Tot acolo exist un forum online activ, unde putei s
postai ntrebri i s v inei la curent cu cele mai recente discuii despre Visual Basic
6.0, discutnd cu ali programatori i fani VB. Dac avei probleme n parcurgerea crii,
vizitai-mi site-ul sau scriei-mi direct, pe adresa support@jharbour.com.

Convenii utilizate n carte


Pentru a evidenia pasaje importante, n carte sunt utilizate urmtoarele stiluri. Pe
alocuri vei gsi casete de text Not, Sfat i Atenie.
Not
Aa arat o not. Notele sunt informaii suplimentare asociate textului.
Sfat
Aa arat un sfat. Sfaturile v ofer recomandri n tutorialul curent.
Atenie
Aa arat o atenionare. Atenionrile ofer ndrumri despre ce trebuie fcut i ce nu trebuie fcut
ntr-o situaie dat.

xix