Balance Game

Introducere

Balance Game este, dupa cum spune numele, un joc unde jucatorul trebuie sa balanseze placuta pentru a castiga. Idea proiectului a venit de la pasiunea mea pentru jocuri si de la multitudinea de jocuri pe telefon care au la baza controale de tipul tilt screen.

Descriere generala

Balance Game foloseste un LCD pentru a-i arata jucatorului o bila pe ecran. Algoritmul jocului aplica bilei o miscare aleatoare iar jucatorul va trebui sa incline placuta in directia inversa pentru a echilibra bila in mijlocul ecranului. Inclinatia placutei va fi calculata folosind un accelerometru conectat la placuta iar, optional, actiuni de tipul “start joc”, “reset joc” sau “pauza joc” vor fi facute prin intermediul unui sau mai multor butoane.

Dificultatea jocului este controlata prin intermediul miscarilor aleatoare care pot creste in intensitate si variatie si prin posibilitatea de aparitie pe LCD a unor obstacole care distrug bila. Natural, jocul se termina cand bila iese din ecran sau cand se loveste de un obstacol iar punctajul jucatorului este dat de cat a reusit (cate secunde) sa tina bila “in viata”.

Schema bloc

Hardware design

Lista componente

  • PCB PM2019 cu ATmega324
  • Acumulator (optional, pentru portabilitate)
  • Buton / Butoane de control
  • Accelerometru 3 axe
  • Display (LCD Nokia)
  • Fire conectoare

Schema electrica

Software design

Codul pentru proiect a fost scris in Notepad++, automatizat folosind un Makefile si uploadat pe placuta folosind bootloader-ul pus la dispozitie pe wiki-ul cursului de PM. Pentru compilare am folosit 2 variante de avr-g++ pentru Windows: initial am folosit varianta 4.3.3 pe care am luat-o de pe sourceforge, insa aceasta varianta nu continea biblioteca “time.h”, asadar am downloadat si folosit varianta 4.9.2 de pe un blog de specialitate.

Am folosit diferitele biblioteci puse la dispozitie in avr-libc, iar pe langa am folosit biblioteca de USART din laborator (pentru debug), o biblioteca de pe github pentru display pe LCD-ul Nokia 5110, biblioteca SPI din laborator si o alta biblioteca de pe github pentru controlul accelerometrului. Pe aceasta am modificat-o si redus-o pentru a fi potrivita jocului meu.

Am fost indecis asupra carui accelerometru sa folosesc si asupra carui protocol de comunicare - in final am folosit accelerometrul LIS3DH conectat via SPI 4-wire mode.

Jocul consta intr-o sectiune de initializare de biblioteci si variabile urmata de un game loop care odata la 10 milisec. citeste valorile date de accel. si misca pozitia bilei pe ecran in conformitate cu legile fizice. De asemenea, odata la 5 sec. este aplicata o noua acceleratie randomizata si apare un nou zid (obstacol) pe ecran. Cu cat trece mai mult timp, cu atat acceleratia va avea o amplitudine mai mare iar zidul va fi mai lung. Exista si o rutina de final de joc: in momentul in care bila iese din ecran sau se loveste de zid se va afisa un mesaj de final de joc si scorul jucatorului (timpul de la start, exprimat in secunde). Codul contine si niste functii helper pentru desenarea si mutarea mingii si zidului, obiecte care sunt impachetate in 2 structuri adecvate.

Rezultate si Concluzii

Jocul a fost complet si corect implementat cu exceptia butoanelor suplimentare pentru pauza/startul jocului. Jocul incepe in mod automat dupa RESET, dupa un timer afisat pe ecran. De asemenea, LCD-ul Nokia 5110 cumparat de mine a fost stricat (pinii interni ai LCD-ului nu faceau contact cum trebuie), astfel am fost nevoit sa imi prezint proiectul la PM fair folosind LCD-ul unui coleg de grupa (care folosea acelasi model de LCD).

Download

Bibliografie/Resurse

pm/prj2019/adragan/balance_game_2804.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