MIDPS_1
-
Upload
sergiu-panico -
Category
Documents
-
view
217 -
download
0
Transcript of MIDPS_1
-
7/27/2019 MIDPS_1
1/10
Ministerul Educa iei al Republicii Moldova
Universitatea Tehnic a Moldovei
Facultatea Calculatoare, Informatic i Microelectronic
Catedra Automatic i Tehnologii Informa ionale
RAPORT
Disciplina: Medii interactive de dezvoltare a produselor soft
Lucrare de laborator Nr. 1 (a, b, c)
Tema: Componentele mediului integrat C++ Builder. Func ii pentru gestionarea timpului ale mediului C++ Builder. Func ii pentru gestionarea
resurselor grafice ale mediului C++ Builder
A efectuat :
A verificat: lector universitar Boleac Ruslan
-
7/27/2019 MIDPS_1
2/10
Chi inu 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 Considera ii 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.) Ac iunile utilizatorului
sunt efectuate asupra unor obiecte care sunt caracterizate prin anumite propriet i (culoare, mrime
etc.) Evident c nu orice obiect poate rspunde la orice eveniment i difer de altele prin diferite
propriet i.
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).
Interfa a Borland C++ Builder con ine:
Bara de comenzi rapide Butonul run Paleta de componente
2
-
7/27/2019 MIDPS_1
3/10
Inspectorul de obiecte Formular
Executnd click pe butonul run aflat pe bara de comenzi rapide sau F9 se comand compilarea i
execu ia programului.
Obiectele (componentele) aplica iei se adaug n formulare. O aplica ie poate con ine unul sau
mai multe formulare. Colec ia de componente se gse te pe Paleta de componente.
Un obiect are anumite propriet i, 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
-
7/27/2019 MIDPS_1
4/10
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 aplica iei
La elaborarea aplica iei am studiat componentele de baz ale mediului C++ Builder, propriet i,
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 afi area
scorului i una pentru afi area datei i a timpului, o component TCSpinEdit pentru modificarea
vitezei arpelui, o component TDrawGrid pentru afi area spa iului de joc i una de tip TPaintBox
amplasat pe o component TPanel pentru desenarea unei anima ii. Pentru ob inerea datei i a timpului
din sistem am utilizat func iile getdate i gettime. O component TTimer am utilizat pentru modificarea strii jocului (mi carea arpelui), una pentru actualizarea datei i a timpului afi at i una
pentru realizarea anima iei 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 serve te pentru reprezentarea direc iei n care se deplaseaz arpele , a doua
pentru reprezentarea con inutului unui ptr ele de pe suprafa a de joc, iar structura pentru
memorarea unei pozi ii pe suprafa a 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 con inut. n
constanta nmax este pstrat mrimea ariei de joc. n matricea harta sunt pstrate con inuturile
celulelor din joc. n tabelul sarpe sunt pstrarte pozi iile pr ilor componente ale arpelui . n
variabila lungime e pstrat lungimea (numrul de ptr ele) ale arpelui , iar n scor scorul
4
-
7/27/2019 MIDPS_1
5/10
juctorului. Variabila dir pstreaz direc ia n care are loc deplasarea, iar n dirnou poate fi o alt
direc ie n cazul n care a fost apsat o sgeat de pe tastatur i direc ia va fi schimbat la urmtoarea
mi care. Variabila boolean in_joc va avea valoarea true dac jocul a nceput i nc nu s-a terminat, i
false n caz contrar.
Func ia redeseneaza este destinat pentru redesenarea spa iului de joc, n concordan cu valorile
din matricea harta.
void redeseneaza() {
for(int i=0; iDrawGrid1->CellRect(i, j),
TGridDrawState());
}
Func ia 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 = (string("Scor: ") + string(itoa(scor, nr,
10))).c_str();
}
Func ia reconstruiesteHarta restabile te valorile din matricea harta, utiliznd informa ia despre
pozi iile pr ilor arpelui . Schimbarea nu este reflectat pe spa iul de joc.
void reconstruiesteHarta() {
for(int i=0; i
-
7/27/2019 MIDPS_1
6/10
}
harta[l][c] = MAR;
}
Func ia init.
void init() {
for(int i=0; iInterval = 350 - 30*Form1->CSpinEdit1->Value;
Form1->Timer1->Enabled = true;
actualizeazaScor(0);
in_joc = true;
}
Func ia 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();
}
Func ia 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);
}
Func ia ce se apeleaz cnd are loc evenimentul de creare a formei.
void __fastcall TForm1::FormCreate(TObject *Sender)
6
-
7/27/2019 MIDPS_1
7/10
{
srand(time(NULL));
}
Func ia ce prelucreaz evenimentul asociat Timer-ului 1, utilizat pentru schimbarea la intervale
regulate de timp a pozi iei 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
-
7/27/2019 MIDPS_1
8/10
{
init();
DrawGrid1->SetFocus();
}
Func ia ce prelucreaz evenimentul de ac ionare a butonului Pauza/continuare.
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Pauza();
}
Func ia ce prelucreaz evenimentul de schimbare a vitezei .
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
Timer1->Interval = 350 - 30*CSpinEdit1->Value;DrawGrid1->SetFocus();
}
Func ia ce prelucreaz evenimentul de apsare a unei tasta atunci cnd focusul este de inut 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
-
7/27/2019 MIDPS_1
9/10
}
Func ia ce actualizeaz timpul afi at, 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;
}
Func ia Timer asociat evenimentul Timer al componentei Timer 3, care actualizeaz anima ia
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; xWidth-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;
}
9
-
7/27/2019 MIDPS_1
10/10
Concluzii
La aceast lucrare de laborator am studiat componentele de baz ale mediului C++ Builder,
propriet i, metode i evenimente. Am elaborat o aplica ie care utilizeaz no iunile, componentele
studiate. Programarea vizual n C++ Builder ajut la crearea rapid a aplica iilor cu o interfa grafic
cu utilizator prietenoas.
10