Connect 4

Autor: Lupuleasa Marian-Paul 336CA

Introducere

Descrierea Proiectului

Un joc multiplayer (2 persoane) în care jucătorii au alocate piese de o anumită culoare și le vor folosi pentru a completa, alternativ, un grid 4×4. Câstigă primul jucător care face o secvență de 4 piese aliniate.

Scopul Proiectului

Scopul proiectului este agrementul. Acest joc se poate juca în 2, ceea ce oferă posibilitatea socializării.

Ideea de Bază

Idee de bază de la care am pornit a fost dorința de a face un joc interactiv, nu foarte simplu, pe care să îl pot dezvolta prin adăugare de funcționalități noi. Inițial am vrut să creez un joc de X și O, dar ideea finală este puțin mai complexă datorită mărimii spațiului de joc, dar și a condițiilor de joc în sine.

Utilitatea Proiectului

Utilitatea proiectului coincide cu scopul acestuia, și anume, agrementul și socializarea.

Descriere Generală

Vor exista 2 jucători care vor plasa, alternativ, piese pe grid (matrice de LED-uri de dimensiune 4×4).

Cu ajutorul a 2 butoane, playerii pot selecta poziția pe care vor plasa piesa (dreapta/jos) și confirmarea selecției se va face cu un al 3-lea buton. După confirmarea selecției, este rândul celuilalt player să își facă mișcarea.

La fiecare confirmare a selecției, se va verifica dacă pe grid există o secvență de 4 piese de aceeași culoare (în orice direcție) și, în caz afirmativ, jocul se va termina.

Hardware Design

Componente

  • Arduino UNO
  • Breadboard
  • 3 Butoane (2 pentru selectarea poziției, 1 pentru confirmarea plasării piesei)
  • Buzzer (sunet pentru terminarea unei runde, sunet pentru câștigarea unui anumit număr de runde, sunet pentru semnalizarea player-ului a cărui rând este)
  • Fire
  • LCD I2C (afișarea playerului care trebuie să își plaseze piesa, afișarea câștigătorului unei runde, afișarea scorului)
  • Matrice de LED-uri (reprezentarea gridului)
  • Rezistente

Schema bloc

Schema electrică

Deoarece nu există componenta ”Matrice de LED-uri bicolore”, în Tinkercad, am folosit LED-uri RGB pentru a simula interactiunea dintre componente și pinii Arduino.

Software Design

Am folosit biblioteca <LCD_I2C.h> pentru adaptorul I2C și display LCD:

  • lcd.begin(): inițializarea ecranului LCD
  • lcd.clear(): resetează ecranul LCD-ului pentru a nu rămâne caractere nedorite
  • lcd.setCursor(x, y): setează poziția cursorului pe rândul y, coloana x
  • lcd.print(string): afișează string pe LCD

În setup():

  • inițializez ecranul LCD, butoanele, buzzer-ul și LED-urile

În loop():

  • simulez scenariul de joc prin alternarea rândului jucătorilor, aprinderea LED-urilor, activarea buzzer-ului și afișarea de text pe ecranul LCD

Funcții:

  • selectRow(int nr): setează pinii corespunzători rândului nr pe LOW pentru a putea fi aprinși
  • select(Red/Green)Col(int nr, int state): setează pinii corespunzători rândului nr pe state
  • fourConnect(int* arr, int player): verifică dacă player-ul curent a câștigat jocul

Logica codului:

  • mă folosesc de 2 matrice: green și red, pentru a ține minte care LED-uri trebuie aprinse și care nu la orice moment al jocului
  • în orice moment al jocului, poziția curentă în matrice va fi marcată de un LED aprins provizoriu, până când player-ul confirmă selecția
  • navigarea se face cu ajutorul a două butoane, unul care mișcă poziția jucătorului la dreapta și unul care o mișcă în jos
  • după fiecare selecție, se verifică dacă jucătorul a câștigat runda respectivă și, dacă da, se incrementează scorul și se resetează jocul

Rezultate Obţinute

Concluzii

Proiectul a fost unul foarte interesant și m-a avut să imi fixez o parte din cunoștințele materiei de Proiectarea cu Microprocesoare.

Am învățat să lucrez cu componente hardware și să le folosesc pentru a crea un proiect cu o aplicație practică.

De asemenea, am realizat că trebuie să îmi gestionez mai bine timpul, deoarece a trebuit să aștept comenzile pentru componente și am fost nevoit să fac mai multe comenzi din cauzanefuncționării anumitor componente.

Am întâmpinat o serie de dificultăți pe parcursul proiectului:

  • Problemă: Cumpărarea unui LCD fără pini
  • Soluție: Cumpărarea unui alt LCD cu protocolul I2C
  • Problemă: Arderea unor LED-uri de pe matrice
  • Soluție: Cumpărarea unei alte matrice
  • Problemă: Imposibilitatea realizării designului în TinkerCad
  • Soluție: Am testat codul direct pe componentele hardware
  • Problemă: Nu am găsit o matrice de LED-uri bicolore în TinkerCad
  • Soluție: Am folosit mai multe LED-uri RGB pentru a simula matricea și a păstra logica circuitului

Download

Jurnal

20 Aprilie 2022 - Alegerea temei

22 Aprilie 2022 - Documentație 1 (descriere, listă componente, schemă bloc)

9 - 15 Mai 2022 - Procurare componente

16 - 27 Mai 2022 - Implementare proiect (Hardware + Software)

27 Mai 2022 - Documentatie 2 (schemă electrică, rezultate, concluzii, bibliografie)

28 Mai - 1 Iunie 2022 - Finalizare proiect + Documentatie 3 (demo, cod, concluzii finale)

Bibliografie/Resurse

pm/prj2022/avaduva/marian.lupuleasa.txt · Last modified: 2022/06/01 21:03 by marian.lupuleasa
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