Cătălin MITITIUC (25134) - Snake Game pe LCD

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul consta in implementarea jocului Snake pe un LCD. Initial pe ecran va aparea scris Snake, iar in urma apasarii unui buton de start, jocul va incepe. Dimensiunea sarpelui va fi de 3 unitati(patratele), insa daca acesta reuseste sa manance din mancarea ce va fi distribuita random pe ecran atunci sarpele isi va creste dimensiunea cu o unitate.

Deplasarea sarpelui se va face folosind patru butoane(sus, jos, stanga, dreapta), iar in coltul din dreapta voi tine scorul la care s-a ajuns, acesta fiind reprezentat de numarul de unitati pe care sarpele a reusit sa le manance. Daca sarpele va intra in unul din cele patru laturi sau se va manca singur atunci jocul se va sfarsi.

Scopul proiectului este de a realiza un joc cu ajutorul placutei PM-2016 si pentru a aprofunda cunostintele acumulate pana acum la aceasta materie si pentru a oferi o forma de amuzament celor pasionati de jocuri.

Descriere generală


Butoanele reprezinta inputul, ecranul LCD reprezinta outputul, iar microcontroller-ul Atmega324 este cel care ajuta la deplasarea sarpelui si la actualizarea noii sale pozitii pe ecran.

Hardware Design

Componente de baza

Index Denumire Cantitate Cod
1 placa de baza PM2016 1 PM2016
2 microcontroller ATMEGA324 1 ATMEGA324PA-PU
3 soclu microcontroller 1 LC40
4 dioda Zener 2 BZX55C3V3
5 led 6mm rosu 2 CLL-50221
6 quartz 16MHz 1 Q16.000 MHz HC-49S
7 rezistenta 470 3 RW25CF 470R
8 rezistenta 100 2 RW25CF 100R
9 rezistenta 1k5 1 RW25CF 1K5
10 rezistenta 10k 1 RW25CF 10K
11 conector USB-B 1 USB B-PCB-R
12 condensator ceramic 100nF 3 CML 100nF 50V NP0
13 condensator ceramic 15pF 2 CML 15pF 50V NP0
14 push-button 2 TS-06E (TS-3)
15 barete mama-mama 32 -


Componente particulare

Index Denumire Cantitate Cod
1 LCD grafic Nokia 5510 1
2 push-button 5 TS-06E (TS-3)
3 placa de test 1
4 fire conductoare 20


Schema electrica

Software Design

  • Mediul de dezvoltare folosit: Programmers Notepad[AVR]
  • Compilarea s-a realizat cu: WinAVR
  • Incarcarea programului pe placuta s-a realizat cu Bootloaderul disponibil pe wiki: wiki_bootloader
  • Biblioteca folosita este cea pentru LCD Nokia 3310 care este compatibila si pentru 5510: Quantum Torque

Jocul incepe prin afisarea unui meniu din care se poate face selectia modului de joc cu ajutorul butoanelor sus, jos. Atunci cand se parcurge meniul, va aparea o sageata in dreptul optiunii care marcheaza unde se afla utilizatorul in meniu. Dupa ce s-a luat hotararea se va apasa butonul de selectie, iar jocul va incepe. Cele 3 optiuni disponibile sunt:

  • No Border: nu avem borduri ale ecranului, iar sarpele daca intra in unul din cei 4 pereti va aparea pe partea opusa;
  • Border: exista borduri, in cazul in care sarpele ia contact cu acestia, jocul se va sfarsi;
  • Bonus: avem mai multe puncte de mancare, initial nu avem borduri, dar cand se ajunge la un punctaj > 40 acestea vor aparea;

Algoritmi si structuri de date

Programul nu are un algoritm complicat, se cicleaza intr-o bucla in care se face actualizarea noii pozitii a sarpelui, se verifica de fiecare data daca sarpele a ajuns la mancare pentru a-i mari dimensiunea, daca s-a mancat sau daca este in contact cu peretii, daca e cazul si se genereaza o noua locatie pentru mancare daca aceasta a fost mancata.

Utilitati si detalii de implementare

Utilitati minime

/* optiunile din meniu */
#define NO_BORDER 0
#define BORDER 1
#define BONUS 2

/* dimensiunea si pozitia initiala a sarpelui */
#define START_SNAKE 4
#define START_X 60
#define START_Y 10

/* dimensiunea unui Block */
#define SIZE 2

/* numarul de mancare bonus */
#define NUM_OF_BONUS_FOOD 5

Tipuri de date

/* structura Block */
typedef struct {
	char x;
	char y;
} Block;

/* directiile posibile ale sarpelui */
typedef enum {
	UP = 0,
	LEFT = 1,
	RIGHT = 2,
	DOWN = 3
} direction;

Rezultate Obţinute



Concluzii

A fost un proiect interesant si mi-a placut sa lipesc componentele pe placuta. La partea de soft, am spus initial ca voi avea intr-un colt scorul in timpul jocului, dar fiindca ecranul este mic si ar fi insemnat sa mai “tai” din aria de joc, am ales sa afisez scorul optinut la sfarsit dupa incheierea jocului. Cu toate acestea, nu imi propusesem initial sa fac 3 metode de joc, ultima fiind cea mai interesanta pentru ca evolutia jocului e mai rapida.

Download

Arhiva arhiva contine:

  • biblioteca de LCD Nokia 3310/5110 (lcd.c, lcd.h)
  • aplicatia propriu-zisa (main.c, makefile)
  • README cu descrierea implementarii

Jurnal

  • Saptamana 8: mi-am ales proiectul
  • Saptamanile 8-10: am lipit placa de baza
  • Saptamanile 9-11: cautarea si cumpararea pieselor
  • Saptamanile 11-12: lipire butoane si barete pe placuta de test
  • Saptamanile 13-14: implementarea codului

Bibliografie/Resurse

pm/prj2016/amusat/snake_game_lcd.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