Veronica RADU (78351) - GL Tron

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

GL Tron este un joc care testeaza viteza de reactie a unui jucator si abilitatea acestuia de a-si modifica strategia in functie de miscarile adversarului sau.

Jocul presupune existenta a doi jucatori si o harta pe care acestia se pot deplasa. La inceputul jocului acestia vor fi pozitionati in capete opuse ale hartii si vor continua sa se deplaseze, lasand pe harta traseul parcurs. Jocul se incheie cand unul dintre jucatori intersecteaza urma propriului traseu sau pe cea a adversarului. Cei doi jucatori se vor deplasa cu o viteza constanta pe tot parcursul jocului, dificultatea constand in crearea unui traseu care sa foloseasca cat mai eficient spatiul hartii si gasirea unei strategii de inconjurare a adversarului.

Am vrut sa implementez un joc captivant si care sa se bazeze pe dezvoltarea unui mod propriu de joc. De aceea cred ca un astfel de joc vine ca o provocare pentru oricine vrea sa isi testeze atat strategia, cat si coordonarea miscarilor.

Descriere generală

Fiecare jucator va avea doua butoane cu care se va putea deplasa la stanga sau la dreapta, incercand sa isi evite adversarul sau sa intre pe un traseu deja parcurs pe harta. Butoanele se vor afla pe placute suport si vor simula existenta a doua controllere.

Hardware Design

Componente necesare:

Denumire Număr Pret (lei) Sursa de achizitie
PCB + Componente de baza 1 ~50 www.optimusdigital.ro
Butoane 4 4 www.optimusdigital.ro
LCD Nokia 5110 1 20 www.olx.ro
Placă de Test 20×80 mm 2 6 www.optimusdigital.ro
Cablaj de test 70 x 90 mm 1 4 www.optimusdigital.ro
Fire Mamă-Mamă 30 cm 20 16 www.optimusdigital.ro
Cablu USB 30 cm 1 3.5 www.optimusdigital.ro
Header de pini (40p) 1 1 www.optimusdigital.ro
Fire de legatura 2 4 www.optimusdigital.ro
Modul Stabilizator de 3.3 V 1 6 www.optimusdigital.ro
LED Verde cu Lentile Difuze 3 1.5 www.optimusdigital.ro
LED Rosu cu Lentile Difuze 3 1.5 www.optimusdigital.ro
Rezistor 0.25W 220Ω 6 0.6 www.optimusdigital.ro

Software Design

Mediu de dezvoltare: Codul a fost compilat cu avr-gcc pe un sistem Linux Mint. Makefile-ul atasat in arhiva va genera fisierul main.hex ce va fi flash-uit pe placuta cu ajutorul scriptului go.sh.

Biblioteci folosite: Pentru implementare am folosit o bilbioteca pentru Nokia 5110 (avr-nokia5110)

Logica aplicatiei:
Aplicatia va porni si va afisa o simpla animatie de inceput in care sunt prezentate numarul de vieti al fiecarui jucator si o numaratoare inversa pana la inceputul jocului, asistata de un de joc de lumini. Atunci cand jocul incepe, la fiecare frame (la care am adaugat un delay de cateva milisecunde) se va randa un nou bloc de pixeli, simuland miscarea celor doi jucatori. Utilizatorii interactioneaza cu jocul prin cele doua console. De aceea, la fiecare frame, inaintea randarii unui bloc (reprezentat ca o matrtice de pixeli 2×2) nou se verifica daca un buton a fost apasat si daca un jucator si-a schimbat directia de deplasare (cu functia 'change_dir').

Pentru a da un plus de dinamica jocului, am introdus obstacole care sunt generate random pe locurile libere din harta. Acestea sunt create in functia 'generate_obstacles' si sunt recreate dupa un anumit numar de frame-uri.

Un jucator isi va pierde din numarul de vieti daca va intra intr-un obstacol, in adversar, va iesii din afara teritoriului sau se va ciocni cu sine. Aceste tipuri de coliziuni sunt tratate in functiile 'check_collision' si 'check_border'. De asemenea, in ultima versiune a jocului am adaugat cele 6 led-uri, cate 3 pentru fiecare jucator, pentru a ilustra numarul de vieti pe care un jucator le mai are in joc. Astfel, atunci cand un jucator intra intr-o coliziune, se va apela functia 'lost_life', care in functie de numarul jucatorului va stinge unul din led-urile prezente pe placuta suport.

Rezultate Obţinute

Am obtinut un joc functional, amuzant ce implica doi jucatori (8-O vs 8-o) amatori de competitie. In imaginile de mai jos sunt suprinse cateva momente dintr-un joc, insa nu pot sa reflecte realitatea ^_^. GL Tron este un joc aparent simplu, insa care testeaza imaginatia celor doi competitori. Un jucator poate incerca sa il inconjoare si sa il pacaleasca pe adversarul sau, insa ar putea sfarsi prin a fi prins in propria capcana. m(

Concluzii

 E cliseic sa spun ca a fost un proiect interesant, insa chiar acesta este adevarul. Am invatat sa lipesc si sa dezlipesc fire si nu a fost chiar cel mai usor lucru, necesita atentie, precizie si muuulta rabdare…

Insa un lucru e clar, a fost primul proiect in care am realizat si partea de hardware si partea de software si acest lucru iti ofera in final o satisfactie mult mare. :-O Au fost multe momente in care am avut senzatia ca am stricat ceva si ca nu mai poate fi reparat, insa cu atentie si rabdare toate “bug-urile” s-au rezolvat in final.

In concluzie, PM, GLTron si fludor sunt cuvintele care descriu cel mai bine acest proiect.^_^

Download

Arhiva de mai jos contine:

  • Fisier ce contine codul sursa pentru jocul GL Tron: main.c
  • Fisiere ce contin biblioteca pentru LCD Nokia 5110: nokia5110.h, nokia5110.c
  • Fisierul Makefile pentru compilarea si generarea fisierului main.hex
  • Scriptul pentru incarcarea fisierului main.hex pe placuta ATMega324P: go.sh

gltron_pm2018.zip

Jurnal

17.04.2018: Achizitionarea LCD-ului si a componentelor de baza.
24.04.2018: Inceperea lipirii componentelor pe placa de baza.
05.05.2018: Finalizarea placutei si testarea functionarii pe baza alimentarii si a led-ului de power.
08.05.2018: Incarcarea bootloader-ului.
15.05.2018: Lipirea LCD-ului pe placuta suport.
16.05.2018: Modulului pentru a limita tensiunea de alimentare a LCD-ului de la 5V (furnizatati de placuta) la 3.3V.
18.05.2018: Lipirea butoanelor pe cele doua placute (cate una pentru fiecare jucator) si documentarea desore modul de legare al LCD-ului la placuta.
19.05.2018: LCD-ul nu a functionat, se lumina, insa nu afisa niciun mesaj. Solutia: am imprumutat un alt LCD, pentru a fi sigura ca problema era LCD-ul si nu placuta in sine. Acesta a functionat, legand firele intocmai cum erau legate la LCD-ul original.
20.05.2018: Implementarea primei parti a jocului: limitarea unui bloc la o matrice de pixeli 2×2, realizarea functiilor pentru schimbarea directiei si miscarea efectiva a jucatorilor pe harta.
21.05.2018: Adaugarea vietilor pentru fiecare jucator, crearea obstacolelor generate random si a functiilor pentru verificarea coliziunilor.
22.05.2018: Identificarea unui fir intr-o lipitura imprefecta care s-a desprins. Dupa refacerea legaturii si acest LCD a functionat.
23.05.2018: Idee noua: led-uri pentru a indica numarul de vieti pe care un jucator le are la un momement dat ⇒ achizitionare 6 led-uri si 6 rezistente.
24.05.2018: Lipirea led-urilor si includerea lor in logica implementarii.
24.05.2018: Refacerea schemei electrice.
24.05.2018: Finalizarea documentatiei.

Bibliografie/Resurse

Resurse software

Resurse hardware

  • Realizarea schemei electrice: overview
  • Documentația în format PDF
pm/prj2018/aandreica/gltrone.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