creatori de viitor

52
CREATORI DE VIITOR 1 Clasa a 10 - a A Liceul Teoretic “Mihai Eminescu”

Upload: malai-victor

Post on 28-Dec-2015

38 views

Category:

Documents


0 download

DESCRIPTION

Creatori

TRANSCRIPT

Page 1: Creatori de viitor

CREATORI DE VIITOR

1Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 2: Creatori de viitor

CUPRINS:

1. Membrii echipei

2. Motivaţia

3. Manual de utilizare

4. Cod de programare

a. Cod de programare al jocului X-O (C++)

b. Cod de programare al coderului (C++)

5. Publicitate

a. Video de prezentare

b. Afişe şi fluturaşi

6. Bibliografia

2Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 3: Creatori de viitor

1. MEMBRII ECHIPEI:

Both Valerian - Jurnal zilnic de activitate şi comunicaţii

Chiorean Paul - Emblemă

Deac Melinda - Tehno-redactare şi prezentare

Gurău Victor - Pagini HTML

Jucan Dragoş - Imagine Gif

Marian Raul - Programare

Mălai Victor - Pagini HTML

Onacă Daniela - Tehno-redactare şi prezentare

Pop Ionuţ - Videoclip promovare

Vlad Ovidiu - Publisher

3Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 4: Creatori de viitor

2. MOTIVAŢIE:

Echipa ‘’Creatori de Viitor’’ se ocupă cu realizarea unui joc X-O în limbaj de programare C++ care are scopul de a ocupa timpul persoanelor plictisite.

Echipa noastră a realizat şi un program pentru codarea şi decodarea limbajului, foarte uşor de utilizat de către orice persoană cu cunoştinţe minime în folosirea unui computer.

Pentru a prezenta şi promova proiectul nostru am realizat un videoclip de promovare şi pagini HTML care conţin informaţiile generale, cum ar fi numele celor care au participat la construcţia proiectului cât şi etapele realizării acestuia. În acelaşi timp puteţi găsi cărţile de vizită al fiecărui membru al echipei.

4Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 5: Creatori de viitor

3. MANUAL DE UTILIZARE:

Pentru a putea utiliza jocul X-O trebuie doar să accesaţi pagina noastră HTML şi să descărcaţi arhiva care conţine programul. Acesta se deschide apăsând dublu click pe “Project1”.

Dacă doriţi să schimbaţi modul în care vreţi să jucaţi, puteţi face acest lucru din bara de meniu ‘’Options‘’, unde aveţi 2 opţiuni : ‘Player vs Player’ sau ‘Player vs Computer’. Totodată puteţi să schimbaţi şi nivelul de dificultate al jocului, din aceeaşi bară de meniu.

Jocul conţine şi o opţiune ‘’Themes’’ care vă pune la dispoziţie 5 teme şi anume: foc, apă, fulger, gheaţă

Pentru a putea utiliza programul de codare-decodare, trebuie mai întâi să îl descărcaţi de pe site-ul nostru ‘’www.CreatoriDeViitor.ro’’. Apoi să introduceţi orice cuvânt/propoziţie în documentul “message.txt” urmând ca programul să îl codeze.

5Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 6: Creatori de viitor

4. Cod de programare:

a. Cod de programare al jocului X-O#include <windows.h>#include <time.h>int i, j, k, // variabile pt for-uri r, // variabila random pt calculator o, // contor pt calculator x, y, // delimitarea patratelor de pe tabla l1, l2, l3, l4; // pozitile liniei de castigareint xImg, yImg; // coordonatele afisarii imaginiiint s[9]; // vectorul pentru fiecare patrat: 0 = gol, 1 = X, 2 = Oint l[9]; // vectorul pentru linia de castig: 1,2,3 = verticala, 4,5,6 = orizontala, 7,8 = diagonalaint win = 0; // contorul pentru sfarsit: 0 = continuare, 1 = X castiga, 2 = O castiga, 3 = remizabool X = true; // contorul pentru X sau O: true = X, false = Ochar diff = 'E'; // contorul pentru dificultate: E = usor, M = mediu, H = greuint computer = 0; // contorul pt calculator: 0 = 2 jucatori, 1 = jucator contra calculatorint xPos, yPos; // coordonatele click-ului si aoe calculatorului ( coordonatele pentru patrate )int Theme = 1; // variabila pt teme: 1 = foc, 2 = apa, 3 = fum, 4 = fulger, 5 = gheata

void Dcl() // functia pentru resetarea jocului{ X = true; // X incepe for ( i = 1; i <= 9; i++ ) { s[i] = 0; // stergerea X-urilor si O-urilor de pe tabla l[i] = 0; // resetarea liniei castigului }}

6Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 7: Creatori de viitor

void WinChk() // functia de verificare pt sfarsitul jocului{ for ( i = 1; i <= 9; i++ ) // REMIZA { if ( s[i] == 0 ) // verificarea fiecarui patrat { break; // daca se gaseste un patrat gol se continua } if ( i == 9 ) // daca nu se gaseste niciun patrat gol { win = 3; // jocul se termina cu remiza } } for ( i = 1; i <= 9; i += 3 ) // ORIZONTALA { if ( s[i] == s[i+1] && s[i+1] == s[i+2] && s[i+2] == 1 ) // verificarea liniilor pt 3 X-uri pe orizontala { l[(i+2)/3] = 1; // se deseneaza linia pt castig win = 1; // X-ul castiga break; // opreste verificarea in continuare } else if ( s[i] == s[i+1] && s[i+1] == s[i+2] && s[i+2] == 2 ) // verificarea liniilor pt 3 O-uri pe orizontala { l[(i+2)/3] = 1; // se deseneaza linia pt castig win = 2; // O-ul castiga break; // opreste verificarea in continuare } } for ( i = 1; i <= 3; i++ ) // VERTICALA { if ( s[i] == s[i+3] && s[i+3] == s[i+6] && s[i+6] == 1 ) // verificarea liniilor pt 3 X-uri pe verticala { l[i+3] = 1; // se deseneaza linia pt castig win = 1; // X-ul castiga

7Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 8: Creatori de viitor

break; // opreste verificarea in continuare } else if ( s[i] == s[i+3] && s[i+3] == s[i+6] && s[i+6] == 2 ) // verificarea liniilor pt 3 O-uri pe verticala { l[i+3] = 2; // se deseneaza linia pt castig win = 2; // O-ul castiga break; // opreste verificarea in continuare } } for ( i = 1; i <= 3; i += 2 ) // DIAGONALA { if ( s[i] == s[5] && s[5] == s[10-i] && s[i] == 1 ) // verificarea liniilor pt 3 X-uri pe diagonala { l[(i+13)/2] = 1; // se deseneaza linia pt castig win = 1; // X-ul castiga } if ( s[i] == s[5] && s[5] == s[10-i] && s[i] == 2 ) // verificarea liniilor pt 3 X-uri pe diagonala { l[(i+13)/2] = 2; // se deseneaza linia pt castig win = 2; // X-ul castiga } }}void Comp( int &xPos, int &yPos, HWND hwnd ) // calculatorul ( functia de calculare a O-urilor ){ if ( diff == 'E' ) // verificarea dificultatii: E = usor { srand (time(NULL)); // resetarea timpului pt functia random r = rand() % 9 + 1; // generarea unui numar la intamplare while ( s[r] != 0 ) // daca patratul care corespunde numarului generat este ocupat {

8Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 9: Creatori de viitor

r = rand() % 9 + 1; // se genereaza alt numar la intamplare pana cand patratul va fi liber } xPos = 100 * ( ( r - 1 ) % 3 ) + 50; // calcularea coordonatei X pentru punerea O-ului yPos = 100 * ( ( r - 1 ) / 3 ) + 50; // calcularea coordonatei Y pentru punerea O-ului } else if ( diff == 'M' ) // verificarea dificultatii: M = mediu { srand (time(NULL)); // resetarea timpului pt functia random r = rand() % 9 + 1; // generarea unui numar la intamplare while ( s[r] != 0 ) // daca patratul care corespunde numarului generat este ocupat { r = rand() % 9 + 1; // se genereaza alt numar la intamplare pana cand patratul va fi liber } xPos = 100 * ( ( r - 1 ) % 3 ) + 50; // calcularea coordonatei X pentru punerea O-ului yPos = 100 * ( ( r - 1 ) / 3 ) + 50; // calcularea coordonatei Y pentru punerea O-ului for ( i = 1; i <= 2; i++ ) // verificarea pt X-uri sau O-uri: 1 = X, 2 = O { for ( j = 1; j <= 9; j += 3 ) // ORIZONTALA { if ( ( ( s[j] == s[j+1] ) && ( s[j] == i ) ) || ( ( s[j+1] == s[j+2] ) && ( s[j+1] == i ) ) || ( ( s[j] == s[j+2] ) && ( s[j] == i ) ) ) // verificarea daca 2 X-uri sau O-uri { // se afla pe orizontala for ( k = j; k <= j + 2; k++ ) // verificarea fiecarui patrat { if ( s[k] == 0 ) // cautarea patratului liber { xPos = 100 * ( ( k - 1 ) % 3 ) + 50; // calcularea coordonatei X pentru punerea O-ului

9Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 10: Creatori de viitor

yPos = 100 * ( ( k - 1 ) / 3 ) + 50; // calcularea coordonatei Y pentru punerea O-ului } } } } for ( j = 1; j <= 3; j++ ) // VERTICALA { if ( ( ( s[j] == s[j+3] ) && ( s[j] == i ) ) || ( ( s[j+3] == s[j+6] ) && ( s[j+3] == i ) ) || ( ( s[j] == s[j+6] ) && ( s[j] == i ) ) ) // verificarea daca 2 X-uri sau O-uri { // se afla pe verticala for ( k = j; k <= j + 6; k += 3 ) // verificarea fiecarui patrat { if ( s[k] == 0 ) // cautarea patratului liber { xPos = 100 * ( ( k - 1 ) % 3 ) + 50; // calcularea coordonatei X pentru punerea O-ului yPos = 100 * ( ( k - 1 ) / 3 ) + 50; // calcularea coordonatei Y pentru punerea O-ului } } } } for ( j = 1; j <= 3; j += 2 ) // DIAGONALA { if ( ( ( s[j] == s[5] ) && ( s[j] == i ) ) || ( ( s[5] == s[10-j] ) && ( s[5] == i ) ) || ( ( s[j] == s[10-j] ) && ( s[j] == i ) ) ) // verificarea daca 2 X-uri sau O-uri { // se afla pe diagonala for ( k = j; k <= 10 - j; k += -j + 5 ) // verificarea fiecarui patrat { if ( s[k] == 0 ) // cautarea patratului liber { xPos = 100 * ( ( k - 1 ) % 3 ) + 50; // calcularea coordonatei X pentru punerea O-ului

10Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 11: Creatori de viitor

yPos = 100 * ( ( k - 1 ) / 3 ) + 50; // calcularea coordonatei Y pentru punerea O-ului } } } } } } else if ( diff = 'H' ) // verificarea dificultatii: H = greu { if ( s[5] == 0 ) // verificarea daca patratul din mijloc este ocupat { xPos = 150; // daca patratul din mijloc este liber yPos = 150; // atunci se va pune O in el } else // daca patratul din mijloc nu este liber... { srand (time(NULL)); // resetarea timpului pt functia random do { r = rand() % 4 + 1; // se genereaza un numar la intamplare pana cand patratul va fi liber if ( r <= 2 ) // se verifica in ce colt se va pune O-ul { r = r * 2 - 1; // se calculeaza colturile in functie de numarul generat } else { r = r * 2 + 1; // se calculeaza colturile in functie de numarul generat } if ( s[1] != 0 && s[3] != 0 && s[7] != 0 && s[9] != 0 ) // daca toate colturile sunt pline { r = rand() % 9 + 1; // se genereaza un numar la intamplare pana cand patratul va fi liber }

11Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 12: Creatori de viitor

} while ( s[r] != 0 ); // daca patratul care corespunde numarului generat este ocupat xPos = 100 * ( ( r - 1 ) % 3 ) + 50; // calcularea coordonatei X pentru punerea O-ului yPos = 100 * ( ( r - 1 ) / 3 ) + 50; // calcularea coordonatei Y pentru punerea O-ului }//##############################################################################################################################################// calcularea O-urilor astfel incat castigul sa fie imposibil if ( s[1] == s[9] && s[1] == 1 ) { xPos = 150; yPos = 250; } else if ( s[3] == s[7] && s[3] == 1 ) { xPos = 150; yPos = 250; } else if ( ( ( s[1] == s[6] && s[1] != 0 ) || ( s[9] == s[2] && s[9] != 0 ) ) && s[3] == 0 ) { xPos = 250; yPos = 50; } else if ( ( ( s[1] == s[8] && s[1] != 0 ) || ( s[9] == s[4] && s[9] != 0 ) ) && s[7] == 0 ) { xPos = 50; yPos = 250; } else if ( ( ( s[3] == s[4] && s[3] != 0 ) || ( s[7] == s[2] && s[7] != 0 ) ) && s[1] == 0 ) {

12Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 13: Creatori de viitor

xPos = 50; yPos = 50; } else if ( ( ( s[3] == s[8] && s[3] != 0 ) || ( s[7] == s[6] && s[7] != 0 ) ) && s[9] == 0 ) { xPos = 250; yPos = 250; } else if ( s[2] == s[4] && s[2] != 0 && s[1] == 0 ) { xPos = 50; yPos = 50; } else if ( s[2] == s[6] && s[2] != 0 && s[3] == 0 ) { xPos = 250; yPos = 50; } else if ( s[8] == s[4] && s[8] != 0 && s[7] == 0 ) { xPos = 50; yPos = 250; } else if ( s[8] == s[6] && s[8] != 0 && s[9] == 0 ) { xPos = 250; yPos = 250; }//############################################################################################################################################## for ( i = 1; i <= 2; i++ ) // verificarea pt X-uri sau O-uri: 1 = X, 2 = O { for ( j = 1; j <= 9; j += 3 ) // ORIZONTALA {

13Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 14: Creatori de viitor

if ( ( ( s[j] == s[j+1] ) && ( s[j] == i ) ) || ( ( s[j+1] == s[j+2] ) && ( s[j+1] == i ) ) || ( ( s[j] == s[j+2] ) && ( s[j] == i ) ) ) // verificarea daca 2 X-uri sau O-uri { // se afla pe orizontala for ( k = j; k <= j + 2; k++ ) // verificarea fiecarui patrat { if ( s[k] == 0 ) // cautarea patratului liber { xPos = 100 * ( ( k - 1 ) % 3 ) + 50; // calcularea coordonatei X pentru punerea O-ului yPos = 100 * ( ( k - 1 ) / 3 ) + 50; // calcularea coordonatei Y pentru punerea O-ului } } } } for ( j = 1; j <= 3; j++ ) // VERTICALA { if ( ( ( s[j] == s[j+3] ) && ( s[j] == i ) ) || ( ( s[j+3] == s[j+6] ) && ( s[j+3] == i ) ) || ( ( s[j] == s[j+6] ) && ( s[j] == i ) ) ) // verificarea daca 2 X-uri sau O-uri { // se afla pe verticala for ( k = j; k <= j + 6; k += 3 ) // verificarea fiecarui patrat { if ( s[k] == 0 ) // cautarea patratului liber { xPos = 100 * ( ( k - 1 ) % 3 ) + 50; // calcularea coordonatei X pentru punerea O-ului yPos = 100 * ( ( k - 1 ) / 3 ) + 50; // calcularea coordonatei Y pentru punerea O-ului } } } } for ( j = 1; j <= 3; j += 2 ) // DIAGONALA {

14Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 15: Creatori de viitor

if ( ( ( s[j] == s[5] ) && ( s[j] == i ) ) || ( ( s[5] == s[10-j] ) && ( s[5] == i ) ) || ( ( s[j] == s[10-j] ) && ( s[j] == i ) ) ) // verificarea daca 2 X-uri sau O-uri { // se afla pe diagonala for ( k = j; k <= 10 - j; k += -j + 5 ) // verificarea fiecarui patrat { if ( s[k] == 0 ) // cautarea patratului liber { xPos = 100 * ( ( k - 1 ) % 3 ) + 50; // calcularea coordonatei X pentru punerea O-ului yPos = 100 * ( ( k - 1 ) / 3 ) + 50; // calcularea coordonatei Y pentru punerea O-ului } } } } } }}//###################################################################################################################################################// afisarea si pregatirea ferestrei

/* Declare Windows procedure */LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/* Make the class name into a global variable */char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)

{

15Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 16: Creatori de viitor

HWND hwnd; /* This is the handle for our window */ MSG messages; /* Here messages to the application are saved */ WNDCLASSEX wincl; /* Data structure for the windowclass */

/* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX);

/* Use default icon and mouse-pointer */ wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default color as the background of the window */ wincl.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(0,0,0));

/* Register the window class, and if it fails quit the program */ if (!RegisterClassEx (&wincl)) return 0;

/* The class is registered, let's create the program*/ hwnd = CreateWindowEx ( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Tic Tac Toe", /* Title Text */ WS_SYSMENU, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 305, /* The programs width */ 345, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */

16Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 17: Creatori de viitor

NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ );

/* Make the window visible on the screen */ ShowWindow (hwnd, nFunsterStil);

/* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); }

/* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam;}HBITMAP bitmap[100];HDC hdcSource[100];

/* This function is called by the Windows function DispatchMessage() */LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){

//###################################################################################################################################################

#define ID_NG 10 // definirea butonului de joc nou#define ID_EXIT 11 // definirea butonului de iesire#define ID_PvP 12 // definirea butonului de 2 jucatori#define ID_PvC 13 // definirea butonului de jucator contra calculator

17Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 18: Creatori de viitor

#define ID_EASY 14 // definirea butonului de dificultate usoara#define ID_MED 15 // definirea butonului de dificultate medie#define ID_HARD 16 // definirea butonului de dificultate grea#define ID_ThW 17#define ID_ThF 18#define ID_ThS 19#define ID_ThL 20#define ID_ThI 21

WNDCLASSEX wincl;HDC hdc; // declararea functiei de crearePAINTSTRUCT ps ; // declararea functiei de desenareHDC hdcMem, hMemDC; // declararea functiilor de afisare a imaginilorstatic HBITMAP bmpSource = NULL; // locatia salvarii imaginilor in memoriestatic HDC hdcSource = NULL; // locatia salvarii butoanelor si meniului in memorie switch (message) /* handle the messages */ { case WM_LBUTTONDOWN: // verificarea daca click-ul stang este apasat { for ( o = computer; o >= 0; o-- ) // numarul de X-uri si O-uri puse la apasarea unui click { // daca se joaca 2 jucatori se va afisa un X sau un O // daca se joaca impotriva calculatorului se va afisa si un X si un O ( O-ul find al calculatorului ) if ( win == 0 ) // verificarea daca jocul nu sa sfarsit { xPos = LOWORD(lParam); // gasirea coordonatei X a click-ului yPos = HIWORD(lParam); // gasirea coordonatei Y a click-ului if ( computer == 1 && X == false ) // daca se joaca contra calculatorului, el isi va calcula coordonatele X si Y { Comp( xPos, yPos, hwnd ); // apelarea functiei de calculare a coordonatelor O-urilor } for ( i = 1; i <= 9; i++ ) // parcurgerea fiecarui patrat {

18Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 19: Creatori de viitor

x = 100 * ( ( i - 1 ) % 3 ); // delimitarea patratelor in latime y = 100 * ( ( i - 1 ) / 3 ); // delimitarea patratelor in lungime if ( ( xPos >= x && xPos <= x + 100 ) && ( yPos >= y && yPos <= y + 100 ) ) // gasirea patratului in care trebuie afisat X-ul sau O-ul { if ( s[i] == 0 ) // verificarea daca patratul este gol { if ( X == true ) // verificarea daca va fi pus un X { s[i] = 1; // se pune un X X = false; // urmeaza sa fie pus un O } else if ( X == false ) // verificarea daca va fi pus un O { s[i] = 2; // se pune un O X = true; // urmeaza sa fie pus un X } WinChk(); // apelarea functiei de verificare pt sfarsitul jocului InvalidateRect(hwnd, 0, TRUE); // redesenarea jocului cu X-ul sau O-ul pus } else // daca patratul apasat nu este gol { MessageBox(hwnd, "Invalid Move!", "STOP", MB_ICONERROR ); // se va afisa o eroare o--; // evitarea ca mesajul sa apara de 2 ori } break; // oprirea parcurgerii patratelor } } } if ( win == 1 ) // daca primul jucator a castigat { int MsBox = MessageBox(hwnd, "Player 1 Won!\nPlay again ?", "Winner", MB_ICONINFORMATION | MB_YESNO ); // se afiseaza mesajul de sfarsit

19Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 20: Creatori de viitor

if ( MsBox == IDYES ) // verificarea daca butonul de joc nou a fost apasat { Dcl(); // apelarea funtiei pentru resetarea jocului InvalidateRect(hwnd, 0, TRUE); // redesennarea tablei goale } break; // evitarea continuarii jocului } else if ( win == 2 ) { int MsBox = MessageBox(hwnd, "Player 2 Won!\nPlay again ?", "Winner", MB_ICONINFORMATION | MB_YESNO ); // se afiseaza mesajul de sfarsit if ( MsBox == IDYES ) // verificarea daca butonul de joc nou a fost apasat { Dcl(); // apelarea funtiei pentru resetarea jocului InvalidateRect(hwnd, 0, TRUE); // redesennarea tablei goale } break; // evitarea continuarii jocului } else if ( win == 3 ) { int MsBox = MessageBox(hwnd, "It's a draw!\nPlay again ?", "Draw", MB_ICONINFORMATION | MB_YESNO ); // se afiseaza mesajul de sfarsit if ( MsBox == IDYES ) // verificarea daca butonul de joc nou a fost apasat { Dcl(); // apelarea funtiei pentru resetarea jocului InvalidateRect(hwnd, 0, TRUE); // redesennarea tablei goale } break; // evitarea continuarii jocului } }

break; // oprirea functiei } case WM_CREATE: // pregatirea interfatei

20Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 21: Creatori de viitor

{ Dcl(); // resetarea jocului la deschidere bitmap[1]=(HBITMAP)LoadImage(NULL,TEXT("Photos/X F.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ) HDC hdcSource1 = CreateCompatibleDC(GetDC(0)); // }=> incarcarea imaginei cu X-ul SelectObject(hdcSource1, bmpSource); // )_____ bitmap[2]=(HBITMAP)LoadImage(NULL,TEXT("Photos/O F.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ) HDC hdcSource2 = CreateCompatibleDC(GetDC(0)); // }=> incarcarea imaginei cu O-ul SelectObject(hdcSource2, bmpSource); // )_____ bitmap[3]=(HBITMAP)LoadImage(NULL,TEXT("Photos/X W.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ) HDC hdcSource3 = CreateCompatibleDC(GetDC(0)); // }=> incarcarea imaginei cu X-ul SelectObject(hdcSource3, bmpSource); // )_____ bitmap[4]=(HBITMAP)LoadImage(NULL,TEXT("Photos/O W.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ) HDC hdcSource4 = CreateCompatibleDC(GetDC(0)); // }=> incarcarea imaginei cu O-ul SelectObject(hdcSource4, bmpSource); // ) bitmap[5]=(HBITMAP)LoadImage(NULL,TEXT("Photos/X S.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ) HDC hdcSource5 = CreateCompatibleDC(GetDC(0)); // }=> incarcarea imaginei cu X-ul SelectObject(hdcSource5, bmpSource); // )_____

21Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 22: Creatori de viitor

bitmap[6]=(HBITMAP)LoadImage(NULL,TEXT("Photos/O S.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ) HDC hdcSource6 = CreateCompatibleDC(GetDC(0)); // }=> incarcarea imaginei cu O-ul SelectObject(hdcSource6, bmpSource); // ) bitmap[7]=(HBITMAP)LoadImage(NULL,TEXT("Photos/X L.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ) HDC hdcSource7 = CreateCompatibleDC(GetDC(0)); // }=> incarcarea imaginei cu X-ul SelectObject(hdcSource7, bmpSource); // )_____ bitmap[8]=(HBITMAP)LoadImage(NULL,TEXT("Photos/O L.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ) HDC hdcSource8 = CreateCompatibleDC(GetDC(0)); // }=> incarcarea imaginei cu O-ul SelectObject(hdcSource8, bmpSource); // ) bitmap[9]=(HBITMAP)LoadImage(NULL,TEXT("Photos/X I.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ) HDC hdcSource9 = CreateCompatibleDC(GetDC(0)); // }=> incarcarea imaginei cu X-ul SelectObject(hdcSource9, bmpSource); // )_____ bitmap[10]=(HBITMAP)LoadImage(NULL,TEXT("Photos/O I.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ) HDC hdcSource10 = CreateCompatibleDC(GetDC(0)); // }=> incarcarea imaginei cu O-ul SelectObject(hdcSource10, bmpSource); // ) HMENU hMenuBar = CreateMenu(); // declarea barii de meniu HMENU hFile = CreateMenu(); // declarea menuilui File HMENU hOptions = CreateMenu(); // declarea meniului Options HMENU hPvC = CreateMenu(); // declarea menuilui de jucator contra calculator

22Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 23: Creatori de viitor

HMENU hThemes = CreateMenu(); // declarea menuilui de teme

AppendMenu(hMenuBar, MF_POPUP, (UINT_PTR)hFile, "File" ); // crearea meniului File AppendMenu(hFile, MF_STRING, ID_NG, "New Game" ); // crearea butonului de joc now AppendMenu(hFile, MF_STRING, ID_EXIT, "Exit" ); // crearea butonului de iesire

AppendMenu(hMenuBar, MF_POPUP, (UINT_PTR)hOptions, "Options" ); // crearea meniului Options AppendMenu(hOptions, MF_STRING, ID_PvP, "2 players" ); // crearea butonului de 2 jucatori AppendMenu(hOptions, MF_POPUP, (UINT_PTR)hPvC, "Player vs Computer" ); // crearea submeniului de jucator contra calculator AppendMenu(hPvC, MF_STRING, ID_EASY, "Easy" ); // crearea butonului de dificultate usoara AppendMenu(hPvC, MF_STRING, ID_MED, "Medium" ); // crearea butonului de dificultate medie AppendMenu(hPvC, MF_STRING, ID_HARD, "Hard" ); // crearea butonului de dificultate grea AppendMenu(hMenuBar, MF_POPUP, (UINT_PTR)hThemes, "Themes" ); // crearea meniului Teme AppendMenu(hThemes, MF_STRING, ID_ThF, "Fire" ); // crearea butonului de Tema foc AppendMenu(hThemes, MF_STRING, ID_ThS, "Smoke" ); // crearea butonului de Tema fum AppendMenu(hThemes, MF_STRING, ID_ThW, "Water" ); // crearea butonului de tema apa AppendMenu(hThemes, MF_STRING, ID_ThL, "Lightning" ); // crearea butonului de tema fulger AppendMenu(hThemes, MF_STRING, ID_ThI, "Ice" ); // crearea butonului de tema fulger

SetMenu(hwnd, hMenuBar); // afisarea meniului

23Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 24: Creatori de viitor

break; // oprirea functiei } case WM_COMMAND: // functia de verificare a butoanelor { if ( LOWORD(wParam) == ID_NG ) // verificarea daca butonul de joc nou a fost apasat { Dcl(); // apelarea functiei de resetare a jocului InvalidateRect(hwnd, 0, TRUE); // redesenarea tablei goale } else if ( LOWORD(wParam) == ID_EXIT ) // verificarea daca butonul de iesire a fost apasat { DestroyWindow(hwnd); // inchiderea jocului } else if ( LOWORD(wParam) == ID_PvP ) // verificarea daca butonul de 2 jucatori a fost apasat { computer = 0; // dezactivarea calculatorului Dcl(); // apelarea functiei de resetare a jocului InvalidateRect(hwnd, 0, TRUE); // redesenarea tablei goale } else if ( LOWORD(wParam) == ID_EASY ) // verificarea daca butonul de dificultate usoara a fost apasat { computer = 1; // activarea calculatorului diff = 'E'; // setarea dificultatii usoare Dcl(); // apelarea functiei de resetare a jocului InvalidateRect(hwnd, 0, TRUE); // redesenarea tablei goale } else if ( LOWORD(wParam) == ID_MED ) // verificarea daca butonul de dificultate medie a fost apasat { computer = 1; // activarea calculatorului diff = 'M'; // setarea dificultatii Dcl(); // apelarea functiei de resetare a jocului InvalidateRect(hwnd, 0, TRUE); // redesenarea tablei goale

24Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 25: Creatori de viitor

} else if ( LOWORD(wParam) == ID_HARD ) // verificarea daca butonul de dificultate medie a fost apasat { computer = 1; // activarea calculatorului diff = 'H'; // setarea dificultatii Dcl(); // apelarea functiei de resetare a jocului InvalidateRect(hwnd, 0, TRUE); // redesenarea tablei goale } else if ( LOWORD(wParam) == ID_ThF ) // verificarea daca butonul de dificultate tema normala a fost apasat { Theme = 1; // activarea calculatorului InvalidateRect(hwnd, 0, TRUE); // redesenarea tablei goale } else if ( LOWORD(wParam) == ID_ThW ) // verificarea daca butonul de dificultate tema normala a fost apasat { Theme = 2; // activarea calculatorului InvalidateRect(hwnd, 0, TRUE); // redesenarea tablei goale } else if ( LOWORD(wParam) == ID_ThS ) // verificarea daca butonul de dificultate tema normala a fost apasat { Theme = 3; // activarea calculatorului InvalidateRect(hwnd, 0, TRUE); // redesenarea tablei goale } else if ( LOWORD(wParam) == ID_ThL ) // verificarea daca butonul de dificultate tema normala a fost apasat { Theme = 4; // activarea calculatorului InvalidateRect(hwnd, 0, TRUE); // redesenarea tablei goale } else if ( LOWORD(wParam) == ID_ThI ) // verificarea daca butonul de dificultate tema normala a fost apasat { Theme = 5; // activarea calculatorului

25Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 26: Creatori de viitor

InvalidateRect(hwnd, 0, TRUE); // redesenarea tablei goale } break; // oprirea functiei } case WM_PAINT: // functia de desenare { hdc = BeginPaint (hwnd, &ps); // inceperea desenarii HPEN hPenOld, hLinePen; // declararea instrumentelor de desenare COLORREF qLineColor; // declararea culorii qLineColor = RGB ( 255, 255, 255 ); // setarea culorii hLinePen = CreatePen (PS_SOLID, 4, qLineColor ); // setarea liniilor hPenOld = (HPEN) SelectObject(hdc, hLinePen); // selectarea instrumentului de desenare

for ( i = 1; i <= 2; i++ ) // desenarea tablii de joc { MoveToEx ( hdc, 100*i, 0, NULL ); // } => desenarea liniilor verticale LineTo ( hdc, 100*i, 300 ); // ) MoveToEx ( hdc, 0, 100*i, NULL ); // } => desenarea liniilor orizontale LineTo ( hdc, 300, 100*i ); // ) } for ( i = 1; i <= 9; i++ ) // afisarea imaginii ci X-ul sau O-ul { for ( j = 1; j <= 5; j++ ) { if ( Theme == j ) { k = 2 * j - 1; } } if ( s[i] == 1 ) // verificarea daca va fi afisat un X { xImg = 100 * ( ( i - 1 ) % 3 ) + 2; // calcularea coordonatei X de afisare a X-ului

26Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 27: Creatori de viitor

yImg = 100 * ( ( i - 1 ) / 3 ) + 2; // calcularea coordonatei Y de afisare a X-ului HDC hMemDC1=CreateCompatibleDC(hdc); // ) SelectObject(hMemDC1,bitmap[k]); // ) BitBlt( hdc, xImg, yImg, 96, 96, hMemDC1, 0, 0, SRCCOPY ); // } => afisarea imaginii cu X-ul DeleteDC(hMemDC1); // ) } else if ( s[i] == 2 ) // verificarea daca va fi afisat un X { xImg = 100 * ( ( i - 1 ) % 3 ) + 2; // calcularea coordonatei X de afisare a O-ului yImg = 100 * ( ( i - 1 ) / 3 ) + 2; // calcularea coordonatei Y de afisare a O-ului HDC hMemDC2=CreateCompatibleDC(hdc); // ) SelectObject(hMemDC2,bitmap[k+1]); // ) BitBlt( hdc, xImg, yImg, 96, 96, hMemDC2, 0, 0, SRCCOPY ); // } => afisarea imaginii cu O-ul DeleteDC(hMemDC2); // ) } } qLineColor = RGB ( 0, 150, 0 ); // setarea culorii pt linia de castig hLinePen = CreatePen (PS_SOLID, 7, qLineColor ); // setarea liniei de castig hPenOld = (HPEN) SelectObject(hdc, hLinePen); // selectarea instrumentului de desenare for ( i = 1; i <= 9; i++ ) // parcurgerea patratelor { if ( l[i] != 0 ) // verificarea daca patratul nu este gol { l1 = 10; // ) l2 = 100 * ( ( i - 1 ) % 3 ) + 50; // } => calcularea coordonatelor de l3 = 290; // ) desenare a liniei de castig l4 = l2; // ) if ( i <= 3 ) // verificarea daca linia este orizontala { MoveToEx( hdc, l1, l2, NULL); // } => desenarea liniei LineTo( hdc, l3, l4 ); // )

27Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 28: Creatori de viitor

} else if ( i >= 4 && i <= 6 ) // verificarea daca linia este verticala { MoveToEx( hdc, l2, l1, NULL); // } => desenarea liniei LineTo( hdc, l4, l3 ); // ) } else if ( i == 7 ) // verificarea daca se afla pe diagonala principala { MoveToEx( hdc, l1, l1, NULL); // } => desenarea liniei LineTo( hdc, l3, l3 ); // ) } else if ( i == 8 ) // verificarea daca se afla pe diagonala principala { MoveToEx( hdc, l3, l1, NULL); // } => desenarea liniei LineTo( hdc, l1, l3 ); // ) } } }

SelectObject(hdc, hPenOld); // selectarea instrumentului de scris DeleteObject(hLinePen); // eliminarea instrumentelor de desenare

EndPaint (hwnd, &ps) ; // terminarea desenarii break; // oprirea functiei } case WM_DESTROY: // functia de inchidere PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0;}

28Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 29: Creatori de viitor

b. Cod de programare al coderului#include<iostream> // )#include<fstream> // )#include <windows.h> // } => includerea unor librariiusing namespace std; // )HWND Edit; // declararea tabelului de editare

#define ID_CODE 1 // definirea butonului de codare#define ID_DECODE 2 // definirea butonuui de decodare#define ID_EDIT 3 // definirea tabelului de editareint i, // variabila pentru for-uri a = 0; // numarul cuvintelorint lengthx; // lungimea propozitieiint lengthy; // lungimea fiecarui cuvantchar x[100], // propozitia pentru codat / propozitia decodata y[100]; // cuvintele carea alcatuiest propozitia / propozitia codataint rnd1; // )int rnd2; // } => numere generate la intamplare pentru codificareint r[15]; // )bool coded = false; // contorul daca mesajul este codat sau decodat

int read() // functia de citire a propozitiei{ lengthx = 0; // initializarea lungimii propozitiei ifstream fin("message.txt"); // deschiderea fisierului din care va fi citit mesajul while ( !fin.eof() ) // cat timp nu este finalul fisierului { if ( a != 0 ) // evitarea punerii unui spatiu la inceputul propozitiei { x[lengthx] = 32; // punerea unui spatiu lengthx++; // lungimea propozitiei creste cu spatiul pus } fin >> y; // citeste cuvantul lengthy = strlen(y); // afla lungimea cuvantului for ( i = 0; i < lengthy; i++ ) // pune cuvantul in propozitia pentru codare {

29Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 30: Creatori de viitor

x[lengthx] = y[i]; // pune fiecare litera pe rand in propozitie lengthx++; // creste lungimea propozitiei cu fiecare litera pusa } a++; // creste numarl de cuvinte } fin.close(); // inchiderea fisierului din carea a fost citit mesajul lengthx--; // stergerea spatiului pus la sfarsitul propozitiei}int code() // functia pentru codare{ srand (time(NULL)); // resetarea timpului pentru generarea unui numar la intamplare rnd1 = rand() % 10 + 1; // generarea unui numar la intamplare y[0] = rnd1 + 48; // numarul generat devine primul caracter din propozitie for ( i = 1; i <= rnd1; i++ ) // generarea mai multor numere la intamplare { r[i] = rand() % 10 + 1; // generarea numerelor y[i] = r[i] + 131; // codificarea numerelor si punerea lor in propozitie } rnd2 = rand() % 10 + 1; // generarea altui numar la intamplare y[rnd1+1] = rnd2 + 48; // punerea numarului generat in propozitie for ( i = 0; i <= lengthx; i++ ) // codificarea propozitiei { y[i+2+rnd1] = x[i] + 300 + rnd2; // codificarea fiecarui caracter e baza numarului generat } ofstream fout("message.txt"); // deschiderea sau crearea fisierului in care va fi scris mesajul fout << y; // scrierea mesajului in fisier fout.close(); // inchiderea fisierului in care a fost scris mesajul}int decode() // functia de decodare{ rnd1 = y[0] - 48; // citirea primului numar generat la intamplare rnd2 = y[rnd1+1] - 48; // citirea celui de-al doilea numar generat la intamplare for ( i = 0; i <= lengthx; i++ ) // defodarea mesajului { x[i] = y[i+2+rnd1] - 300 - rnd2; // decodarea fiecarei litere pe baza numarului generat

30Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 31: Creatori de viitor

} ofstream fout("message.txt"); // deschiderea sau crearea fisierului in care va fi scris mesajul fout << x; // scrierea mesajului in fisier fout.close(); // inchiderea fisierului in care a fost scris mesajul}//###################################################################################################################################################// afisarea si pregatirea

/* Declare Windows procedure */LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/* Make the class name into a global variable */char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)

{ HWND hwnd; /* This is the handle for our window */ MSG messages; /* Here messages to the application are saved */ WNDCLASSEX wincl; /* Data structure for the windowclass */

/* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX);

/* Use default icon and mouse-pointer */

31Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 32: Creatori de viitor

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default color as the background of the window */ wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

/* Register the window class, and if it fails quit the program */ if (!RegisterClassEx (&wincl)) return 0;

/* The class is registered, let's create the program*/ hwnd = CreateWindowEx ( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Windows App", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 435, /* The programs width */ 250, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ );

/* Make the window visible on the screen */ ShowWindow (hwnd, nFunsterStil);

/* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages);

32Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 33: Creatori de viitor

/* Send message to WindowProcedure */ DispatchMessage(&messages); }

/* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam;}

/* This function is called by the Windows function DispatchMessage() */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){//################################################################################################################################################### switch (message) /* handle the messages */ { case WM_CREATE: // functia de creare { CreateWindow(TEXT("BUTTON"), TEXT("CODE"), // ) WS_VISIBLE | WS_CHILD, // ) 10, 150, 150, 50, // } => crearea buton7ului de codare hwnd, (HMENU) ID_CODE, NULL, NULL ); // ) CreateWindow(TEXT("BUTTON"), TEXT("DECODE"), // ) WS_VISIBLE | WS_CHILD, // ) 260, 150, 150, 50, // } => crearea butonului de decodare hwnd, (HMENU) ID_DECODE, NULL, NULL ); // ) Edit = CreateWindow ("EDIT", "", // ) WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_CENTER, // ) 10, 10, 400, 100, // } => crearea tabelului in care se va afisa mesajul hwnd, (HMENU)ID_EDIT, GetModuleHandle(NULL), NULL ); // )

33Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 34: Creatori de viitor

read(); // apelarea functiei de citire SetWindowText( Edit, x ); // afisarea mesajului in tabel

break; // oprirea functiei } case WM_COMMAND: // functia de comanda { if ( LOWORD(wParam) == ID_CODE ) // verificarea daca butonul de codare a fostapasat { code(); // apelarea functiei de codare SetWindowText( Edit, y ); // afisarea mesajului codat in tabel MessageBox(hwnd,(LPSTR)"Mesajul a fost codat cu succes!", "Info", MB_ICONEXCLAMATION | MB_OK); // crearea unui avertisment ca measjul a fost codat } if ( LOWORD(wParam) == ID_DECODE ) // verificarea daca butonul de codare a fostapasat { decode(); // apelarea functiei de decodare SetWindowText( Edit, x ); // afisarea mesajului decodat in tabel MessageBox(hwnd,(LPSTR)"Mesajul a fost decodat cu succes!", "Info", MB_ICONEXCLAMATION | MB_OK); // crearea unui avertisment ca measjul a fost decodat } break; // orirea functiei } case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); }

return 0;}

34Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”

Page 35: Creatori de viitor

5. Publicitate:

6. Bibliografie:

http://msdn.microsoft.com/en-us/default.aspx#fbid=GwbHYGIWXLb

http://stackoverflow.com/

35Clasa a 10 - a ALiceul Teoretic “Mihai Eminescu”