Emilia-Elena PALAGHIŢĂ (78278) - Connect4
Autorul poate fi contactat la adresa: Login pentru adresa
Introducere
Proiectul presupune realizarea jocului Connect4 folosind un LCD grafic. Scopul acestuia este familiarizarea cu realizarea unui proiect care integrează atât partea hardware, cât și software. Jocul este implementat avand modurile singleplayer si multiplayer, cu posibilitatea de a alege culoarea preferata si dificultatea jocului.
Descriere generală
Hardware Design
Lista de componente:
Denumire | Număr |
Placa de bază PM 2018 | 1 |
Microcontroller ATmega 324 | 1 |
Modul LCD SPI ILI9163 | 1 |
LED | 2 |
Buton | 3 |
Buzzer | 1 |
Software Design
Proiect a fost realizat in C++, deoarece am gasit biblioteca pentru LCD doar sub aceasta forma.
Continut surse:
digitalpin - Folder ce contine DigitalPin.cpp
ili9163 - Folder ce contine ii9163lcd.cpp, colors.h in care sunt definite culorile si font5x8.h
spi - Folder ce contine spi.cpp
main.cpp - sursa proiectului
Makefile
README
Biblioteca folosita pentru LCD a fost descarcata de aici: spi
Functii folosite din cadrul bibliotecii:
void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t colour);
void drawCircleFilled(int16_t xCentre, int16_t yCentre, int16_t radius, uint16_t colour);
void drawClear(uint16_t colour);
void setRotation(Rotation rotation);
void drawString(uint16_t x, uint16_t y, uint8_t size, uint16_t colour, uint16_t bg, const char *string);
Functii implementate in sursa principala:
bool isRightBtnPressed() - verifica daca butonul din dreapta a fost apasat
bool isLeftBtnPressed() - verifica daca butonul din stanga a fost apasat
bool isOkBtnPressed() - verifica daca butonul OK a fost apasat
void move_right() - muta discul la dreapta
void move_left() - muta discul la stanga
void PLAYNOTE(int duration, int frequency) - folosit de buzzer
bool game_won() - verifica daca jocul a fost castigat de jucatorul curent
bool game_draw() - verifica daca este egalitate
void port_init() - initiaza porturile pentru microcontroller
void draw_circles() - deseneaza discurile conform hartii
void draw_map() - deseneaza harta
void game_type_menu() - meniul pentru alegerea modului de joc: singleplayer sau multiplayer
void difficulty_menu() - meniul pentru dificultate: easy sau normal
void color_menu() - meniul pentru alegerea culorii: rosu sau galben
bool update_map(int col) - introduce un nou disc in harta
void move_tiles(int i, int j) - creeaza un efect dragut atunci cand este lansat un disc
void display_winner() - afiseaza castigatorul jocului
void play_singleplayer()
void play_multiplayer()
Rezultate Obţinute
Jocul presupune implementarea modurilor Singleplayer si Multiplayer, in fiecare din cadrul acestora putand fi aleasa culoarea dorita a jucatorului.
In cazul in care se alege modul multiplayer, player 1 va avea posibilitatea de a alege o culoare si automat player 2 va primi cea de-a doua culoare. Pe parcursul turei unui jucator, un LED de culoare rosie sau galbena se va aprinde pentru a evidentia care jucator este cel curent. La fiecare miscare de disc, buzzer-ul va scoate un sunet iar atunci cand un disc este lansat pe o coloana, se verifica daca aceasta este plina si daca nu se pozitioneaza in prima casuta disponibila apoi buzzer-ul iar va scoate un sunet.
In modul singleplayer jucatorul poate alege dificultatea jocului: easy sau normal. Modul de joc este acelasi ca cel de mai sus.
Concluzii
A fost un proiect din care am avut multe de invatat: cum se programeaza un microcontroller, cum se trateaza intreruperi pe butoane, cum se foloseste un buzzer sau cum se citeste un datasheet. La proiect am lucrat cu drag si consider ca efortul depus a meritat, rezultatul fiind un joc functional Connect4 cu mici imbunatatiri fata de cel clasic.
Download
Jurnal
22 Aprilie - Crearea paginii si alegerea proiectului, realizarea schemei bloc si descrierea pe scurt a proiectului ales
6 Mai - Realizarea schemei electrice
23 Mai - Documentatia finala
25 Mai - Prezentare proiect
Bibliografie/Resurse
-
-
Biblioteca LCD ILI9163 -
spi
Documentația în format
PDF