Sunteți pe pagina 1din 4

Tema 2 - Arkanoid Sim

Data publicrii: Duminic, 27 Noiembrie 2011 Deadline: Duminic, 18 Decembrie 2011, 23:55 Precizri: Sursa se va numi tema2.c . Vei trimite o arhiv zip cu numele grupa_nume_prenume.zip (exemplu: 311CC_Popescu_Ion.zip) care va conine fiierul tema2.c i un fiier README n care detaliai implementarea voastr i trecei gradul de dificultate al temei, timpul alocat rezolvrii i eventualele comentarii. Sursele vor fi compilate sub Linux, folosind gcc. Atenie! NU se puncteaza teme incomplete sau ce nu compileaza. Vei primi 0 puncte. Temele sunt INDIVIDUALE. Copierea (de la ali colegi sau din surse de pe Internet) se va sanciona cu punctajul 0, att pentru cel care a copiat, ct i pentru cel de la care s-a copiat. Deadline-ul pentru aceasta tema este hard (nu sunt acceptate surse trimise dupa termenul limita). Responsabilii pentru aceasta tema sunt : Ghitulete Razvan, Lungu Adrian. Pentru lamuriri suplimentare, va puteti adresa pe forum. Enun: Arkanoid[1][2] este un joc de tip arcade el fiind printre cele mai cunoscute de acest gen. Tema de fata isi propune sa se realizeze o simulare a unui joc Arkanoid-like (varianta simplificata), in C folosiind functii, dupa cum urmeaza: Definim 6 tipuri distincte de blocuri: a. Indestructibile : Sunt folosite pentru a adauga obstacole pe harta. b. Once-Block: Sunt blocuri normale, care au nevoie de o singura lovitura pentru a fi distruse (reflecta bila). c. Twice-Block: Dupa lovire se transforma in Once-Block (reflecta bila). d. Butter-Block: Este nevoie de o singura lovitura pentru a fi distruse, iar bila isi continua traiectoria (nu reflecta bila). e. Bonus-Block: Reprezinta block-uri de tip bonus, care vor altera jocul. Sunt la randul lor de 2 tipuri: Tip 1: Transforma bila curenta in bila de tip special (codificata *). Bilele de tip special nu vor tine cont de natura blocurilor cu care interactioneaza, tratandu-le pe toate ca Butter-Block-uri (exceptie fac blocurile indestructibile). Tip 2: Creaza inca o bila normala(codificata cu +), care va porni din start position (detalii mai jos despre aceasta pozitie), cu aceeasi directie pe care a avut-o bila care a lovit Bonus-Block-ul (inainte de coliziune). Se va simula fie pana la terminarea jocului, fie pana la atingerea numarului de frame-uri, k, ce va fi specificat in datele de intrare. Consideram jocul ca fiind terminat cand una din urmatoarele 2 conditii este respectata: 1) Pe ecran se regasesc numai blocuri indestructibile

[1] http://en.wikipedia.org/wiki/Arkanoid [2] http://www.youtube.com/watch?v=44rceRqY8_k

2) Nu mai exista nicio bila in ecran (prin Bonus-Block de tip unul se pot genera mai mult de o bila. Toate bilele trebuie sa paraseasca ecranul pentru ca jocul sa fie considerat incheiat). Ecranul nu este implicit delimitat (poate avea si gauri, prin care bilele pot parasi ecranul de joc - fig. 1). Orice bloc, cu exceptia celor indistructibile, va avea dimensiunea 2:3 (2 caractere inaltime si 3 caractere latime). Se garanteaza ca toate blocurile din frame-ul de intrare sunt blocuri valide (NU este necesara verificarea validitatii datelor de intrare) :

Fig.1

Fig.2

Cerinta : Pornind de la un fisier de intrare ce prezinta un frame al jocului, vi se cere sa generati urmatoarele k astfel de frame-uri. Bila va fi reprezentata printr-un singur caracter ce are valoarea +. Date de intrare: Pe prima linie se vor regasi 3 numere un numar N, M si K reprezentand numarul de pasi pe care trebuie sa ii simuleze programul facut de voi. Pe linia a 2-a se vor regasi 2 numere X si Y reprezentand pozitia de start a bilelor generate prin Bonus-Brick-2 Pe urmatoarele N 28 linii se vor regasi cate M 23 caractere pentru a codifica starea initiala a ecranului dupa cum urmeaza: 0 - pozitie libera 1 - Once-Block 2 - Twice-Block 3 - Butter-Block 4 - Bonus-Block tip 1 5 - Bonus-Block tip 2 9 - Blocuri indestructibile + - Bila [1] http://en.wikipedia.org/wiki/Arkanoid [2] http://www.youtube.com/watch?v=44rceRqY8_k

Date de ieire: k frame-uri conform cu enuntul (NU si frame-ul initial). Bila se va deplasa doar pe diagonala, iar directia ei initiala va fi inspre dreapta-jos. Restricii: 3 <= K <= 1000 10 <= N, M <= 50 In frame-ul de start (cel pus la dispozitie in fisierul de intrare) va exista o singura bila. Blocurile de dimensiune [2][3] vor fi aliniate dupa cum urmeaza: La linia 2t+1 La coloana 3t+1 0 <= X < 28 0 <= Y < 23 Exemplu fisier de intrare: Un exemplu de fisier de intrare puteti gasi in arhiva schelet_tema1.zip ce poate fi descarcata de pe site-ul de curs. Punctaj: Tem compilabil - 10p Teste (10 n total) - 90p (10 * 9p) Coding style (indentare, comentarii, nume sugestive pt variabile, cod modularizat) - 15p Coliziuni: Cazurile principale de coliziune cu blocurile indestructibile (ATENTIE! Exista coliziuni cu toate marginile. Acestea sunt doar exemple) : 1) 99999 00000 0+000 90000 90000 90+00 00099 00000 0+000 99999 90000 90+00 99999 99999 00+00 00000 90000 9+000 90000 00099 00+00 00000 99999 9+000 90000 99999 99999 00000 000+0 90+00 90000 90000 00099 00000 0+000 99999 90000 90+00 99999

2)

3)

4)

[1] http://en.wikipedia.org/wiki/Arkanoid [2] http://www.youtube.com/watch?v=44rceRqY8_k

90000 90+00

9+000 90000

90000 90+00

Cazurile principalele de coliziune cu blocurile ce pot fi distruse (ATENTIE! Acestea nu sunt toate cazurile de coliziune, dar toate celelalte cazuri pot fi deduse din acestea) : 1) 1110 1110 0000 000+ 000000 000000 111000 111000 0000+0 111000 111000 000000 0000+0 000000 111111 111111 111000 111000 0000+0 111111 111111 111000 1110+0 000000 111111 111111 111000 1110*0 000000 1110 1110 00+0 0000 000000 000000 111000 111+00 000000 111000 111000 000+00 000000 000000 111111 111111 111000 111+00 000000 111111 111111 111+00 111000 000000 111111 111111 111*00 111000 000000 0000 0000 0000 0+00 000000 000000 0000+0 000000 000000 000000 000000 000000 0000+0 000000 111111 111111 0000+0 000000 000000 000111 000111 111000 1110+0 000000 000111 00*111 111000 111000 000000 0*0111 000111 111000 111000 000000 111000 111000 000000 00000+ 000000

2)

3)

4)

5)

6)

[1] http://en.wikipedia.org/wiki/Arkanoid [2] http://www.youtube.com/watch?v=44rceRqY8_k

S-ar putea să vă placă și