Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul are ca scop implementarea jocului Snake folosind un controller ATmega324. Afisajul va fi pe un LCD Nokia (5510).
Jocul “Snake” e de tip single-player in care jucatorul foloseste 4 butoane pentru a schimba directia sarpelui. Va mai exista inca 1 buton pentru selectie. Scopul sau e de a creste sarpele cat mai mult posibil prin hranirea sa, iar lovirea de un obstacol va duce la game over. El a fost prezent pe multe telefoane mobile inca de la inceputul dezvoltarii lor. De asemenea, un speaker va reda evenimente precum: apasarea unui buton in meniu, cand sarpele mananca si la game over.
Sunt 2 grade de dificultate:
Pentru modul easy jucatorul are 3 vieti.
Schema bloc
Componente de baza
Nr Crt | Denumire | Cantitate |
---|---|---|
1 | ATMEGA324P-20PU | 1 |
2 | USB B-PCB-R | 1 |
3 | Quartz Q16.000 MHz HC-49S | 1 |
4 | LED`s OSR6NU3134A | 2 |
5 | PCB Pin head HN1X40 | 1 |
6 | PCB Pin head HN2X20 | 1 |
7 | Tact Switches TS-06E (TS-3) | 2 |
8 | RW25CF 100R | 3 |
9 | RW25CF 470R | 3 |
10 | RW25CF 1.5K | 1 |
11 | RW25CF 10K | 1 |
12 | Capacitor CML 15pF 50V NP0 | 2 |
13 | Capacitor CML 100nF 50V X7R P2.5 | 3 |
14 | IC sockets LC40 ROHS | 1 |
15 | Connector MJ14 | 1 |
16 | Zener Diode BZX55(79)C3V3 MBR | 2 |
Componente aditionale
Nr Crt | Denumire | Cantitate |
---|---|---|
1 | Regulator 12V-5V | 1 |
2 | Mufa alimentare | 1 |
3 | Condensator 100nF | 1 |
4 | Condensator 10uF | 1 |
5 | Regulator 5.3~18vin 3.3vout | 1 |
6 | Condensator 10uF | 1 |
7 | Rezistenta 1ko | 3 |
8 | Rezistenta 10ko | 1 |
9 | Butoane | 5 |
10 | Buzzer | 1 |
11 | Condensator 100uF | 1 |
12 | Perfboard | 1 |
13 | LCD Nokia 5510 | 1 |
Schema electrica
Am schimbat putin schema electrica: butoanele le-am legat la PORTA0..4, iar LCD-ul la PORB si interfata SPI GND.
Mediul de dezvoltare folosit: Programmer`s Notepad. Codul a fost compilat cu winAVR. Libraria folosita pentru display a fost cea de la LCD Nokia 3310, compatibila si cu 5510.
S-a folosit o structura cu rolul de a retine block-urile de pe display, obiectele fiind vectori ale acestei structuri. Am plecat de la un define DIM 2. Pentru valoarea 1 mi s-a parut prea mic afisajul. Obiectele sunt: sarpele, peretii laterali pentru modul HARD si mancarea. Cum am specificat mai sus, avem 2 nivele de dificultate: easy si hard. Pentru modul “hard” am construit peretii pe extremitati. La modul easy, jucatorul are disponibile 3 vieti. La inceput apare meniul, jucatorul alege modul de joc, iar mai departe se desfasoara efectiv gameplay-ul. Cand se loveste de obstacol, apare un mesaj “Game over” si scor-ul obtinut. Jucatorul poate alege sa revina in meniu prin apasarea butonului superior.
Deplasarea sarpelui se face prin mutarea blocurilor in directia data de capatul sarpelui, directie influentata de alegerea jucatorului. Mancarea e generata random, cu verificarea la nivel “Hard” ca nu cumva sa apara in ziduri. Efectul de miscare e generat printr-o parcurgere a unei functii “snake_delay”.
Probleme: Nu am reusit sa implementez functionalitatea buzzer-ului. Initial am cumparat unul care se alimenta la 12V(am vazut tarziu), iar placa mea e pusa pe 3V3. Mi-am luat in ultima zi un modul cu buzzer, dar n-am facut un cod bun, asa ca l-am scos definitiv.
Ca si observatie, butonul de select e mult prea sensibil, face dublu click daca nu-i apasat atent.
Poze: TODO.
Link: pmfinal.zip