Table of Contents

Sudoku

Dinu Maria-Beatrice 332CA

Introducere

Proiectul consta in implementarea jocului clasic sudoku. Jocul va fi afisat pe un ecran LCD, miscarea pe ecran se va face printr-un joystick, iar numerele vor fi introduse printr-un keypad.

Scopul acestui proiect este sa creeze o interfata fizica si interactiva pentru rezolvarea puzzle-urilor Sudoku, fiind o combinatie interesanta intre programare, electronica si jocuri logice.

Descriere generala

Sudoku este un joc logic care implica completarea unei grile de 9×9 cu cifre de la 1 la 9. Scopul jocului este sa plasezi fiecare cifra in asa fel incat sa fie respectate anumite reguli.

Proiectul utilizeaza un ecran LCD pentru a afisa grila sudoku si cifrele asociate, permitand utilizatorului sa vada si sa interactioneze direct cu puzzle-ul. Keypad-ul este folosit pentru a introduce cifre in grila, iar joystick-ul pentru a naviga prin diferite celule ale grilei sudoku.

Schema bloc

Hardware design

Lista componente

  1. Arduino UNO
  2. Ecran LCD 1.8” SPI
  3. Tastatura numerica 4*4
  4. Joystick
  5. Breadboard 400 de puncte
  6. Rezistente + fire

Schema electrica
Schema electrica

Software design

Codul a fost implementat in ArduinoIDE. M-am folosit de urmatoarele biblioteci: SPI.h si TFT.h pentru LCD, Keypad.h pentru keypad.

Structura codului:

  1. draw_sudoku(): deseneaza tabla, pozitia jucatorului si insereaza cifele asociate.
  2. draw_grid(): deseneaza liniile necesare pentru a imparti tabla in 9 segmente de 3×3.
  3. set_super_easy_board(): copiaza cea mai usoara tabla din start_boards (unde sunt initializate diferite table de joc) in sudoku_board (am lasat aceasta functie pentu a putea verifica mai repede anumite functionalitati, si sa nu trebuiasca sa completez un joc intreg de sudoku).
  4. set_easy_board(): copiaza o tabla de dificultate usoara random din start_boards (unde sunt initializate diferite table de joc) in sudoku_board.
  5. set_hard_board(): copiaza o tabla de dificultate grea random din start_boards (unde sunt initializate diferite table de joc) in sudoku_board.
  6. write_key(): insereaza cifra introdusa prin keypad pe tabla de joc.
  7. check_win(): se verifica daca solutia oferita este una valida. Daca jucatorul nu a completat toata tabla, se va afisa mesajul “NOT FINISHED!”/Daca jucatorul a completat gresit tabla se va afisa mesajul “TRY AGAIN!” pentru 3 secunde, dupa care se va reintoarce pe tabla de joc. Daca jucatorul a completat corect tabla, se va afisa mesajul “YOU WON! CONGRATS!” pentru 5 secunde, dupa care se va reintoarce la meniul principal.
  8. draw_menu(): deseneaza meniul principal unde jucatorul are optiunile de a alege intre un joc usor sau un joc greu.

Schema Stari

Rezultate obtinute

Start menu Start game Playing game Win screen

Concluzii

Proiectul a fost foarte interesant si captivant. Mi-a placut sa invat cum sa lucrez cu biblioteca TFT.h pentru LCD, care a durat ceva, si cum sa conectez componentele cu arduino astfel incat sa nu le stric :). Am lucrat la acest proiect cu placere.

Download

Surse: Sudoku arduino

Bibliografie/Resurse

https://randomnerdtutorials.com/guide-to-1-8-tft-display-with-arduino/
https://www.arduino.cc/reference/en/libraries/tft/
https://www.circuitbasics.com/how-to-set-up-a-keypad-on-an-arduino/
https://arduinogetstarted.com/tutorials/arduino-joystick

Bibliografie/Resurse

Export to PDF