Programarea Calculatoarelor, seria CC

Tema 3

Data publicării: Vineri, 27 noiembrie 2009

Deadline: Duminică, 13 decembrie 2009, ora 23:50

Precizări:



Introducere

Tema presupune realizarea unui joc de snake, în Linux, folosind biblioteca curses. Sursa se va numi snake.c.

În exemplu1.c și exemplu2.c veți găsi un mod de utilizare a acestei biblioteci.

În exemplu1 se arată cum poate fi folosită biblioteca pentru a afisa șiruri, pentru a muta un caracter afișat pe ecran la apăsarea anumitor taste, sau pentru a se efectua anumite acțiuni.

În exemplu2 este prezentat un mod în care se poate aștepta un anumit timp apăsarea unei taste (de exemplu, la ficare 2 secunde, șarpele trebuie să avanseze o pătrățică, dar dacă între timp se apasă o anumită tastă, va trebui să i se schimbe și direcția).

Pentru mai multe detalii despre curses consultați linkurile:

Pentru a putea folosi curses va trebui să includeți curses.h cu #include <curses.h> și să linkați biblioteca curses (folosind -lcurses la compilare).

Pentru a folosi curses va trebui să instalați pachetul ncurses utilizând managerul de pachete implicit pe distribuția voastră de Linux (apt-get, yum, yast, etc..).

De exemplu, pe distribuția Ubuntu:

apt-get install libncurses5-dev

Compilarea sursei se va face cu:

gcc snake.c -lcurses

Pentru semnalarea apăsării unei taste într-un interval de timp va trebui să includeți și unistd.h și sys/types.h (ca in exemplu2.c).


Cerințe

Ținând cont că nu vă este impus un aspect anume pentru joc, ci doar anumite feature-uri pe care trebuie să le aibă veți primi puncte bonus pentru aspectul artistic al aplicației și pentru diverse îmbunătățiri sau idei originale pe care le aduceți. Precizați-le în readme.

1. [30 puncte]

Creați folosind curses și pornind de la exemplu1.c un joc de snake care permite mutarea la apăsarea unei taste. Va trebui să aveți un chenar (a cărui dimensiune o alegeți voi, dar să fie suficient de mare) ale cărui margini nu pot fi depășite. Șarpele va avea o lungime ințială presetată (de exemplu 5 pătrățele) și va putea fi mutat numai în interiorul chenarului desenat.

Jocul se oprește la apăsarea unei taste prestabilite (de ieșire din joc) sau atunci când șarpele face o mutare invalidă (se lovește de chenar sau de el însuși).

2. [20 puncte]

Adăugați aplicației de la punctul 1 generarea random a câte unui pătrățel cu "hrană" pentru șarpe. De fiecare dată când aceasta este consumată (capul șarpelui ajunge în aceeași poziție cu hrana și aceasta dispare), va fi generat un alt pătrat cu hrană. Prin consumarea unui pătrățel de hrană, șarpele va trebui să creasă cu o unitate.

3. [20 puncte]

Adăugați aplicației de la punctul 2 posibilitatea de a generara obstacole (tot aleator) înainte de începutul jocului. Șarpele nu are voie să se lovească de ele.

Adăugați un meniu care apare la lansarea aplicației și permite alegerea unuia dintre modurile: cu obstacole sau fără obstacole.

4. [20 puncte]

Pornind de la exemplu2.c adăugați aplicației de la punctul 3 mișcarea automată a șarpelui: acesta se mișcă încontinuu, cu o anumită viteză (dată de timpul de așteptare setat), iar la apăsarea unei taste i se schimbă direcția.

Sugestie: Veți avea o variabilă ce memorează direcția pe care se mișcă șarpele, iar la apăsarea unei taste de direcție se modifică doar această variabilă. Coordonatele se modifică în ambele cazuri (s-a apăsat sau nu o tastă de direcție), la sfârșitul cuantei de timp setată pentru așteptarea apăsării unei taste.

5. [10 puncte]

Adăugați aplicației de la punctul 4 accelerarea mișcării în funcție de nivel (se pornește cu o viteză mai mică și pe măsură ce lungimea șarpelui crește, se incrementează si viteza - de exemplu la fiecare 3 pătrățele de lungime câștigate).

BONUSURI

Puteți implementa în plus orice doriți. Idei de bonusuri ar fi: