This shows you the differences between two versions of the page.
|
pm:prj2021:agrigore:connect4 [2021/05/27 14:33] 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ă descriptivă ==== | ==== 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/]] | * 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:conect4diag.png?500|}} | {{:pm:prj2021:agrigore:conect4diag.png?500|}} | ||
| Line 28: | 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 45: | 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 54: | 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 64: | 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 104: | 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]] | ||