Proiectul

Proiectul reprezintă ultima temă pe care o primesc studenţii în cadrul cursului de Programarea Calculatoarelor, seria CC.

Spre deosebire de temele precedente, care au avut enunţuri cu specificaţii rigide, proiectul vă oferă mai multă libertate de a vă manifesta creativitatea, şi presupune realizarea integrală unui joc cu interfaţă grafică folosind un API clasic de realizare al interfeţelor grafice în terminal (interfeţe de tip TUI - "Text User Interface") şi utilizând cunoştinţe dobândite în decursul întegului semestru.

Pentru mulţi dintre studenţi, proiectul reprezintă prima ocazie de a folosi ceea ce au învăţat timp de un semestru pentru a realiza o aplicaţie nontrivială.

Regulament Proiect

  • Punctajul standard este de 100p, tot ceea ce obţineţi peste 100 de puncte se va aduna la punctajul pentru celelalte teme de casă sau laborator.
  • Tema se va uploada pe site-ul de cursuri. Veţi trimite o arhivă în format zip (NU tar, rar, bzip, gzip...) care va respecta următoarele reguli:
    • numele arhivei va fi de forma grupa_nume_prenume_tema3.zip (de exemplu, 312CC_Scoica_Adrian_tema3.zip). Dacă aveţi mai multe nume/prenume, alegeţi unul singur dintre ele.
    • toate fişierele corespunzătoare temei trebuie să se afle direct în rădăcina arhivei (NU într-un director)
    • arhiva va conţine şi un fişier Makefile (cu cel puţin două target-uri: build si clean, build fiind primul dintre ele. Primul va compila tema, iar al doilea va şterge fişierele obiect şi executabilul create.).
    • arhiva va conţine şi un fişier text README în care veţi trece următoarele informaţii:
      • numele, prenumele şi grupa
      • versiunea de compilator cu care aţi realizat tema (pentru GCC, folosiţi comanda gcc --version în terminal)
      • dependenţe externe, dacă aţi folosit (de exemplu pentru redarea sunetului)
      • ce funcţionalităţi suplimentare aţi implementat, dacă este cazul
      • timpul aproximativ de rezolvare al temei
      • gradul de dificultate al temei, pe o scară de la 1 la 10 (unde 1 reprezintă foarte simplu, iar 10 foarte dificil)
      • orice impresii legate de formatul temei, alegerea jocului, sugestii constructive de îmbunătăţire a proiectului pe viitor, etc. Echipa de PC ţine în fiecare an cont de acest feedback şi ne străduim să îmbunătăţim experienţa voastră la această materie
    • arhiva va mai conţine pe lângă fişierele de implementare ale temei (headere şi surse C) şi alte fişiere auxiliare necesare rulării temei (fişiere de sunet, de highscores, hărţi dacă este cazul, etc.)
    • arhiva NU trebuie să conţină fişiere executabile sau obiect (cu extensia .o).
  • Temele sunt INDIVIDUALE. Orice tentativă de copiere (de pe Internet, de la colegii voştri de an sau de la colegii voştri de ani mai mari) se va sancţiona fără discuţii cu 0 puncte, atât pentru cel care a copiat cât şi pentru cel de la care s-a copiat.
  • Atenţie la sintaxa de C! NU folosiţi funcţii C++ sau construcţii de limbaj specifice C++! De asemenea, veţi fi depunctaţi dacă tema voastră primeşte Segmentation Fault, sau are memory leak-uri. Vă recomandăm în acest sens parametrii -Wall -pedantic la compilare precum şi rularea cu valgrind pentru depistarea eventualelor nereguli.
  • CORECTAREA temei se va face manual. Vom rula fiecare temă şi vom stabili dacă implementarea, cât şi codul sursă, îndeplinesc cerinţele impuse.

Getting Started

Instalare

Tema va fi realizată şi corectată pe un sistem de operare Linux (de exemplu, puteţi folosi o maşină virtuală Ubuntu/Debian dacă nu aveţi un Linux instalat nativ).

Primul pas pentru a putea realiza interfaţa grafică a temei este să vă instalaţi biblioteca ncurses.

Puteţi instala ncurses utilizând managerul de pachete implicit pentru distribuţia voastră (aptitude pentru Debian şi Ubuntu, yum pentru Fedora, yaourt pentru ArchLinux, yast pentru OpenSUSE, etc.).

De exemplu, în cazul aptitude, folosiţi comanda:

Folosire în Cod

Al doilea pas pentru folosirea API-ului este să includeţi header-ul asociat bibliotecii, numit <curses.h>. Pentru a include un header într-o sursă de C, folosiţi ca şi pentru orice al header, directiva include astfel:

În continuare veţi putea apela funcţii din cadrul bibliotecii în programul vostru. Pentru a putea implementa funcţionalitatea de apăsare a unei taste, va trebui să includeţi şi headerele:

Pentru mai multe detalii, am realizat câteva exemple concrete de folosire a bibliotecii ncurses (vezi arhiva de pornire a temei).

Compilarea

Al treilea pas este linkarea statică a bibliotecii ncurses în cadrul ultimului pas al compilării. Acest lucru se realizează prin parametrul -lcurses adaugat in linia de comandă la compilare (în fişierul Makefile, sau în terminal). De exemplu:

Aveţi în arhiva de pornire a temei un fişier Makefile care conţine deja scrise regulile necesare pentru compilarea şi rularea temei, voi va trebui doar sa completaţi datele voastre personale.

Hall of fame

Avem deja o tradiţie încă din 2008, în fiecare an studenţii depăşindu-ne aşteptările prin entuziasmul şi ideile originale de care au dat dovadă. Pentru a vă motiva, dar şi pentru a respecta efortul depus de ei, vă vom prezenta pe scurt realizările înaintaşilor voştri.

Temele sunt rulabile doar pe sisteme de operare Linux 32bit.

Anul universitar 2013 - 2014.

Tema proiectului: un joc de Minesweeper.

Enunţul temei îl puteţi găsi aici.

Cele mai bune teme au fost realizate de:

Anul universitar 2012 - 2013.

Tema proiectului: un joc de Connect4.

Enunţul temei: îl puteţi găsi aici sau aici .

Cele mai bune teme au fost realizate de:

Anul universitar 2011 - 2012.

Tema proiectului: un joc de Tetris.

Puteţi citi enunţul detaliat precum şi instrucţiunile de realizare ale temei aici.

Cele mai bune teme au fost realizate de:

Anul universitar 2010 - 2011.

Tema proiectului: un joc de PacMan.

Cele mai bune teme au fost realizate de:

Anul universitar 2009 - 2010.

Tema proiectului: un joc de Snake.

Cele mai bune teme au fost realizate de:

Anul universitar 2008 - 2009.

Tema proiectului: un joc de Sudoku.

Cele mai bune teme au fost realizate de: