Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 ş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 ș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 ș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]]
  
  
pm/prj2021/agrigore/connect4.1622115216.txt.gz · Last modified: 2021/05/27 14:33 by mihaela.nuta1207
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