This shows you the differences between two versions of the page.
pm:prj2021:agrigore:connect4 [2021/05/18 12:23] mihaela.nuta1207 |
pm:prj2021:agrigore:connect4 [2021/06/03 14:38] (current) mihaela.nuta1207 |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Connect4 ====== | ====== Connect4 ====== | ||
+ | |||
===== Autor ===== | ===== Autor ===== | ||
[[mihaela.nuta1207@stud.acs.upb.ro|Nuță Mihaela-Mădălina]] | [[mihaela.nuta1207@stud.acs.upb.ro|Nuță Mihaela-Mădălina]] | ||
+ | |||
+ | |||
===== Introducere ===== | ===== Introducere ===== | ||
* Scopul proiectului este de a implementa, folosind un ecran LCD, jocul Connect4 | * Scopul proiectului este de a implementa, folosind un ecran LCD, jocul Connect4 | ||
Line 8: | Line 11: | ||
* Ideea de pornire a fost implementarea unui joc 1 vs. 1 care să fie cât de cât interactiv. =) | * Ideea de pornire a fost implementarea unui joc 1 vs. 1 care să fie cât de cât interactiv. =) | ||
* Modul de control al jocului va fi: butonul verde, fiind un buton de selecție, va fi folosit pentru a selecta meniurile jocului și pentru a selecta coloana în care jucătorul va dori să dea drumul discului. Pentru a schimba coloana, jocătorul va apăsa pe butonul roșu din stânga sau pe butonul roșu din dreapta. | * Modul de control al jocului va fi: butonul verde, fiind un buton de selecție, va fi folosit pentru a selecta meniurile jocului și pentru a selecta coloana în care jucătorul va dori să dea drumul discului. Pentru a schimba coloana, jocătorul va apăsa pe butonul roșu din stânga sau pe butonul roșu din dreapta. | ||
- | ==== Poză reprezentativă ==== | + | |
+ | ==== Poză descriptivă ==== | ||
{{:pm:prj2021:agrigore:connect4.jpg|}} | {{:pm:prj2021:agrigore:connect4.jpg|}} | ||
+ | * Link către reguli: [[https://www.gamesver.com/the-rules-of-connect-4-according-to-m-bradley-hasbro/]] | ||
+ | |||
+ | |||
+ | |||
+ | |||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
+ | |||
==== Schemă bloc ==== | ==== Schemă bloc ==== | ||
- | {{:pm:prj2021:agrigore:diagrama.png?500|}} | + | {{:pm:prj2021:agrigore:conect4diag.png?500|}} |
==== Funcționalitate ==== | ==== Funcționalitate ==== | ||
Plăcuța va primi input de la 3 butoane de control: | Plăcuța va primi input de la 3 butoane de control: | ||
Line 27: | Line 37: | ||
* dupa câteva secunde, jucătorii sunt anunțați că pot da **replay** la joc apăsând butonul verde | * dupa câteva secunde, jucătorii sunt anunțați că pot da **replay** la joc apăsând butonul verde | ||
* butonul de replay duce jocul în starea inițială (meniul principal de unde se poate alege începerea jocului) | * butonul de replay duce jocul în starea inițială (meniul principal de unde se poate alege începerea jocului) | ||
+ | |||
Outputul va fi realizat cu ajutorul: | Outputul va fi realizat cu ajutorul: | ||
* un modul LCD SPI | * un modul LCD SPI | ||
Line 44: | Line 55: | ||
* un buzzer pasiv cu diverse sunete | * un buzzer pasiv cu diverse sunete | ||
* leduri care vor fi in sincronizare cu starea jocului (doar de decor) | * leduri care vor fi in sincronizare cu starea jocului (doar de decor) | ||
+ | |||
+ | |||
+ | |||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
+ | |||
==== Listă de piese ==== | ==== Listă de piese ==== | ||
* Arduino | * Arduino | ||
Line 53: | Line 68: | ||
* leduri | * leduri | ||
* 2 x breadbord | * 2 x breadbord | ||
+ | |||
==== Schema conectare LCD - Uno r3 și butoane ==== | ==== Schema conectare LCD - Uno r3 și butoane ==== | ||
{{:pm:prj2021:agrigore:schema_placa-lcd-v2.jpg?600|}} | {{:pm:prj2021:agrigore:schema_placa-lcd-v2.jpg?600|}} | ||
- | ==== Diagrame de semnal ==== | + | * După cum se observă și în imagine, ecranul LCD trebuie conectat astfel: |
- | ==== Rezultatele simulării ==== | + | |
+ | ^ Pin LCD ^ Pin Arduino ^ | ||
+ | |LED |3.3V| | ||
+ | |SCK |13 | | ||
+ | |SDA |11 | | ||
+ | |A0 sau DC|9 | | ||
+ | |RESET |8 | | ||
+ | |CS |10 | | ||
+ | |GND |GND | | ||
+ | |VCC |5V | | ||
+ | |||
===== Software Design ===== | ===== Software Design ===== | ||
* mediu de dezvoltare - **Arduino Ide** | * mediu de dezvoltare - **Arduino Ide** | ||
Line 63: | Line 90: | ||
* **TFT.h** - librărie Arduino pentru ecran tft | * **TFT.h** - librărie Arduino pentru ecran tft | ||
* **SPI.h** - librărie Arduino pentru comunicare SPI având ca master plăcuța Arduino | * **SPI.h** - librărie Arduino pentru comunicare SPI având ca master plăcuța Arduino | ||
- | * algoritmi şi structuri | + | * Un exemplu Arduino built-in: [[https://www.arduino.cc/en/Tutorial/BuiltInExamples/toneMelody]] |
- | * surse şi funcţii implementate | + | |
+ | ==== Diagrama stărilor ==== | ||
+ | {{:pm:prj2021:agrigore:semnaleconnect4.png?700|}} | ||
+ | * **BEGIN**: se afișează pe ecran mesajul: __Press green to play__ | ||
+ | * **GAMEPLAY**: fiecare jucător, rând pe rând, se mișcă stânga dreapta cu cele 2 butoane roșii. Selectează coloana preferată cu butonul verde. Pe ecran este afișat un grid de 6x7, discul care urmează a fi pus in grid, cât și un mesaj care informează despre rândul curent. Acest mesaj este: **Player turn: 0/1**, unde 0 și 1 sunt colorate corespunzător. După ce discul este pus, noul disc se va repoziționa în mijlocul gridului | ||
+ | * **WIN SCREEN**: după ce un jucător căștigă, după un delay, se șterge rândul curent și se afișează cine este câștigătorul printr-un mesaj intermitent. Totodată, câștigul este anunțat printr-o melodie | ||
+ | * **REPLAY SCREEN**: dupa câteva secunde, pe ecran apare: **PRESS GREEN TO PLAY**. După ce se apasă pe butonul verde, jocul repornește, iar starea va deveni starea inițială, adică **BEGIN** | ||
+ | |||
+ | ==== Implementare ==== | ||
+ | * Pe baza butoanelor, jocul poate fi urmărit ca un automat de stări. | ||
+ | * În loop se pot observa aceste stări: GAME_INIT, GAME_BEGINS, GAME_STARTED, cât și alte variabile de stare: player_switched (care imi spune dacă un player și-a realizat tura, eu ar trebui să afișez pe ecran ceea ce el a făcut, iar următorul jucător poate continua) | ||
+ | * Am ales să folosesc destul de multe variabile de stări, înafară de acestea, deoarece am dorit să nu desenez la fiecare apel de loop încontinuu aceleași forme care oricum erau desenate. | ||
+ | * În funcție de starea jocului, în anumite situații, am ales să redesenez ceea ce voiam să șterg cu culoarea background-ului, deoarece era mai costisitor să dau clear la ecran, după care să redesenez totul (în primul rând ar fi trebui să țin minte ce am desenat și în al 2-lea rând ecranul ar fi făcut un flicker constant, ceea ce ar fi fost urât). | ||
+ | * Se poate observa că în cod sunt foarte multe define-uri, deoarece am vrut să economisesc cât mai multă memorie, define-urile fiind folosite doar in etapa de preprocesare | ||
+ | |||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | * {{:pm:prj2021:agrigore:1.jpeg?400|}} | ||
+ | * {{:pm:prj2021:agrigore:2.jpeg?400|}} | ||
+ | * {{:pm:prj2021:agrigore:3.jpeg?400|}} | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | * Jocul este unul practic, realizat destul de low-cost. Am reușit să realizez tot ce mi-am propus, ba chiar am adăugat și lucruri în plus (la nivel de efect/software) | ||
+ | * Dacă nu ai jocuri, îți faci LOL | ||
===== Download ===== | ===== Download ===== | ||
+ | {{:pm:prj2021:agrigore:nuta_mihaela_madalina_334cb_connect4.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
* 26 aprilie - creare pagină pe ocw | * 26 aprilie - creare pagină pe ocw | ||
Line 78: | Line 124: | ||
* Funcționalitate | * Funcționalitate | ||
* Listă de piese | * Listă de piese | ||
- | * 15 mai - prototip butoane (butoanele sunt funcționale) | + | * 15 mai |
- | * 16 mai - Hello World pe ecranul lcd controlat de butoane | + | *prototip butoane (butoanele sunt funcționale) |
- | * 17 mai | + | * Hello World pe ecranul lcd controlat de butoane |
+ | * 16 mai | ||
* ecran de start | * ecran de start | ||
* ecran de joc | * ecran de joc | ||
* chenarul jocului (tabla) | * chenarul jocului (tabla) | ||
* grid-ul jocului (al tablei) | * grid-ul jocului (al tablei) | ||
- | * 18 mai - funcționalitatea jocului e completă | + | * 17 mai - funcționalitatea jocului e completă |
* bilele cad în locul selectat | * bilele cad în locul selectat | ||
* fiecare jucător are acum culoarea lui asignată | * fiecare jucător are acum culoarea lui asignată | ||
Line 92: | Line 139: | ||
* funcționalitate de replay | * funcționalitate de replay | ||
* {{:pm:prj2021:agrigore:connect4_-_functional.jpeg?500|}} | * {{:pm:prj2021:agrigore:connect4_-_functional.jpeg?500|}} | ||
+ | * 18 mai | ||
+ | * led RGB care se colorează în funcție de rândul jucătorilor si starea jocului | ||
+ | * buzzer care se alătură apăsării butoanelor | ||
+ | * se aude un sunet atunci când există o victorie | ||
+ | * {{:pm:prj2021:agrigore:led.jpeg?300|}} | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
Line 97: | Line 149: | ||
* documentație librărie tft.h: [[https://www.arduino.cc/en/Reference/TFTLibrary]] | * documentație librărie tft.h: [[https://www.arduino.cc/en/Reference/TFTLibrary]] | ||
* librăria PinChangeInt: [[https://code.google.com/archive/p/arduino-pinchangeint/downloads]] | * librăria PinChangeInt: [[https://code.google.com/archive/p/arduino-pinchangeint/downloads]] | ||
+ | * sunete: [[https://www.arduino.cc/en/Tutorial/BuiltInExamples/toneMelody]] | ||
+ | * PDF pagina wiki: [[https://ocw.cs.pub.ro/courses/pm/prj2021/agrigore/connect4?do=export_pdf|Connect4]] | ||