This is an old revision of the document!


Joc Sudoku

Autor

Dumitrescu Georgiana

Introducere

Proiectul realizat reprezintă o implementare a jocului clasic Sudoku, într-o versiune ce pune la dispoziția jucătorului o grilă de forma 4 x 4.

Reguli

Jocul poate fi completat de un singur jucător la un moment dat, care va putea selecta pe rând poziția pe care o va scrie, precum și cifra pe care o va scrie pe această poziție. Scopul jocului presupune completarea întregii grile respectând următoarele limitări:

  • Pe o linie nu pot exista cifre duplicate
  • Pe o coloană nu pot exista cifre duplicate
  • Într-un set din cele 4 ale grilei 4 x 4 nu pot exista cifre duplicat

Progresul jucătorului va putea fi observat la orice moment de timp prin intermediul unui ecran LCD.

Descriere generală

Jucătorul va avea la dispoziție 4 butoane pentru mișcările pe care le va face în cadrul grilei, pentru a ajunge pe poziția pe care dorește să o completeze (sus, jos, stânga, dreapta). Pe lângă cele acestea, va avea un buton ce incrementează o cifră la fiecare apăsare a acestuia, pornind de la 0, până la valoarea maximă 9. Cifra dorită va putea fi plasată pe grilă prin poziționarea pe căsuța corespunzătoare și, în final, apăsarea butonului SELECT. Acest buton va plasa cifra în grilă dacă aceasta reprezintă o variantă corectă de completare. În caz contrar, cifra nu va fi plasată în grilă și greșeala jucătorului va fi semnalată prin aprinderea unui led roșu și pornirea unui scurt semnal sonor.

Schema bloc

Hardware Design

Piese

Componenta Numar Link
Arduino Uno 1 Arduino
Cablu USB 1 Cablu
Breadboard 1 Breadboard
LED 1 LED
Ecran LCD 1 Ecran LCD
Buzzer 1 Buzzer
Butoane 7 Butoane
Rezistente 5 Rezistente
Fire 30 Fire

Schema electrica

Conectare ecran LCD

Modulul LCD SPI 128×160 vine cu 8 pini, conectați astfel:

Conectare hardware completă

Software Design

Mediul de dezvoltare

Arduino IDE (1.8.15)

Biblioteci

Ucglib → Folosită la afișarea pe ecran LCD

Descriere implementare

Funcția setup()

  • Stabilește rolurile butoanelor, a buzzer-ului și a LED-ului : OUTPUT/INPUT_PULLUP
  • Definește grila de joc
  • Scrie numerele presetate în joc (acestea nu pot fi alterate pe perioada jocului)

Funcția setup() generează grila de joc prin apelarea funcției resetGame(), care:

  • Desenează grila de joc
  • Printează numerele inițiale
  • Inițializează matricea jocului (sudoku_matrix), utilizată în verificări ulterioare pentru respectarea regulilor
  • Setează poziția inițială a jucătorului în grila de joc

Grila este desenată din 4 linii verticale și 4 linii orizontale de culoare albă, suprapuse unui fundal negru. Numerele presetate în joc sunt
scrise cu o culoare roșie pentru a se diferenția de restul. Deplasarea pe căsuțele grilei este indicată prin colorarea în albastru a celulei
curente.

Funția loop() verifică starea fiecărui buton (LOW = apăsat/ HIGH = liber) și decide pe baza acestuia, acțiunea executată.

  • Butonul UP - Decrementează poziția pe axa Oy a jucătorului
  • Butonul DOWN - Incrementează poziția pe axa Oy a jucătorului
  • Butonul LEFT - Decrementează poziția pe axa Ox a jucătorului
  • Butonul RIGHT- Incrementează poziția pe axa Ox a jucătorului

Jucătorului nu i se permite ieșirea din grila de joc, în niciuna dintre cele 4 direcții.

  • Butonul INCREMENT- Incrementează valoarea numărului

Jucătorului nu i se permite incrementarea numărului peste valoarea maximă admisă.

  • Butonul DELETE - Șterge numărul de pe poziția curentă

Jucătorului nu i se permite ștergerea oricăruia dintre numerele presetate.

  • Butonul SELECT - Scrie în celula curentă, numărul selectat

Scrierea în celulă este permisă doar prin respectarea regulilor clasice ale jocului:

  • Nu este permisă dublarea unei cifre pe același rând
  • Nu este permisă dublarea unei cifre pe aceeași coloană
  • Cifrele dintr-un set de 4 celule trebuie să fie distincte

Încercarea de a scrie o cifră ce nu respectă regulile jocului va eșua, iar jucătorul va fi avertizat prin pornirea LED-ului roșu și a alarmei BUZZER-ului.

La fiecare execuție a funcției loop, se verifică dacă jocul a ajuns la final. Dacă această condiție este îndeplinită, pe ecranul LCD se afișează mesajul “FELICITĂRI”, urmând ca jocul să se reia în formatul inițial prin apelarea funcției resetGame().

Rezultate obtinute

Combinarea design-ului hardware cu implementarea software a rezultat în obținerea unui joc de Sudoku, care respectă design-ul clasic și regulile jocului original. Acesta pune la dispoziția jucătorului toate funcționalitățile necesare (deplasarea în grila de joc, selectarea și scrierea numărului dorit) și, în plus față de jocul clasic, acesta dispune de un semnal de alarmă care se activează la încercarea de încălcare a regulilor.

Ecran de start

Ecran joc

Ecran final

Concluzii

Download

Jurnal

✔ 25.aprilie

Alegere temă proiect

✔ 26.aprilie

Creare pagină wiki & schema bloc

✔ 27.aprilie - 5 mai

Achiziționare piese necesare

✔ 6.mai

Conectare ecran LCD

✔ 7.mai - 20 mai

Creare & Testare design software

✔ 22.mai ​

Adăugare buton DELETE
Adăugare eveniment la finalul jocului
Introducerea resetării jocului

✔ 23.mai - 28.mai ​

Finalizare documentație wiki

Bibliografie/Resurse

pm/prj2021/agrigore/joc_sudoku.1622303601.txt.gz · Last modified: 2021/05/29 18:53 by gdumitrescu2101
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