Snake Game

Introducere

Proiectul ales consta in realizarea clasicului joc Snake, redat pe display-ul unui clasic Nokia 3310.

Am ales acest proiect deoarece sincer nu prea am avut multa inspiratie pentru un proiect si am zis de ce sa nu fac un mic joculet de care sa ma bucur.

Descriere generala

Jocul va fi redat pe un display Nokia 3310 si va folosi 4 butoane pentru control. Scorul general va fi redat pe un afisaj in 7 segmente cu 4 cifre, iar jocul va fi insotit de niste sunete clasice de arcade. Pe langa cele 2 butoane de control, am adaugat si 2 butoane pentru startul jocului, respectiv pentru pauza/reset.

Hardware Design

Lista de piese:

  • ATmega 324a - Placuta PM
  • Display Nokia 5110 (initial am vrut 3310, dar am gasit 5110)
  • Afisaj 7 Segmente, 4 Cifre
  • Buzzer Pasiv
  • 6 Butoane
  • 1 rezistenta 100 ohm
  • Placuta de cablaj
  • Breadboard
  • 12 fire mama-mama
  • 19 fire mama-tata
  • 2 jumpere de breadboard (+inca 9 pentru conectare pe spatele placutei de cablaj, nu am avut cablu special pentru asta)

Schema Electrica:

Software Design

Dificultatea proiectului a constat mai ales in Designul Software.

Acesta este redat pe un ecran de 84×48 pixeli. Fiecare punct realizat in Snake este o matrice 2×2 de pixeli.

Initial, sarpele se genereaza din punctul central al display-ului, crescand progresiv pana la dimensiunea de 10 puncte. Ulterior este responsabilitatea jucatorului sa ajute la cresterea sarpelui prin strangerea punctelor ce apar aleator pe harta. Scopul jocului este de a aduce sarpele la o dimensiune de 256 de puncte, moment in care se considera ca “ai castigat jocul”. Motivul dimensiunii de 256 este dimensiunea mica a memoriei uC-ului, de 2KB. Acest detaliu pare initial banal, dar are a avut un cuvant foarte important de zis in strategia de implementare a jocului.

Din punct de vedere al controlului, jocul este controlat prin 4 butoane de miscare si 2 de stare. Apasarea acestor butoane genereaza intreruperi la nivelul programului, intreruperi ce modifica vectorul de directia al sarpelui, respectiv schimba starea curenta a jocului (il porneste/pune pauza/reseteaza jocul).

Pe langa acestea, pentru afisarea scorului pe afisajul cu 7 segmente a fost necesara utilizarea intreruperilor timer-ului 0 pentru a comuta intre cifrele afisajului, deoarece acestea impart aceleasi linii de date.

Rezultate Obţinute

zwZPVsiepTs (pare rau de zgomot, a fost filmat chiar la PM Fair :D)

Concluzii

A fost interesant sa experimentez cum pot imbina diverese produse hardware cu partea de soft pentru a realiza ceva interesant si amuzant. Totodata, pentru prim data in facultatea a vazut consecintele unui algoritm ineficient spatial, iar consecintele trebuie sa recunosc ca nu au fost placuta - rescrierea unei bune bucati din cod.

Nu in ultimul rand, vreau sa mentionez faptul ca proiectul nu ar trebui subestimat fiindca este “un simplu snake”. Spre surprinderea multora probabil, partea software a jocului este mai complexa decat pare :)

Download

<WRAP center round download 60%> 333ca_popabogdan_proiectpm.zip

placuta.sch </WRAP>

Jurnal

  • 20 Aprilie 2019 - Pagina Creata
  • 6 Mai 2019 - Schema Electrica
  • 24 Mai 2019 - Finalizare Proiect
  • 24 Mai 2019 - Prezentare Proiect

Bibliografie/Resurse

pm/prj2019/imatesica/snake_remastered.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