Sunteți pe pagina 1din 10

Ministerul Educaiei al Republicii Moldova Universitatea Tehnic a Moldovei Facultatea Calculatoare, Informatic i Microelectronic Catedra Automatic i Tehnologii Informaionale

RAPORT

Disciplina: Medii interactive de dezvoltare a produselor soft Lucrare de laborator Nr. 1 (a, b, c) Tema: Componentele mediului integrat C++ Builder. Funcii pentru gestionarea timpului ale mediului C++ Builder. Funcii pentru gestionarea resurselor grafice ale mediului C++ Builder

A efectuat : A verificat: lector universitar Boleac Ruslan

Chiinu 2013
1 Obiectivele lucrrii 1. nsuirea modului de utilizare a celor mai importante componente ale mediului integrat C++ Builder. 2. Realizarea unui program simplu care utilizeaz componente de tip TButton, TEdit, Tlabel, RadioButton etc. 3. nsuirea modului de utilizare a componentei VCL TTimer. 4. nsuirea modului de utilizare a funciilor de lucru cu timpul sistem. 5. Realizarea unor aplicaii de gestionare a resursei timp. 6. nsuirea modului de utilizare a componentelor VCL TPaintBox i TPanel. 7. nsuirea modului de utilizare a principalelor funcii grafice ale mediului C++ Builder. 8. Realizarea unor elemente pentru afiarea grafic a informaiei. 2 Consideraii teoretice Spre deosebire de Borland C++ clasic, n Borland C++ Builder se scriu programe sub Windows, folosindu-se anumite componente specifice Windows-ului. Programele astfel concepute trebuie s rspund anumitor evenimente (apsarea unei taste, un click de mouse etc.) Aciunile utilizatorului sunt efectuate asupra unor obiecte care sunt caracterizate prin anumite proprieti (culoare, mrime etc.) Evident c nu orice obiect poate rspunde la orice eveniment i difer de altele prin diferite proprieti. Programele sub windows utilizeaz biblioteci speciale de subprograme numite DLL-uri (dynamic-link library). Acestea includ elementele de interfa utilizate (subprograme care se apeleaz de fiecare dat cnd este nevoie de ele). Interfaa Borland C++ Builder conine:
Bara de comenzi rapide Butonul run Paleta de componente

Inspectorul de obiecte

Formular

Executnd click pe butonul run aflat pe bara de comenzi rapide sau F9 se comand compilarea i execuia programului. Obiectele (componentele) aplicaiei se adaug n formulare. O aplicaie poate conine unul sau mai multe formulare. Colecia de componente se gsete pe Paleta de componente. Un obiect are anumite proprieti, valorile acestora putnd fi stabilite utiliznd inspectorul de obiecte. De exemplu, pentru formular (care este i el un obiect) se poate stabili textul din bara de titlu utiliznd proprietatea Caption. Propieti, metode, evenimente Dezvoltarea rapid a aplicaiilor nseamn suport pentru propietile, metodele i evenimentele obiectelor (PME). Propietile permit setarea uoar a caracteristicilor componentelor. Metodele execut aciuni asupra obiectelor. Evenimentele permit ca aplicaia s rspund la mesajele Windows, sau la schimbri de stare a obiectelor. Folosirea modelului PME furnizeaz un robust i intuitiv mediu de dezvoltare pentru aplicaiile Windows. Utilizarea componentei TTimer Componenta TTimer se gsete n Component Palette (pagina System). Obiectul de acest tip permite execuia n cadrul aplicaiei a unor funcii la intervale specificate. n context Windows obiectul TTimer lanseaz ctre aplicaie mesaje la intervale prestabilite. Gestionarea timpului Prototipurile funciilor de gestionare a timpului sistem se gsesc in header-ele dos.h, time.h , vcl\sysdefs.h. Precizrile urmtoare se refer la header-ul dos.h., n care se gsesc prototipurile urmatoarelor funcii ce permit gestionarea resursei timp: void getdate(struct date *datep) void gettime(struct time *timep) void setdate(struct date *datep) void settime(struct time *timep) n care: *datep si *timep sunt pointeri la structurile struct date si struct time. Utilizarea componentei TPaintBox Componenta TPaintBox se gsete n Component Palette (pagina System). Obiectul de acest tip furnizeaz o component TCanvas care permite desenarea n interiorul unui dreptunghi, prevenind depirea marginilor acestuia.
3

Utilizarea componentei TPanel Componenta TPanel se gsete n Component Palette (pagina Standard) . Obiectul de acest tip poate fi utilizat pentru desenare dac pe el se amplaseaz o component TPaintBox. 3 Elaborarea aplicaiei La elaborarea aplicaiei am studiat componentele de baz ale mediului C++ Builder, proprieti, metode i evenimente. Am elaborat un joc n care am utilizat 2 componente de tip TButton: una pentru nceperea unui joc nou i alta pentru pauz. Am utilizat o component TStaticText pentru afiarea scorului i una pentru afiarea datei i a timpului, o component TCSpinEdit pentru modificarea vitezei arpelui, o component TDrawGrid pentru afiarea spaiului de joc i una de tip TPaintBox amplasat pe o component TPanel pentru desenarea unei animaii. Pentru obinerea datei i a timpului din sistem am utilizat funciile getdate i gettime. O component TTimer am utilizat pentru modificarea strii jocului (micarea arpelui), una pentru actualizarea datei i a timpului afiat i una pentru realizarea animaiei din partea de jos a formei. n program am creat urmtoarele enumerri i structuri:
enum Directie { SUS, JOS, STANGA, DREAPTA }; enum Continut { LIBER, CORP, CAP, MAR }; struct Celula { int lin, col; };

Prima enumerare servete pentru reprezentarea direciei n care se deplaseaz arpele, a doua pentru reprezentarea coninutului unui ptrele de pe suprafaa de joc, iar structura pentru memorarea unei poziii pe suprafaa de joc (linie i coloan). Constantele i variabilele globale sunt urmtoarele:
const TColor culoare[4] = {TColor(0x00000000), TColor(0x0000FF00), TColor(0x00FF0000), TColor(0x000000FF)}; const int nmax = 20; Continut harta[nmax][nmax]; Celula sarpe[nmax*nmax]; int lungime, scor; Directie dir, dir_noua; bool in_joc;

n tabelul culoare se pstreaz culorile ce trebuie utilizat pentru diferite tipuri de coninut. n constanta nmax este pstrat mrimea ariei de joc. n matricea harta sunt pstrate coninuturile celulelor din joc. n tabelul sarpe sunt pstrarte poziiile prilor componente ale arpelui. n variabila lungime e pstrat lungimea (numrul de ptrele) ale arpelui, iar n scor scorul
4

juctorului. Variabila dir pstreaz direcia n care are loc deplasarea, iar n dirnou poate fi o alt direcie n cazul n care a fost apsat o sgeat de pe tastatur i direcia va fi schimbat la urmtoarea micare. Variabila boolean in_joc va avea valoarea true dac jocul a nceput i nc nu s-a terminat, i false n caz contrar. Funcia redeseneaza este destinat pentru redesenarea spaiului de joc, n concordan cu valorile din matricea harta.
void redeseneaza() { for(int i=0; i<nmax; i++) for(int j=0; j<nmax; j++) Form1->DrawGrid1DrawCell(Form1, i, j, Form1->DrawGrid1->CellRect(i, j), TGridDrawState()); }

Funcia actualizeazaScor face ceea ce spune i denumirea: schimb scorul i reflect schimbarea aceasta pe fereastr.
void actualizeazaScor(int scor_nou) { char nr[6]; scor = scor_nou; Form1->StaticText1->Caption 10))).c_str(); } = (string("Scor: ") + string(itoa(scor, nr,

Funcia reconstruiesteHarta restabilete valorile din matricea harta, utiliznd informaia despre poziiile prilor arpelui. Schimbarea nu este reflectat pe spaiul de joc.
void reconstruiesteHarta() { for(int i=0; i<nmax; i++) for(int j=0; j<nmax; j++) if(harta[i][j] != MAR) harta[i][j] = LIBER; for(int i=0; i<lungime-1; i++) harta[sarpe[i].lin][sarpe[i].col] = CORP; harta[sarpe[lungime-1].lin][sarpe[lungime-1].col] = CAP; }

Funcia amplaseazaMar alege o poziie aleatoare din cele libere i amplaseaz mrul acolo.
void amplaseazaMar() { int poz = rand() % (nmax*nmax-lungime)+1, l = 0, c = -1; while(poz > 0) { if(c == nmax-1) ++l, c = 0; else ++c; if(harta[l][c] == LIBER) --poz; 5

} harta[l][c] = MAR; }

Funcia init.
void init() { for(int i=0; i<nmax; i++) for(int j=0; j<nmax; j++) harta[i][j] = LIBER; lungime = 2; sarpe[0].lin = 0; sarpe[0].col = 0; sarpe[1].lin = 1; sarpe[1].col = 0; dir = DREAPTA; dir_noua = dir; reconstruiesteHarta(); amplaseazaMar(); redeseneaza(); Form1->Timer1->Interval = 350 - 30*Form1->CSpinEdit1->Value; Form1->Timer1->Enabled = true; actualizeazaScor(0); in_joc = true; }

Funcia Pauza.
void Pauza() { if(in_joc) Form1->Timer1->Enabled = !Form1->Timer1->Enabled; if(Form1->Timer1->Enabled) Form1->Button2->Caption = "Pauza"; else Form1->Button2->Caption = "Continua"; Form1->DrawGrid1->SetFocus(); }

Funcia ce prelucreaz redesenarea unei celule a DrawGrid-ului.


void __fastcall TForm1::DrawGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { DrawGrid1->Canvas->Brush->Color = culoare[harta[ACol][ARow]]; DrawGrid1->Canvas->FillRect(Rect); }

Funcia ce se apeleaz cnd are loc evenimentul de creare a formei.


void __fastcall TForm1::FormCreate(TObject *Sender) 6

{ srand(time(NULL)); }

Funcia ce prelucreaz evenimentul asociat Timer-ului 1, utilizat pentru schimbarea la intervale regulate de timp a poziiei n joc.
void __fastcall TForm1::Timer1Timer(TObject *Sender) { int l = sarpe[lungime-1].lin, c = sarpe[lungime-1].col; dir = dir_noua; switch(dir) { case STANGA: l = (nmax + l - 1) % nmax; break; case DREAPTA: l = (l + 1) % nmax; break; case SUS: c = (nmax + c - 1) % nmax; break; case JOS: c = (c + 1) % nmax; } switch(harta[l][c]) { case MAR: sarpe[lungime].lin = l; sarpe[lungime++].col = c; amplaseazaMar(); actualizeazaScor(scor + 10*CSpinEdit1->Value); PlaySound("mar.wav",0,SND_ASYNC); break; case CORP: PlaySound("gameover.wav", 0, SND_ASYNC); Timer1->Enabled = false; ShowMessage("Jocul s-a sfarsit..."); redeseneaza(); in_joc = false; break; case LIBER: for(int i=0; i<lungime-1; i++) sarpe[i] = sarpe[i+1]; sarpe[lungime-1].lin = l; sarpe[lungime-1].col = c; } reconstruiesteHarta(); redeseneaza(); }

Funcia ce prelucreaz evenimentul de acionare a butonului Joc nou.


void __fastcall TForm1::Button1Click(TObject *Sender) 7

{ init(); DrawGrid1->SetFocus(); }

Funcia ce prelucreaz evenimentul de acionare a butonului Pauza/continuare.


void __fastcall TForm1::Button2Click(TObject *Sender) { Pauza(); }

Funcia ce prelucreaz evenimentul de schimbare a vitezei.


void __fastcall TForm1::CSpinEdit1Change(TObject *Sender) { Timer1->Interval = 350 - 30*CSpinEdit1->Value; DrawGrid1->SetFocus(); }

Funcia ce prelucreaz evenimentul de apsare a unei tasta atunci cnd focusul este deinut de componenta DrawGrid.
void __fastcall TForm1::DrawGrid1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { switch(Key) { case VK_UP: if(dir != JOS) dir_noua = SUS; break; case VK_DOWN: if(dir != SUS) dir_noua = JOS; break; case VK_LEFT: if(dir != DREAPTA) dir_noua = STANGA; break; case VK_RIGHT: if(dir != STANGA) dir_noua = DREAPTA; break; case ' ': if(in_joc) Pauza(); else init(); break; case 'Z': if(CSpinEdit1->Value > CSpinEdit1->MinValue) { --CSpinEdit1->Value; } break; case 'X': if(CSpinEdit1->Value < CSpinEdit1->MaxValue) { ++CSpinEdit1->Value; } break; } 8

Funcia ce actualizeaz timpul afiat, este asociat cu evenimentul Timer al componentei Timer1.
void __fastcall TForm1::Timer2Timer(TObject *Sender) { static struct time timp; static struct date data; static char t[20]; getdate(&data); gettime(&timp); sprintf(t, "%02d.%02d.%4d %02d:%02d:%02d", data.da_day, data.da_mon, data.da_year, timp.ti_hour, timp.ti_min, timp.ti_sec); StaticText2->Caption = t; Timer2->Interval = 1000; }

Funcia Timer asociat evenimentul Timer al componentei Timer 3, care actualizeaz animaia din partea de jos a ferestrei.
void __fastcall TForm1::Timer3Timer(TObject *Sender) { static int y, k; static float phi = 0; static const char name[] = "MIHAI LAZARI"; static TRect r(0, 0, PaintBox1->Width-1, PaintBox1->Height-1); PaintBox1->Repaint(); PaintBox1->Canvas->Pen->Color = clBlue; PaintBox1->Canvas->Brush->Color = clYellow; PaintBox1->Canvas->Brush->Style = bsSolid; PaintBox1->Canvas->FillRect(r); k=0; for(int x = 10; x<=PaintBox1->Width-10; x+=10) { y = (int)(PaintBox1->Height/2 + (PaintBox1->Height/2-5)*sin(x/50.0 + phi)); if((x/10)%5 != 2 || name[k] == '\0') { PaintBox1->Canvas->Ellipse(x-2, y-2, x+2, y+2); } else { PaintBox1->Canvas->TextOut(x-2, y-6, name[k++]); } } phi += 0.2; }

Concluzii La aceast lucrare de laborator am studiat componentele de baz ale mediului C++ Builder, proprieti, metode i evenimente. Am elaborat o aplicaie care utilizeaz noiunile, componentele studiate. Programarea vizual n C++ Builder ajut la crearea rapid a aplicaiilor cu o interfa grafic cu utilizator prietenoas.

10