MIDPS_1

download MIDPS_1

of 10

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