Alexandru-Andrei ROTARU (25055) - Annoying Snake

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul meu consta in realizarea unui joc de snake pe LCD actionat prin butoane si qtouch. Pe langa regulile clasice ale jocului in anumite momente ale jocului harta curenta se va modifica astfel incat un jucator neatent sa piarda jocul. Cu cat se va inainta mai mult in joc cu atat frecventa impedimentelor va creste. Utilitatea proiectului meu se adreseaza mai mult sferei de entertainment si amuzament deoarece dupa ce este jucat jucatorul va simtii nevoia de “flip the table”.

Descriere generală

Descriere generală

La inceputul jocului complexitatea hartilor va fi reduse, fiind relativ simplu ca sarpele sa ajunga la mancare sau la bonusuri. Cu cat sarpele creste in lungime cu atat viteza sarpelui va fi mai mare si complexitatea labirtintului in care sarpele se misca va fi mai mare. Ca feature m-am gandit sa adaug un mecanims in care peretii labirintului sa se modifice in timpul jocului pentru a ingreuna si mai mult jocul si a adauga factorul de “flip-the-table”. Directia de miscare a sarpelui va fi controlata prin butoane si qtouch.

Hardware Design

Lista de piese:

Componente de baza:

  • microcontroller ATMEGA324
  • soclu microcontroller
  • mufa USB
  • stabilizator de tensiune
  • diode ZENER
  • condensator 10uF
  • condensator 100nF
  • condensator 15pF
  • rezistenta 10K
  • rezistenta 1K
  • rezistenta 1.5K
  • rezistente 100K
  • rezistente 470K
  • 2 butoane
  • 2 leduri
  • quartz

Componente particulare:

  • LCD grafic
  • bareta pini
  • 5 butoane
  • 2 leduri
  • 2 rezistente 470K
  • fire conectoare
  • placa de test

Schema electrica: 1000

Software Design

In implementarea jocului am pornit de la o librarie scrisa de Tony Myatt pentru LCD-ul ales de mine pentru acest proiect. Sarpele este constituit din blocuri de dimensiunea unui caracter si dvopul acestuia este sa creasca pana la o anumita dimensiune. Capul sarpelui este reprezentata de litera 'o', corpul sarpelui este compus din caractere curstom facute de mine, iar coada este semnul '+'. Mancarea este reprezentata cu caracterul '*', obstacolele cu caracterul 'X' iar hrana bonus prin o litera la intamplare. Pe prima linie a ecranului apare un panou pentru statistici cum ar fi lungimea curenta (a.k.a scorul jocului) desemnata de litera 'S' precum si nivelul curent desemnat prin listera 'L'. Nivelul jocului dicteaza viteza cu care sarpele merge, cu cat se creste in nivel cu atat si viteza creste, jocul devenind mai greu. Pozitia mancarii este generata aleator, dar poztia de inceput a sarpelui este determinata de la inceput. Avansarea in niveluri se intampla doar la mancarea bonusurilor. Aceste bonusuri apar o data la un 4 cresteri si raman pe ecran un numar limitat de ciclii (ciclul este intarvalul de timp la care se reafiseaza sarpele pe ecran).

Modul de implementare:

Pentru a reprezenta sarpele si elementele de pe ecran am folosit o structura coord_t ce retine coordonatele unui block pe ecran, aceste dimenisuni fiin raportate la dimensiunile unui caracter. La fiecare unitate de timp (initial o secunda, pe masura ce creste nivelul se scurteaza) recalculez poztiile blocurilor din sarpe, verific daca exista coliziuni cu obstacole, cu el insusi, cu blocuri mancare sau cu blocurile bonus. In cazul mancarii sau bonusului cresc dimensiunea sarpeluli cu o anumita valoare si recalculez statusurile (scorul, nivelul). In cazul unei coliziuni se incheie jocul. Atat sarpele cat si obstacolele le tine in vectori.

Rezultate Obţinute

Astea sunt pozele proiectului meu.

Concluzii

Un proiect din care am invatat cate ceva si pot spune ca as mai incerca pe viitor si alte proiecte mai complexe.

Download

Bibliografie/Resurse

pm/prj2016/drugescu/300000.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0