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.

  • Fiecare rand din grila trebuie sa contina toate cifrele de la 1 la 9, fara repetitii.
  • Fiecare coloana din grila trebuie sa contina toate cifrele de la 1 la 9, fara repetitii.
  • Fiecare regiune de 3×3 trebuie sa contina toate cifrele de la 1 la 9, fara repetitii.

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

Bibliografie/Resurse

Bibliografie/Resurse

pm/prj2023/vstoica/sudoku.txt · Last modified: 2023/05/28 01:49 by maria_beatrice.dinu
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