Autor: Boantă Dragoș-Petru
Grupa: 334CD
Proiectul constă în realizarea unei clone jocului vide Space Invaders. In joc, jucătorul controlează un tanc care se mișcă orizontal în partea de jos a ecranului. Deasupra, extratereștrii sunt aranjați în formații și se deplasează în grup dintr-o parte în alta, coborând treptat către jucător. Scopul este de a distruge toți extratereștrii trăgând proiectile către ei, evitând în același timp focul inamic. Pe ecran există și scuturi (bariere) care pot proteja temporar jucătorul, dar acestea se degradează atât de la focul inamic, cât și de la propriile proiectile. Pe măsură ce elimină extratereștrii, viteza lor de deplasare și frecvența atacurilor cresc, crescând dificultatea jocului.
Mi-am dorit să realizez un joc de tip arcade, care să fie popular și ușor de jucat chiar și pe un ecran mai mic. Am ales Space Invaders deoarece este un joc intuitiv, ușor de înțeles pentru oricine, dar în același timp suficient de provocator încât să-ți mențină interesul și să nu devină plictisitor prea repede.
Nume componenta | Model | Protocol | Datasheet |
---|---|---|---|
Microcontroller | Arduino UNO S3/ATmega328P | - | ATmega328P Datasheet |
Joystick Sensor | HW-504 | ADC | Joystick Datasheet |
Display LCD 240xRGBx320 | TPM408-2.8 | SPI/ST7789V | ST7798V Datasheet |
Display LCD 16×2 | HW-061 | I2C | LCD Datasheet |
2 x Buzzer | Buzzer pasiv 5V | PWM | - |
Buton | Push Button | GPIO | - |
Rezistori | 4×440, 4x1k, 1x10k | - | - |
Breadboard | - | - |
M-am folosit de PlatformIO pentru dezvoltarea proiectului, codul fiind scris in C++
Majoritatea funcţiilor de comunicare cu hardware-ul au fost preluate din laborator (Si modificate pentru configuratia mea).
Pentru comunicarea cu Display-ul LCD 240xRGBx320 prin SPI, m-am folosit de librăria Adafruit ST7735 and ST7789V. A trebuit modificată putin, deoarece aceasta folosea in mod normal functia de delay de la un mediu arduino, si a trebuit sa fie schimbata sa o folosesca cea din PltaformIO.
Fiecare componenta hardare are cate un header si un fisier sursa in care se afla codul prin care comunic cu componenta respectiva.
Pe langa aceasta, mai sunt fisierele game.h si game.cpp care contin toate functiile pentru atat logica jocului, cat si cele care se ocupa de desenarea obiectelor jocului pe ecran.
Pentru a putea desena obiectele pe ecran, salvez informatiile despre ce pixeli trebuie desenati intr-o zona in sprites.h, respectiv sprites.cpp.
main.cpp se ocupa de rularea jocului, prin preluarea input-ul utilizatorului si afisand pe ecran rezultatul acestuia, cat si pentru a afisa pe ecran in ce stare este jocul: MENU, GAME, DEAD, OVER sau NEXT. Jocul ruleaza la 30 de cadre pe secunda.
Repository Github
Resurse Hardware
Resurse Software