Jocul 2048 implementat in limbajul C, cu biblioteca grafica ncurses
Programul are la baza un tablou bidimensional de dimensiune 4 X 4 in care va stoca numerele ce alcatuiesc jocul 2048. Pe langa funciile ce stau la baza acestui joc precum cele de initializare si afisare, am implementat:
- o functie ce prin generare aleatorie folosind rand() adauga un element 2 sau 4 la intamplare pe o pozitie de asemenea aleatorie, ce avea initial valoarea 0 practic, un spatiu gol de pe tabla de joc
- doua functii combinlinie si combinrand ce vor efectua imbinarea a doua celule alaturate cu valori identice, adaugand noul element obtinut la tabla de joc, dar care calculeaza si scorul pentru mutarea respectiva.
- patru functii mutare_element_directie ce efectueaza trecerea tuturor elementelor in directia data fara a lasa spatii libere
- patru functii mut_directie, ce folosesc mutare_element_directie si combinalinie sau combinacoloana ce muta si unesc elementele identice
- o functie verif2048 ce testeaza daca jocul a ajuns la faza de castig
- o functie mutarevalida ce testeaza daca se poate efectua mutarea
- o functie mutareoptima ce calculeaza numarul de elemente nule dupa mutare
- o functie joc248 ce reprezinta structura jocului in sine, reunind logica functiilor de mai sus si care va primi comenzile de la tastatura
- functia afisare_meniu ce afiseaza optiunile "New Game", "Resume" si "Quit"
- functia meniu care va prelua imput de la tastatura si va rula un nou joc, sau unul inceput anterior, fie va incheia sesiunea curenta a jocului.
Cerinta 1 Am implementat un meniu cu trei butoane "New Game", "Resume" si "Quit". New game va deschide un nou joc, si va face astfel disponibil si butonul Resume, acesta salvand stadiul jocului cand utilizatorul il paraseste prin apasarea tastei q. Butonul "Quit" va inceta rularea jocului.
Cerinta 2 Am definit tabela de joc de dimensiune 4 X 4 la care am adaugat folosind in functie rand() ce genera pozitii, dar alegea si valoarea aleatorie. In partea de jos a ecranului va afisa data si ora, extrase din biblioteca time.h, mutarile valide la momentul respectiv, dar si punctele jocului actual si scorul maxim obtinut.
Cerinta 3 Deplasarea se efectueaza cu functiile combinlinie, combinrand ce combina elementele cu valori egale, dar care calculeaza si scorul acesta fiind returnat de catre functii mutare_elem_directie ce duce toate elementele in directia ceruta, si mut_directie ce asigura lipirea si eliberarea chenarlor, dar si un calcul al totalului de puncte al miscarii respective. Dupa fiecare mutare va adauga un element aleator pe o pozitie libera. Jocul verifica si daca o mutare este valida prin aplicarea mutarii asupra unei copii a tablei curente si comparand cele doua matrici. Daca miscarea este invalida dupa efectuarea acesteia va adauga un nou element aleator pe o noua pozitie libera.
Cerinta 4 Folosind functia mutareoptima verific cate elemente nule raman pe tabla dupa o mutare, acesta fiind criteriul de selectie. Acesta astepta 15 secunde input de la tastatura, daca nu primeste va efectua miscarea determinata de functia mutareoptima.
Cerinta 5 La fiecare mutarea programul va testa daca pe tabela se gaseste un element cu valoarea 2048, iar in caz afirmativ va afisa mesajul "You WON!!!".