Survival Game

Ionescu Elena 336CA

Introducere

Proiectul presupune crearea unui joc 2D, in care jucatorul trebuie sa depaseasca niste obstacole si sa supravietuiasca cat mai mult timp, incadrandu-se intr-un timp limita. Daca se atinge acel timp limita fara ca jucatorul sa se fi lovit de vreun obstacol, se va afisa mesajul “You won!”. In caz contrar, daca pe parcursul rularii jocului, jucatorul se loveste de vreun obstacol fara sa se fi terminat de scurs timpul alocat, atunci se va afisa pe ecran mesajul “You lose!”. In fiecare dintre cele doua cazuri, dupa afisarea mesajului corespunzator, se va afisa din nou mesajul “Press start” pentru reluarea jocului.

Jocul va fi afisat pe ecran LCD, iar miscarea jucatorului se va realiza prin intermediul unui buton; astfel, la apasarea butonului, jucatorul va sari si va depasi obstacolele.

Obstacolele sunt plasate pe ambele randuri din ecranul LCD, insa nu simultan.
In coltul din dreapta sus al ecranului, va aparea numarul de secunde scurse din momentul inceperii jocului.

Descriere generală

Schema bloc

Functionalitate

Placa Arduino este componenta de baza a acestui proiect. Breadboard-ul si LCD-ul sunt legate direct la placa prin intermediul firelor mama-tata si tata-tata. Restul componentelor (rezistentele, butonul si buzzer-ul), dintre care mai de seama sunt buzzer-ul si butonul, sunt legate la placa Arduino prin intermediul breadboard-ului si a firelor tata-tata. La rularea jocului, se apasa pe buton, generandu-se o intrerupere. Astfel, jocul incepe si pe ecran se vor afisa jucatorul, obstacolele si timpul scurs din momentul inceperii jocului.

Hardware Design

Lista de piese

  1. o placuta ARDUINO UNO
  2. un ecran LCD 1602 cu Interfata I2C si Backlight Albastru
  3. doua rezistente de 10K
  4. un buton
  5. un buzzer
  6. un breadboard
  7. 4 fire mama tata pentru conectarea LCD-ului la placa Arduino
  8. 8 fire tata tata pentru conectarea celorlaltor componente (cele doua rezistente, buzzer-ul si butonul) la breadboard si la placuta Arduino

Schema electrica

Software Design

In cadrul acestui proiect, in functia loop, verific daca jocul ruleaza sau nu. In cazul in care nu ruleaza, verific daca s-a scurs timpul alocat jucatorului. Daca da, inseamna ca jucatorul nu s-a lovit de niciun obstacol si afisez pe ecran timp de cateva secunde mesajul “You won!”, iar numaratoarea reincepe de la 0. In caz contrar, atunci ma sunt la prima rulare a jocului, deci jucatorul se afla in repaus. Afisez un mesaj “Press start” inainte de inceperea jocului si generez o melodie cu ajutorul buzzer-ului, pana la inceperea jocului. Pentru a activa inceperea jocului, se apasa pe buton; aici ma folosesc de intreruperi. Cand a inceput jocul, se deseneaza harta pe ecranul LCD, formata din obstacole in partea de sus si in partea de jos, fiecare avand un “timp de viata” ce reprezinta timpul cat va fi afisat pe ecran. Jucatorul va fi pozitionat mereu pe a doua celula de pe randul de jos. Pentru a crea efectul de miscare, jucatorul are atat pentru saritura cat si pentru pozitia de alergare mai multe reprezentari in matricea grafica. Tot in functia loop, verific starea curenta a jucatorului si a hartii si desenez, in functie de acestea, cadrul imediat urmator. Daca are loc o cliziune intre jucator si obstacol, afisez mesajul “You lose!” timp de cateva secunde, iar la urmatoarea rulare se va afisa din nou mesajul “Press start” si se va astepta apasarea butonului. Daca nu s-a scurs timpul alocat si daca jucatorul nu s-a lovit de vreun obstacol, se calculeaza urmatoarea pozitie a jucatorului.

In functia initializare_harta(), se initializeaza cadrele cu o celula goala si se creeaza cadrele pentru jucator si pentru harta.

In functia animatieHarta, se deruleaza urmatorul cadrul al hartii.

In functia reprezentare_jucator, reprezint jucatorul pe ecran si anticipez urmatorul cadru asociat acestuia. De asemenea, reprezint timpul scurs de la inceperea jocului in coltul din dreapta sus al LCD-ului.

In functia setup fac initializarile necesare pentru buton, buzzer si pentru registrii pe care ii voi folosi la intreruperile pentru buton si pentru timer, ca la laborator.

In urmatoarele doua functii tratez rutinele de intreruperi folosind ISR pentru buton si timer.

Rezultate Obţinute

ionescu_elena_imagine_1.jpeg

ionescu_elena_imagine_2.jpeg

ionescu_elena_imagine_3.jpeg

ionescu_elena_imagine_4.jpeg

ionescu_elena_imagine_6.jpeg

Concluzii

Am reusit cu ajutorul componentelor precizate mai sus sa creez un joc 2D, in care jucatorul trebuie sa supravietuiasca, incadrandu-se intr-un timp limita. Partea mai dificila in implementarea acestui joc a fost crearea jucatorului si a obstacolelor, deoarece a trebuit sa simulez efectul de miscare prin deplasarea obiectelor si prin schimbarea cadrelor.

Pot spune ca ma declar multumita de rezultate. Am descoperit pe parcurs ca nu este deloc greu sa lucrez cu un LCD si sa fac legatura intre componente. Tot ce trebuie este putina inspiratie 8-)

Download

Jurnal

  • 22 aprilie: inceperea realizarii paginii de wiki
  • 17 mai: inceperea realizarii montajelor
  • 18 mai: finalizarea realizarii montajelor si inceperea scrierii codului proiectului
  • 27 mai: finalizarea scrierii codului proiectului
  • 30 mai: finalizarea paginii de wiki

Bibliografie/Resurse

pm/prj2022/imacovei/survivalmaze.txt · Last modified: 2022/06/02 01:23 by elena.ionescu0405
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