Sunteți pe pagina 1din 46

PRI NCESS RESCUE

Vectorial Graphic Laboratory 2011



Cuprins:
1. Introducere ...........................................................................................................3
1.1. Alegerea temei ................................................................................................4
1.2. Propunerea aplicaiei .....................................................................................4
2. Resurse ...................................................................................................................5
2.1. Construcia resurselor ...................................................................................5
2.2. Monster Sprite ............................................................................................9
3. Noiuni i algoritmi de programare folosii n aplicaie...................................... 12
3.1. Clasa static localSettings: ........................................................................... 14
3.2. Clasa static runTime .................................................................................. 15
3.3. Clasa Monster............................................................................................... 15
3.4. Metoda loadLevel ......................................................................................... 20
3.5. Metoda Load a formei principale ................................................................ 22
3.6. Functia principala refresh() a aplicaiei apelat la fiecare time_Tick ....... 24
3.7. Clasa Extra ................................................................................................... 31
3.8. Clasa option .................................................................................................. 32
4. Aplicaia PrincessRescue (UO-FS-DMI-2011) .................................................... 34
4.1. Ecranul principal al aplicaiei are urmtoarea configuraie : .................... 34
4.2. Setri ............................................................................................................. 35
4.3. Extras ............................................................................................................ 37
4.4. Nivelul demonstrativ 0 ................................................................................. 39
4.5. Fiierele resurs pentru crearea unui nivel: ............................................... 40
4.6. Nivelul demonstrativ 1 ................................................................................. 44
4.7. Nivelul demonstrativ 2 ................................................................................. 45
5. Bibliografie :......................................................................................................... 46



3

1. Introducere
In introducere se gaseste o scurta descriere pentru tehnologiile si aplicatiile folosite in
realizarea acestei lucrari.
CorelDRAW este un program de grafica vectoriala ,2D, ce a fost creat pentru a rula pe
platforme Microsoft Windows. Pana in anul 2000 au existat si variante pentru Linux (versiunea
9) si pana in 2001 pentru Macintosh (versiunea 11). In prezent, CorelDRAW ruleaza doar sub
Microsoft Windows.
C# este un limbaj de programare orientat-obiect conceput de Microsoft la sfritul anilor
90. A fost conceput ca un concurent pentru limbajul J ava. Ca i acesta, C# este un derivat al
limbajului de programare C++.
Graphics Device Interface (GDI) este o interfa de programare Microsoft Windows a
aplicaiilor de baz i sistemului de operare fiind component responsabila de reprezentarea
obiectelor grafice i transmiterea acestora la dispozitive de ieire , cum ar fi monitoare i
imprimante .
GDI este responsabil pentru sarcini, cum ar fi : desen linii i curbe, randare fonturi i de
manipulare palete .
Lucrarea este realizata in Windows Form Application , C#si este structurat pe 4
capitole.
n primul capitol se descrie propunerea aplicaiei si motivatia alegerii temei.
n capitolul doi se arat cum sunt construite resursele folosite de aplicaie i modul de
gestionare a acestora.
n capitolul trei este prezentat construcia aplicaiei din punct de vedere al
programatorului.
Capitolul patru contine prezentarea la nivel de utilizator a aplicaiei practice Princess
Rescue.


4

1.1. Alegerea temei
Am ales aceasta tema pentru realizarea lucrarii de licenta deoarece prin intermediul
acestei aplicatii , numita Princess Rescue , pot sa ajut copii, si nu numai, sa isi formeze
dexteritatile in ceea ce priveste folosirea mouse-ului. Comenzile jocului sunt create doar pentru a
fi folosite de la mouse , astfel copii sau persoana care se joaca acest joc sa poata sa isi formeze
dexteritatea cu mouse-ul jucand un joc distractiv.
1.2. Propunerea aplicaiei
n aplicaia practic asociat acestei lucrri se dorete construirea unui joc bazat pe
tehnologiile GDI+ , adaugand faciliti i opiuni .
Gestionarea unui obiect de ctre utilizator pe baza mouse-ului. Deciziile utilizatorului vor fi
cuantificate pe baza interaciunii dintre acest obiect i celelalte obiecte existente pe zona de
joc.
Existena unui punctaj global ce reflect toate aciunile utilizatorului. Acest punctaj va fi
ca valoare pozitiv i cresctor. Valoarea 0 a acestui punctaj arat c utilizatorul curent nu a
acionat deocamdat corect relativ la cerinele jocului. n continuare vom numi acest
punctaj variabila Points.
Existena unui punctaj secundar cu scopul de a cuantifica aciunile greite ale
utilizatorilor dintre care amintim coliziunea cu un obiect de tip monstru sau trecerea prin
zonele cu foc. Valoarea 0 a acestei variabile este una din condiiile de pierdere a jocului.
Vom numi aceast variabil Life.
Existena unor nivele de joc cu grade de dificultate diferite i posibilitatea de accesare a
acestora de ctre utilizatori pentru mbuntire sau creare de nivele noi .
Existena unor obiecte Montrii cu animaie 2D, personalizabili, cu diferite nivele de
agresivitate i raz de aciune.
Existena unor obiecte colectabile (heart i diamond) cu influen n creterea valorii
variabilelor Points i Life.

5

2. Resurse
2.1. Construcia resurselor
Toate resursele folosite de aplicaia Princess Rescue dinamice (montrii) sau statice
(imagini de backGround) sunt de constucie proprie realizate prin tehnici i deprinderi nvate la
laboratorul de grafic pe calculator (2010) Fie imaginea i2.cdr Construit n CorelDraw x5


Fig 2.1. Resursa i2.png

Are 5 elemente constructive: Cele 2 lnci, 2 sbii i scutul central. Cele dou lnci i cele
dou sbii sunt identice ntre ele doar difer matricea de RTS (Rotaie, Translaie i Scalare).
Astfel numrul de elemente constructive se reduce la 3 : O sabie, o lance i un scut. Se observ
din imagine c scutul are 12 inte. Vom ncepe construcia cu :
1.) un poligon regulat cu 12 vrfuri (obiect predefinit n corelDraw);
2.) construirea elementului int prin suprapunerea a dou cercuri;

6



3.) prin operaii repetate Copy, Paste se centreaz fiecare obiect int n unul din
vrfurile poligonului ;



4.) Cele 4 cercuri constructive ale conturului i ale cercului interior;


5.) Se construiete un dreptunghi (elementul scndur constitutiv al scutului);
6.) Prin repetri succesive Copy, Paste se construiete matricea de scnduri care se
grupeaz (meniul arrange group );

7

7.) Aplicarea rotaiei cu un unghi oarecare (aici 18.9);



8.) Plasarea cercului central peste matricea de scnduri;
9.) Prin meniul Arrange Shaping Intersect obinerea figurii centrale;
10.)


11.) Texturarea i aplicarea efectului de umbrire;



12.) Lsnd la o parte obiectul scut vom construi obiectul sabie din un dreptunghi
alungit;
13.) Prin reuniunea unor obiecte (cerc, dreptunghi i cerc) prin meniul (Arrange
shaping weld) construim aprtoarea minii respectiv;
14.) Mnerul sabiei din reuniunea obiectelor (trapez, dreptunghi i cerc);

8



15.) Elementele de combinare, texturare i copiere pentru a obine cea de a doua
sabie;



16.) Dup obinerea lncii din elementele constructive ;



17.) Construcia ansamblului final;

9


2.2. Monster Sprite

Urmtoarele fiiere resurse construite n corelDrawx5 i exportate sub form de fiiere
*.png stau la baza animaiei n aceast aplicaie. Pentru fiecare obiect ce se dorete a fi animat se
construiesc imaginile corespunztoare diferitelor ipostaze ale miscrii obiectului respectiv dup
care acestea se afieaz succesiv (n funcie de o variabil intern (care primete sens (n cazul
nostru) de vitez de rotaie)). Aceast succesiune de imagini ale aceluiai obiect poart numele
de sprite i devine clasa de baz a unei aplicaii GDI+.



Figurile urmtoare arat modul de creare a unui Sprite din vectori de imagini *.png

10

Poziiile a) Monster01_t00, b) monster01_t01, c) monster01_t02, d) monster01_t03

Poziiile e) Monster01_t04, f) monster01_t05, g) monster01_t06, h) monster01_t07

Poziia i) monster01_t08

Fig. 2.2.a,b,c,d,e,f,g,h,i . Fiierul sprite cu 9 poziii ale obiectului Monster_01.


Fig. 2.3. Poziiile a) monster02_t00, b) monster02_t01 i c) monster02_t02

Poziiile a) Monster03_t00, b) monster03_t01, c) monster03_t02, i d) monster03_t03

11


Poziiile e) monster03_t04 i f) monster03_t05 ale

Fig. 2.4. Fiierul Sprite Monster03.



Poziiile a) Monster04_t00, b) monster04_t01, c) monster04_t02, i d) monster04_t03


Poziia e) monster04_t04 a

Fig. 2.4 Fiierul Sprite Monster04



Fig. 2.5.a i b Fiierul sprite Monster05

12

3. Noiuni i algoritmi de programare folosii n
aplicaie
Aplicaia este construit n .Net C#ca i o aplicaie WindowsFormApplication cu
urmtoarele componente :
Forma principal conine urmtoarele zone:



Fig. 3.1. Forma principal

1.) Component de tip panel care conine informaiile despre punctajul de bonus,
variabila life i punctajul total;
2.) Component de tip pictureBox, suportul zonei de joc;
3.) Opiunile principale de ncepere a jocului (Start Game), accesarea zonei de setri
relative la dificultatea jocului (Options), accesare formei de afiare a datelor despre
aplicaie i autori (Extra) respectiv ieirea din aplicaie;
4.) Panelul de comand a utilizatorului format din 5 controale de tip button pentru
direciile cardinale + stop;
5.) Zona de afiare a datelor (un control de tip listBox);
6.) Controale de tip timer cu urmtoarele caracteristici:

13

Timer 1. Controleaz viteza jocului ;
Timer 2 Controlez interfaa grafic ;
Timer 3 Controleaz viteza de deplasare a nscrisului Logo ;

Clasa Application Engine este format din 3 clase cu caracter static :

public static class gameSettings
{
public static Graphics g;
public static Image backImage;
public static int crtLevel =0;
public static int lastLevel =3;
public static Randomrnd =new Random();
public static List<monster>monsters =new List<monster>();
public static void loadMonster(string strData)
{
TextReader data_load =new StreamReader(strData);
string data;
List<string>tmpData =new List<string>();
while ((data =data_load.ReadLine()) !=null)
{
tmpData.Add(data);
if (data =="endm")
{
monsters.Add( new monster (tmpData));
tmpData.Clear();
}
}
data_load.Close();
}
}

public static Graphics g; obiectul principal de tip graphics destinat zonei de joc
public static Image backImage; variabila suport a obiectului grafic g
public static int crtLevel =0; nivelul curent
public static int lastLevel =3; ultimul nivel (n versiunea demonstrativ)
public static Random rnd =new Random(); variabila global folosit pentru a genera
numere aleatoare (se folosete n aplicaie la explozia minelor (timpul la care
explodeaz i zonele din matrice afectate de foc se genereaz aleator))

14

public static List<monster>monsters =new List<monster>(); variabila de tip list care va
reine toate obiectele de tip monstru
public static void loadMonster(string strData) procedura de ncrcare a fiierului
@..\ ..\ LarisaGame\ LarisaGame\ Resource\ Monsters\ data01.txt n lista monsters.
3.1. Clasa static localSettings:
publ i c st at i c cl ass l ocal Set t i ngs
{
publ i c st at i c bool showMonst er Radi us = t r ue;
publ i c st at i c f l oat monst er DamageMul t i pl y = 1;
publ i c st at i c i nt f i r eResi st ance = 10;
publ i c st at i c i nt hear t Li f eSi ze = 30;
publ i c st at i c i nt di amondPoi nt sMul t i pl y = 3;
publ i c st at i c i nt di amondBasePoi nt s = 150;
publ i c st at i c i nt bonusTi meMul t i pl yer = 3;
publ i c st at i c st r i ng l ogoSt r i ng = "";
}

public static bool showMonsterRadius =true; Opiune de design care va afia sau nu
raza de aciune a unui obiect de tip monstru pentru a da posibilitatea utilizatorilor
de a aprecierea mai bine (vizibil) apropierea de un astfel de obiect
public static float monsterDamageMultiply = 1; Variabila folosit n calculul unei
coliziuni cu un obiect de tip monstru n vederea obinerii punctajului cu care va fi
diminuat variabila life
public static int fireResistance =10; Variabil de calcul folosit n coliziunea obiectului
gestionat de utilizator cu o zon cu foc.
public static int heartLifeSize =30; Numrul de puncte cu care crete variabila life n
cazul n care utilizatorul colecteaz un obiect de tip heart
public static int diamondPointsMultiply =3 i public static int diamondBasePoints =150;
variabile de calcul a punctajului acordat atunci cnd utilizatorul colecteaz un obiect de
tip diamond
public static int bonusTimeMultiplyer =3; variabila de multiplicare a bonusului de timp.
public static string logoString =""; variabila string ce reine textul citit din fiierul
G:\ Projects\ LarisaGame\ LarisaGame\ Resource\ Text\ logo.txt i care este afiat n
micare n partea de sus a zonei de joc.
La data publicrii acestei lucrri fiierul conine datele :
Fiierul logo.txt
Licenta UO-FS-DMI, GDI+Tehnology 2011, Merce Larisa

15

3.2. Clasa static runTime
(n completarea clasei localSettings)
Conine datele care se modific pe parcursul jocului.

publ i c st at i c cl ass r unTi me
{
publ i c st at i c i nt l i f e = 300;
publ i c st at i c i nt poi nt s = 0;
publ i c st at i c i nt pozx = 1;
publ i c st at i c i nt pozy = 40;
publ i c st at i c i nt bonus = 100;
publ i c st at i c i nt gl obal Ti me = 0;
}

public static int life; valoarea curent a variabilei life
public static int points; variabila destinat stocrii punctajului
public static int pozx, public static int pozy; poziia de start n matricea jocului a
obiectului gestionat de utilizator
public static int bonus, valoarea curent a bonusului de timp
public static int globalTime, timpul efectiv de joc.
3.3. Clasa Monster

S-a construit un obiect de tip monster (conform cerinelor date n propunerea
aplicaiei) care s poat fi personalizat dup nume i imaginile asociate, direcia de deplasare,
nivelul de apariie, agresivitatea i raza de aciune. Aceste date au fost introduse n fiierul
@..\ ..\ LarisaGame\ LarisaGame\ Resource\ Monsters\ data01.txt

Pentru versiunea demonstrativ fiierul data01.txt are urmtoarea componen:
Fiierul data01.txt.

name : FirstDefender
N:30:5:S:60:5:N:30:5:W:10:10:E:20:10:W:10:10
level : 0
location : 250, 190
image sets:
monster01_t00,monster01_t01,monster01_t02,monster01_t03,monster01_t04,monster01_

16

t05,monster01_t06,monster01_t07,monster01_t08
damage : 4
relativeRange : 96
endm
name : defender01
N:25:4:S:50:4:N:25:4
level : 1
location : 150, 125
image sets:
monster04_t00,monster04_t01,monster04_t02,monster04_t03,monster04_t04
damage : 2
relativeRange : 96
endm
name : defender02
N:100:1:S:200:1:N:100:1
level : 1
location : 400, 125
image sets:
monster03_t00,monster03_t01,monster03_t02,
monster03_t03,monster03_t04,monster03_t05
damage : 2
relativeRange : 96
endm
name : myGorgon
s:20:1:N:20:2:S:20:1
level : 1
location : 100, 300
image sets:
monster11,monster11,monster12,monster12,monster13,monster13,monster12,monster12
damage : 40
relativeRange : 60
endm
name : 4xPacMan
S:10:4:N:20:4:S:10:4

17

level : 2
location : 130, 340
image sets:
monster05_t00,monster05_t00,monster05_t00,monster05_t00,
monster05_t01,monster05_t01,monster05_t01,monster05_t01
damage : 40
relativeRange : 96
endm
name : 4xPacMan
S:10:4:N:20:4:S:10:4
level : 2
location : 370, 190
image sets:
monster05_t00,monster05_t00,monster05_t00,monster05_t00,
monster05_t01,monster05_t01,monster05_t01,monster05_t01
damage : 40
relativeRange : 96
endm

Pentru exemplificare s lum zona de nceput. Interpretarea acestui obiect monstru va fi
dat prin constructorul clasei Monster i are ca sens :

name : FirstDefender
N:30:5:S:60:5:N:30:5:W:10:10:E:20:10:W:10:10
level : 0
location : 250, 190
image sets:
monster01_t00,monster01_t01,monster01_t02,monster01_t03,monster01_t04,monster01_
t05,monster01_t06,monster01_t07,monster01_t08
damage : 4
relativeRange : 96
endm

Numele de afiare : FirstDefender.

18

Direcia de deplasare : spre nord de 30 de ori cte 5 pixeli (N:30:5), spre sud de 60 de ori
cte 5 pixeli (S:60:5), din nou nord 30 cu cte 5 pixeli (N:30:5), apoi spre vest de 10 ori cu viteza
10 pixeli (W:10:10) cnd ajunge la capt ncepe de la nceput.
Nivelul de apariie (n acest caz level:0).
Locaia de unde pornete pe hart (location : 250 cu 190)
Setul de imagini Sprite care vor determina animaia .

Figurile urmtoare arat modul de creare a unui Sprite din vectori de imagini *.png .
Fig.3.2 . Monster01 Sprite

Variabila damage : reprezint puterea monstrului (n cazul n care acesta intr n
coliziune cu obiectul gestionat de utilizator) pentru exemplul anterior damage are valoarea 4
Variabila relativeRange gestioneaz raza de aciune a obiectului monstru (valaorea
se msoar n pixeli)

publ i c cl ass monst er
{
publ i c st r i ng name;
publ i c Li st <Poi nt > mPoi nt s;
publ i c i nt l vl Apar i t i on;
publ i c Poi nt st ar t Locat i on;
publ i c Poi nt cr t Locat i on;
publ i c i nt cr t Posi t i on;
publ i c Li st <I mage> mI mages;
publ i c i nt cr t I mage;
publ i c i nt damage;
publ i c i nt r el at i veRange;
}

Metoda draw asociat obiectelor monster folosete urmtorul mecanism :
Caluleaz poziia curent a obiectului folosind circular valorile listei mPoints n
funcie de timpul global, tot prin acest mecanism calculeaz poziia imagii curente din setul
de imagini mImages care trebuie afiat dup care apeleaz metodele DrawImageUnscaled
i DrawString ale obiectelor grafice.

publ i c voi d dr aw( i nt t i meOf Di spl ay)
{
cr t Posi t i on = t i meOf Di spl ay %mPoi nt s. Count ;

19

cr t I mage = t i meOf Di spl ay %mI mages. Count ;
cr t Locat i on. X = cr t Locat i on. X + mPoi nt s[ cr t Posi t i on] . X;
cr t Locat i on. Y = cr t Locat i on. Y + mPoi nt s[ cr t Posi t i on] . Y;
gameSet t i ngs. g. Dr awI mageUnscal ed( t hi s. mI mages[ cr t I mage] ,
t hi s. cr t Locat i on) ;
gameSet t i ngs. g. Dr awSt r i ng (
t hi s. name,
new Font ( "Ar i al ", 10, Font St yl e. Regul ar ) ,
new Sol i dBr ush ( Col or . Bl ack) ,
new Poi nt ( cr t Locat i on. X - 20, cr t Locat i on. Y + 40) ) ;
}

Constructorul clasei Monster instaniaz un obiect al acestei calse dintr-o list de
stringuri (acestea sunt citite din fiier i pe baza metodei Split a clasei String sunt mprite i
convertite (dac este cazul) n datele necesare astfel:

data[0] =name : FirstDefender
d_ =data[0].Split (:) d_[0] =name respectiv d_[1] =First Defender
this.name =d_[1];
data[1] =N:30:5:S:60:5:N:30:5:W:10:10:E:20:10:W:10:10
d_ =data[1].Split (:) d_[0] =N, d_[1] =30; d_[2] =5, , d_[15] =W,
d[16] =10 i d[17] =10;
pentru toate elementele lui d_, din 3 n 3 (cu i contor)
dac d_[i] = N tx =+1, (se calculeaz n funcie de punctele cardinale)
Se adaug punct cu punct n lista mPoints valoarea (d_[i + 2])*tx,(d_[i + 2])*ty
i aa n continuare pentru fiecare membru al clasei monster

public monster(List<string>data)
{
mPoints =new List<Point>();
string[] d_ =data[0].Split(':');
this.name =d_[1];
d_ =data[1].Split (':');
for (int i =0; i <d_.Length-1; i +=3)
{
int tx =0;
int ty =0;
switch (d_[i])
{
case "N": ty =-1; break;

20

case "S": ty =+1; break;
case "W": tx =-1; break;
case "E": tx =+1; break;
}
for (int j =0; j <int.Parse(d_[i +1]); j++)
{
mPoints.Add(new Point(int.Parse(d_[i +2])*tx, (int.Parse(d_[i +2]))*ty));
}
}
d_ =data[2].Split(':');
this.lvlAparition =int.Parse(d_[1]);
char [] separators =new char [] {',',':'};
d_ =data[3].Split(separators);
this.startLocation =new Point(int.Parse(d_[1]), int.Parse(d_[2]));
this.crtLocation=newPoint(this.startLocation.X,this.startLocation.Y);
this.crtPosition =0;
d_ =data[5].Split(',');
this.mImages =new List<Image>();
foreach (string dataS in d_)
mImages.Add(Image.FromFile(@"..\..\Resource\Monsters\" +dataS +".png"));
this.crtImage =0;
d_ =data[6].Split(':');
this.damage =int.Parse(d_[1]);
d_ =data[7].Split(':');
this.relativeRange =int.Parse(d_[1]);
}
3.4. Metoda loadLevel
Aplicaia apleleaz aceast metod de fiecare dat cnd utilizatorul ajunge la obiectul de
tip poart i variabila gameSettings crtLevel prin incrementare nu depete variabila
gameSettings.lastLevel. Aceast metod este structurat n urmtoarele module:
ncarc fiierul corespunztor (@"..\..\Resource\Text\Lvl"+level +".txt") care conine
informaiile referitoare la obiectivele jocului

21

ncarc fiierul corespunztor (@"..\..\resource\Text\minit"+level+".txt") care conine
datele referitoare la matricea de joc.
Procesarea matricii de joc
ncrcarea fiierului (@"..\..\resource\Image\backImage"+ level+".png") care conine
imaginea de fundal a nivelului
ncrcarea fiierului (@"..\..\resource\Text\Extra"+level+".txt") ce conine datele despre
bonusul de timp (n versiunea demonstrativ) i afiarea acestui bonus n controlul
progressBar

publ i c voi d l oadLevel ( i nt l evel )
{
l i st Box1. I t ems. Cl ear ( ) ;
Text Reader dat a_Load = new
St r eamReader ( @". . \ . . \ Resour ce\ Text \ Lvl "+ l evel + ". t xt ") ;
st r i ng cr t Dat a;
whi l e ( ( cr t Dat a = dat a_Load. ReadLi ne( ) ) ! = nul l )
l i st Box1. I t ems. Add( cr t Dat a) ;
dat a_Load. Cl ose( ) ;

Text Reader l oad = new
St r eamReader ( @". . \ . . \ r esour ce\ Text \ mi ni t "+l evel +". t xt ") ;
st r i ng myTxt = l oad. ReadToEnd( ) ;
l oad. Cl ose( ) ;

i nt k = 0;
f or ( i nt i = 0; i < 80; i ++)
{
f or ( i nt j = 0; j < 102; j ++)
{
i f ( j <100) mA[ j , i ] = i nt . Par se( myTxt [ k] . ToSt r i ng( ) ) ;
k++;
}
}

gameSet t i ngs. backI mage =
new Bi t map( @". . \ . . \ r esour ce\ I mage\ backI mage"+ l evel +". png") ;
r ct = new Rect angl e( - 1, - 1, 600, 480) ;
gameSet t i ngs. g. Dr awI mage( gameSet t i ngs. backI mage, r ct ) ;

Text Reader get Bonus = new

22

St r eamReader ( @". . \ . . \ r esour ce\ Text \ Ext r a"+l evel +". t xt ") ;
st r i ng[ ] bonusDat a = get Bonus. ReadLi ne( ) . Spl i t ( ' : ' ) ;
r unTi me. bonus = i nt . Par se( bonusDat a[ 1] ) ;
r unTi me. bonus *= l ocal Set t i ngs. bonusTi meMul t i pl yer ;
pr ogr essBar 1. Maxi mum= r unTi me. bonus;
pr ogr essBar 1. Mi ni mum= 0;
pr ogr essBar 1. Val ue = r unTi me. bonus;
}

3.5. Metoda Load a formei principale
Conine urmtoarele module:
Iniializarea grafic dup un obiect de tip bitmap;
ncrcarea fiierelor *.png pentru controalele de tip buton asociate panoului de comand
destinat utilizatorului;

Fig. 3.3. resursele sg_u/ sg_l/ sg_r/ sg_d
ncrcarea imaginii de backGround i pornirea controlului de tip timer ascociat cu
suprapunerea imaginilor de backGround;



Fig. 3.4. backGround image A Fig. 3.5. backGround Image D
ncrcarea fiierului ( @". . \ . . \ r esour ce\ Monst er s\ dat a01. t xt ") care conine toate
datele despre montrii;
ncrcarea fiierului de nceput (@"..\..\resource\Text\begining.txt") cu informaii
privitoare la posibilele prime aciuni ale utilizatorului. La data publicrii acestei lucrri
acest fiier are urmtoarele date:

Welcome to Princess Rescue 2011


23

This is the demo version and has only
three levels.

Press START to begin your journey
Press OPTIONS to customize features
Press Help to learn how to play
Press Exit to leve this application

Program version beta 0.2.4

ncrcarea fiieruli ( @". . \ . . \ r esour ce\ Text \ l ogo. t xt ")

private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("Beta 0.2.4");
b =new Bitmap(pictureBox1.Width, pictureBox1.Height);
gameSettings.g =Graphics.FromImage(b);
button1.BackgroundImage =Image.FromFile (@"..\..\resource\sg_u.bmp");
button2.BackgroundImage =Image.FromFile (@"..\..\resource\sg_l.bmp");
button3.BackgroundImage =Image.FromFile (@"..\..\resource\sg_r.bmp");
button4.BackgroundImage =Image.FromFile (@"..\..\resource\sg_d.bmp");
gameSettings.backImage =new
Bitmap(@"..\..\resource\Image\backImageA.png");
rct =new Rectangle(-1, -1, 600, 480);
gameSettings.g.DrawImage(gameSettings.backImage, rct);
timer2.Enabled =true;
pictureBox1.Image =b;
gameSettings.loadMonster(@"..\..\resource\Monsters\data01.txt");
panel1.Visible =false;
TextReader data_load =new
StreamReader(@"..\..\resource\Text\begining.txt");
string crtData;
while ((crtData =data_load.ReadLine()) !=null)
listBox1.Items.Add(crtData);
data_load.Close();
TextReader logo_load =new StreamReader(@"..\..\resource\Text\logo.txt");
l ocal Set t i ngs. l ogoSt r i ng = l ogo_l oad. ReadLi ne( ) ;
l ogo_l oad. Cl ose( ) ;
}

24


3.6. Functia principala refresh() a aplicaiei apelat la fiecare
time_Tick

Fig. 3.6. partea I a procedurii refresh
n prima parte a acestei funcii se fac doar verificri relativ la coliziunile obiectului
gestionat de utilizator i poziia curent din matrice.
publ i c voi d r ef r esh( )
{
i f ( mA[ r unTi me. pozx , r unTi me. pozy ] == 2)
{
mA[ r unTi me. pozx, r unTi me. pozy] = 0;
r unTi me. l i f e += l ocal Set t i ngs. hear t Li f eSi ze;
r unTi me. poi nt s += 10;
}
i f ( mA[ r unTi me. pozx, r unTi me. pozy] == 8) / / her at suppor t {}
{
r unTi me. l i f e += l ocal Set t i ngs. hear t Li f eSi ze;

25

r unTi me. poi nt s += 10;
i nt t mpDat ax = 0;
i nt t mpDat ay = 0;

f or ( i nt i = 4; i >= 0; i - - )
{
f or ( i nt j = 4; j >= 0; j - - )
{
i f ( mA[ r unTi me. pozx - i , r unTi me. pozy - j ] == 2)
{
t mpDat ax = r unTi me. pozx - i ;
t mpDat ay = r unTi me. pozy - j ;
br eak;
}
}
}
f or ( i nt i = 0; i < 5; i ++)
{
f or ( i nt j = 0; j < 5; j ++)
{
mA[ t mpDat ax + i , t mpDat ay + j ] = 0;
}
}
}
i f ( mA[ r unTi me. pozx, r unTi me. pozy] == 9) / / di amond suppor t {}
{
r unTi me. poi nt s +=
l ocal Set t i ngs. di amondBasePoi nt s *
l ocal Set t i ngs. di amondPoi nt sMul t i pl y;
i nt t mpDat ax = 0;
i nt t mpDat ay = 0;
f or ( i nt i = 4; i >= 0; i - - )
{
f or ( i nt j = 4; j >= 0; j - - )
{
i f ( mA[ r unTi me. pozx - i , r unTi me. pozy - j ] == 7)
{
t mpDat ax = r unTi me. pozx - i ;

26

t mpDat ay = r unTi me. pozy - j ;
br eak;
}
}
}
f or ( i nt i = 0; i < 5; i ++)
{
f or ( i nt j = 0; j < 5; j ++)
{
mA[ t mpDat ax + i , t mpDat ay + j ] = 0;
}
}
}
i f ( mA[ r unTi me. pozx, r unTi me. pozy] == 7)
{
mA[ r unTi me. pozx, r unTi me. pozy] = 0;
r unTi me. poi nt s += l ocal Set t i ngs. di amondBasePoi nt s *
l ocal Set t i ngs. di amondPoi nt sMul t i pl y;
}
/ / cont i nuar e

Fig. 3.6. Partea a II-a a procedurii refresh()
i f ( ( mA[ r unTi me. pozx, r unTi me. pozy] == 3) | | ( mA[ r unTi me. pozx,
r unTi me. pozy] == 4) )
{
gameSet t i ngs. cr t Level ++;
r unTi me. pozx = 1;
r unTi me. pozy = 40;
r unTi me. poi nt s += r unTi me. bonus;
l abel 1. Text = r unTi me. poi nt s. ToSt r i ng( ) ;

27

i f ( gameSet t i ngs. cr t Level == gameSet t i ngs. l ast Level )
gameWon( ) ;
el se
l oadLevel ( gameSet t i ngs. cr t Level ) ;
}
i f ( ( mA[ r unTi me. pozx, r unTi me. pozy] == 6) )
{
r unTi me. l i f e - = ( 25 - l ocal Set t i ngs. f i r eResi st ance) ;
i f ( r unTi me. l i f e < 0)
{
r unTi me. l i f e = 0;
gameLoose( ) ;
}
}
i f ( r unTi me. bonus ! = 0)
{
r unTi me. bonus- - ;
pr ogr essBar 1. Val ue = r unTi me. bonus;
}
l abel 1. Text = r unTi me. poi nt s. ToSt r i ng( ) ;
l abel 2. Text = r unTi me. l i f e. ToSt r i ng( ) ;
gameSet t i ngs. g. Dr awI mage( gameSet t i ngs. backI mage, r ct ) ;
/ / cont i nuar e

Modulul de actualizare grafic cu care se ncheie modulul anterior are ca scop
redesenarea zonei de joc astfel:
Pentru fiecare element din matricea de joc dac valoarea acestuia este:
1 - Se consider zid i aciunea grafc corespunztoare este de a desena o
crmid de culoare gri;
2 - Se consider nceputul zonei de desenare a obiectului de tip heart drept
urmare aciunea grafic corespunztoare este de a ncrca fiierul resur:
..resource\heart1.png ;
3 - Element suport al zonei de calcul pentru obiectul de tip door, nu are aciune
grafic asociat;
4 - Inceputul zonei de desenare a obiectului de tip door aciunea grafic
corespunztoare este de a ncrca fiierul resur: ..resource\door_2.png" prin
metoda asociat obiectelor grafice DrawImageUnscaled
5 - Obiectul de tip min. Probabilitatea de explozie a acesteia este 1/250. n cazul
n care explodeaz pe o raz de 10 uniti din matricea de joc. Explozia are 100
de elemnte constitutive (se geereaz aleator de 100 de ori o poziie n
interiorul zonei de explozie i valorile corespunztoare iau valoarea 6 (foc)).

28

Se ine cont ca o explozie aproape de obiectul door s nu distrug n totalitate
acest obiect;
6 - Zon de teren cu foc. Se deseneaz cu portocaliu zona respectiv;
7 - Inceputul zonei de desenare a obiectului de tip diamond aciunea grafic
corespunztoare este de a ncrca fiierul resur:
. . \ . . \ r esour ce\ di amond. png " prin metoda asociat obiectelor grafice
DrawImageUnscaled;
8 - Element suport al zonei de calcul pentru obiectul de tip heart, nu are aciune
grafic asociat;
9 - Element suport al zonei de calcul pentru obiectul de tip diamond, nu are
aciune grafic asociat;

for (int i =0; i <80; i++)
{
for (int j =0; j <100; j++)
{
switch (mA[j,i])
{
case 1:
Rectangle toDraw =new Rectangle(j * 6, i * 6, 6, 6);
gameSettings.g.FillRectangle(new
SolidBrush(Color.LightGray), toDraw);
break;
case 2:
gameSettings.g.DrawImageUnscaled(
Image.FromFile(@"..\..\resource\heart1.png"), new
Point(j * 6, i * 6));
break;
case 4:
toDraw =new Rectangle(j * 6, i * 6, 6, 6);
gameSettings.g.DrawImageUnscaled(
Image.FromFile(@"..\..\resource\door_2.png"), new
Point(j * 6-12, i * 6-9));
break;
case 5:
int explode =gameSettings.rnd.Next() % 250;
if (explode ==0)
{

29

mA[j, i] =6;
for (int AEC =0; AEC <100; AEC++)
{
int explosionRX =
gameSettings.rnd.Next() % 21 - 10;
int explosionRY =
gameSettings.rnd.Next() % 21 - 10;
try
{
if (!(((mA[j +explosionRX, i +
explosionRY]) ==4) || ((mA[j +
explosionRX, i +explosionRY]) ==3)))
mA[j +explosionRX, i +explosionRY] =6;
}
catch {}
}
}
toDraw =new Rectangle(j * 6, i * 6, 6, 6);
gameSettings.g.FillRectangle(new
SolidBrush(Color.Black), toDraw);
break;
case 6: //fire
toDraw =new Rectangle(j * 6, i * 6, 6, 6);
gameSettings.g.FillRectangle(new
SolidBrush(Color.Orange), toDraw);
break;
case 7: // diamonds
gameSettings.g.DrawImageUnscaled(
Image.FromFile(@"..\..\resource\diamond.png"), new
Point(j * 6, i * 6));
break;
}
}
}
/ / cont i nuar e


30

Modulul de actualzare grafic continu cu desenarea obiectului gestionat de utilizator:

gameSet t i ngs. g. Fi l l El l i pse( new Sol i dBr ush( Col or . Red) ,
r unTi me. pozx * 6, r unTi me. pozy * 6, 6, 6) ;
gameSet t i ngs. g. Dr awEl l i pse( Pens. Red ,
r unTi me. pozx * 6 - 2, r unTi me. pozy * 6 - 2, 10, 10) ;
/ / cont i nuar e

Respectiv (n ncheierea procedurii refresh()) se verific dac exist obiecte ale clasei
monster n acest nivel i pentru fiecare obiect gsit se verifc coliziunea acestuia cu obiectul
utilizator:

f or each ( monst er dat aM i n gameSet t i ngs. monst er s)
{
i f ( dat aM. l vl Apar i t i on == gameSet t i ngs. cr t Level )
{
dat aM. dr aw( r unTi me. gl obal Ti me) ;
f l oat xa = r unTi me. pozx * 6;
f l oat ya = r unTi me. pozy * 6;
f l oat xc = dat aM. cr t Locat i on. X + dat aM. r el at i veRange/ 2;
f l oat yc = dat aM. cr t Locat i on. Y + dat aM. r el at i veRange/ 2;
f l oat d = ( xa - xc) * ( xa - xc) + ( ya - yc) * ( ya - yc) ;
i f ( d < ( ( dat aM. r el at i veRange/ 2) * ( dat aM. r el at i veRange/ 2) ) )
{
r unTi me. l i f e - = ( i nt ) ( ( f l oat ) dat aM. damage *
l ocal Set t i ngs. monst er DamageMul t i pl y) ;
i f ( r unTi me. l i f e < 0)
{
r unTi me. l i f e = 0;
gameLoose( ) ;
}
}
}
}
pi ct ur eBox1. I mage = b;
}


31

3.7. Clasa Extra
Aceast clas este asociat formularului windows Extra asociat cu gestionarea
fiierului cu acelai nume @"..\..\Resource\Text\Extra.txt". Metoda de ncrcare a acestui
fiierului este construit pe baza unui obiect TextReader conform codului urmtor :



Publ i c par t i al cl ass Ext r a : For m
{
publ i c Ext r a( )
{
I ni t i al i zeComponent ( ) ;
}

pr i vat e voi d Ext r a_Load( obj ect sender , Event Ar gs e)
{
l i st Box1. I t ems. Cl ear ( ) ;
Text Reader dat a_Load =
new St r eamReader ( @". . \ . . \ Resour ce\ Text \ Ext r a. t xt " ) ;
st r i ng cr t Dat a;
whi l e ( ( cr t Dat a = dat a_Load. ReadLi ne( ) ) ! = nul l )
{
l i st Box1. I t ems. Add( cr t Dat a) ;
}
dat a_Load. Cl ose( ) ;
}
pr i vat e voi d but t on1_Cl i ck( obj ect sender , Event Ar gs e)
{
t hi s. Cl ose( ) ;
}
}


32



Fig. 3.7. Form Extra
3.8. Clasa option

Datorit modului de dezvoltarea a aplicaiei la nivel de programare orientat pe obiecte
aceast clas (cu designul n figura urmtoare) nu trebuie dect s gestioneze valorile clasei
statice localSettings respectiv runTime prin anumite controale



Fig. 3.8 Form Option

33


publ i c voi d r ef r esh_dat a( )
{
r unTi me. l i f e = t r ackBar 1. Val ue;
l ocal Set t i ngs. monst er DamageMul t i pl y =
( f l oat ) ( numer i cUpDown1. Val ue) ;
l ocal Set t i ngs. f i r eResi st ance =
( i nt ) ( numer i cUpDown2. Val ue) ;
l ocal Set t i ngs. hear t Li f eSi ze = ( i nt )
( numer i cUpDown3. Val ue) ;
l ocal Set t i ngs. di amondBasePoi nt s =
( i nt ) ( numer i cUpDown4. Val ue) ;
l ocal Set t i ngs. di amondPoi nt sMul t i pl y =
( i nt ) ( numer i cUpDown5. Val ue) ;
l ocal Set t i ngs. bonusTi meMul t i pl yer =
( i nt ) ( numer i cUpDown6. Val ue) ;
}


34

4. Aplicaia PrincessRescue (UO-FS-DMI-2011)
4.1. Ecranul principal al aplicaiei are urmtoarea configuraie :

Fig. 4.1. Ecranul principal

35

1. Meniul principal al jocului ce dispune de submeniurile StarGame (pornirea jocului),
Option (setrile accesibile utilizatorilor), Extra (conine date sumare despre aplicaie i
autori) i Exit (pentru ieirea din aplicaie)
2. Bara de design cu nscrisul mobil Licena UO-FS-DMI, GDI+ Tehnology 2011, Merce
Larisa
3. Zona efectiv de joc
4. Informaii despre joc, nivelul curent, obiective i date despre obiectele ntlnite (pentru
fiecare nivel n parte se schimb mesajul n funcie de cerinele nivelului) i scenariul
dat.
4.2. Setri


Fig. 4.2. Setri

1.) La acest nivel se pot face urmtoarele setri:
Conceptul de via (variabila Life) cu valori ntre 100 i 500 (curnt este 300) Cu ct
utilizatorul are mai multe puncte n aceast variabil cu att poate rezista la mai multe
atacuri ale obiectelor sau foc, elemente care diminueaz acest punctaj. Cnd acest
valoare ajunge la 0 este una din condiiile pentru care se termin jocul.

36

Variabila Monster Agressinon indic cu ct va diminua atacul unui obiect monstru
valoarea life a utilizatorului. Aa cum am artat n paragrafele anterioare un obiect
monstru are un punctaj de baz. Valoarea total a atacului este acest punctaj nmulit cu
valoarea variabilei Monster Agression. Aceast variabil are o plaj de valori cuprins
ntre valoarea 0.50 pentru nivelul cel mai uor i 2.50 pentru nivelul cel mai dificil.
Variabila Fire Resistance are ca scop gestionarea coliziunii dintre obiectul condus de
utilizator i zonele acoperite de foc (sau explozia minelor). Cu ct aceast valoare este
mai mare cu att mai puine puncte se vor diminua din variabila Life a juctorului atunci
cnd trece peste o zon acoperitde foc. Variabila Fire Resistance are o valoare 0 pentru
nivelul cel mai dificil i 20 pentru nivelul cel mai uor.
Hp (heal Points) .valoarea n puncte cu care crete variabila life atunci cnd obiectul
gestionat utilizator trece peste un obiect de tipul heart. Variabila Hp are valori ntre
50 (maximul acordat pentru nivelul cel mai facil) i doar 10 puncte pentru cel mai
dificil nivel



Diamond Base Points, Valoarea n puncte acordat utilizatorului cnd acesta trece peste
un obiect de tip diamond. Valorile sunt cuprinse ntre 50 i 250



Multiply Valoarea cu care se multiplic punctajul acordat trecerii peste obiectele diamant.
Intervalul de valori pe care le poate lua aceast variabil este cuprins ntre 1 pentru
nivelul cel mai dificil i 5 puncte pentru nivelul cel mai uor.
Bonus Time. Fiecare nivel beneficiaz de un bonus de timp de baz ce se adaug
punctajului total la terminarea nivelului. Valoarea variabilei Bonus Time multiplic
acest punctaj.
2.) Selectarea rapid a nivelului dorit cu urmtoarele valori:


Ver
y hard
Har
d
Med
ium
Eas
y
Ver
y Easy
Life 100 200 300 400 500
Monster
agression
2.5 2.0 1.5 1.0 0.5
Fire
Resistance
0 5 10 15 20
Hp 10 20 30 40 50
Diamon
50 100 150 200 250

37

Base Paoints
Multiply 1 2 3 4 5
Bonus
Time
1 2 3 4 5

3.) Butonul de revenire n forma principal fr a salva ultimile modificri la nivel de setri
4.) Butonul de acceptare a modificrilor i revenirea n forma principal.
4.3. Extras


Fig. 4.3. Extras

La data publicrii acestei lucrri fiierul @..\..\Resource\Text\Extras.txtncrcat n
aceast fereastr are urmtorul coninut:

38


Universitatea din Oradea,
Facultatea de Stiinte,
Departamentul de Matematica si Informatica.

Promotia 2011

Acest joc este aplicatia practica asociata cu lucrarea de licenta a studentei Merce Larisa.

Aplicatia se bazeaza in special pe conceptele GDI+ prezentate in laboratorul de grafica pe
calculator.

Toate resursele folosite de aceasta aplicatie au fost construite de catre autori in CorelDraw x5
si au caracter demonstrativ, fara implicatii financiare, liber de folosit in scop educativ.

Toti algoritmii din aceasta aplicatie sunt construiti de catre aurtori, modul de interpretare a
datelor este original, codificarea deplasarii si codificarea obiectelor sunt concepte proprii.

Project Manager : Laslo Eugen
Senior Programmer : Merce Larisa
Graphics : Corel Draw x5 Vectorial Geometry Laboratories - 2011 Laslo Eugen
Level Designer : Merce Larisa
First Tester :Laslo Elisa (4 ani)

Multumim d-lui Conf. univ Caus V. Aurel
pentru sprijinul acordat in dezvoltarea
acestui proiect.


39

4.4. Nivelul demonstrativ 0

Fig. 4.4. Nivelul 0
Acesta este primul nivel al jocului i are ca scop familiarizarea utilizatorilor cu
obiectivele jocului:
Se pot identifica urmtoarele informaii disponibile utilizatorilor:
1. Punctajul acordat ca bonus pentru o trecere rapid peste nivelul curent. Cu ct trece mai
mult timpul de joc, punctajul de bonus se diminueaz. n momentul cnd utilizatorul
ajunge la poart (zona 7) n punctajul total (zona 3) se adaug valoarea n puncte a acestui
bonus.
2. Valoarea Life a utilizatorului. Cnd aceast valoare ajunge la 0 jocul se consider pierdut.
3. Zona de afiare a punctajului yotal curent al utilizatorului. Orice aciune din joc ntr-o
form sau alta are repercursiuni n schimbarea valorii acestei variabile. Nu exist valori
negative.
4. Primul obiect monstru cu urmtoarele informaii:

name : FirstDefender
N:30:5:S:60:5:N:30:5:W:10:10:E:20:10:W:10:10
level : 0
location : 250, 190
image sets:
monster01_t00,monster01_t01,monster01_t02,monster01_t03,monster01_t04,monster01
_t05,monster01_t06,monster01_t07,monster01_t08
damage : 4
relativeRange : 96
endm

5. Obiectul gestionat de utilizator.

40

6. Obiectele de tip diamond colectabile pentru creterea punctajului
7. Obiectul poart de trecere la nivelul urmtor
8. Marginea zonei de joc (se poate urmrii n fiierul urmtor construcia la nivel de
matrice a acestui nivel). Semnificaia valorilor se poate gsi n paragraful 2.2
9. Controalele mouse disponibile utilizatorului pentru controlul jocului.
4.5. Fiierele resurs pentru crearea unui nivel:

Fig. 4.5. Fiierele text resurse

1. Minit+nivel_dorit + .txt : fiierul resurs cu elementele matricii. Pentru nivelul 0
arat ca i n desfurarea urmtoare:

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000288800000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000888800000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000888800000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000088000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000

41

0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000111110000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000288800000000000100000000000000000000000000000000
0001
100000000000000000000000000000001111111110000000888800000001111111110000000000000000000000000000
0001
100000000000000000000000000000000000000010000000888800000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000088000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
111111111111111111111111111111111111111110000000000000000001111111111111111111111111111111111111
1111
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

42

0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043330
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300003
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300003
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300003
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033330
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001
111111111111111111111111111111111111111110000000000000000001111111111111111111111111111111111111
1111
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000

43

0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000000010000000799990000001000000000000000000000000000000000000
0001
100000000000000000000000000000001111111110000000999990000001111111110000000000000000000000000000
0001
100000000000000000000000000000000000000010000000099900000001000000000000000000000000000000000000
0001
100000000000000000000000000000000000111110000000009000000001111100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000799990000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000999990000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000099900000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000009000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
100000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000
0001
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111

2. Extra+nivel_dorit + .txt : fiierul resurs ce conine punctajul bonus.
3. Lvl+nivel_dorit + .txt: de informaii cu privire la nivelul curent: Pentru nivelul 0:

Level 0: Begginning your Journey

Press the arrow buttons to move around
Avoid walls (dark gray blocks)

44

Get hearts to score life and points
Exit to the eastern gate

4.6. Nivelul demonstrativ 1


Fig. 4.6. Nivelul demonstrativ 1

Elementele noi introduse de acest nivel sunt:
1.) Obiectul monstru personalizat (conceptul de BOSS aprut frecvent n astfel de jocuri).
Poate trece peste zonele nchise, se deplaseaz aleator, foarte puternic.
2.) Obiectul defender03 cu urmtoarele caliti:

name : defender01
N:25:4:S:50:4:N:25:4
level : 1
location : 150, 125
image sets:
monster04_t00,monster04_t01,monster04_t02,monster04_t03,monster04_t
04
damage : 2
relativeRange : 96
endm

3.) Obiectul defender 04:

45


name : defender02
N:100:1:S:200:1:N:100:1
level : 1
location : 400, 125
image sets:
monster03_t00,monster03_t01,monster03_t02,monster03_t03,monster03_t
04,monster03_t05
damage : 2
relativeRange : 96
endm

4.) Zonele din matric afectate de foc
5.) Mine cu explozie aleatoare
Matricea corespunzatoare nivelului demonstrativ 1 se gaseste in fisierul resurse, la fel
ca si pentru celelalte doua nivele.
4.7. Nivelul demonstrativ 2

Fig. 4.7. Nivelul demonstrativ 1

Elementele noi introduse de acest nivel sunt:
1.) Obiectul monstru personalizat,4xPacMan;

46

5. Bibliografie :
[1] Laslo Eugen, Ionescu V.S, anul 2010 , Algoritmica C++, editura Matrix-Romania,
Bucuresti ;
[2] MSDN - http://en.wikipedia.org/wiki/MSDN
[3] Jeffrey Richter, anul 2009, Microsoft .NET Framework, editura Teora, Bucuresti
[4] Ellen Hatton , Alexandre Santos Lobao , David Weller , anul 2004, Beginning .NET
Game Programming with C#(Beginners Beginning Guides) , editura Apress
[5] Gary David Bouton, anul 2010, CorelDRAW X5 The Official Guide, editura
CorelPress