This is an old revision of the document!
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.
Hardware design
Lista componente
Arduino UNO
Ecran LCD 1.8” SPI
Tastatura numerica 4*4
Joystick
Placa de prototipare
Rezistente + fire
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:
draw_sudoku(): deseneaza tabla, pozitia jucatorului si insereaza cifele asociate.
draw_grid(): deseneaza liniile necesare pentru a imparti tabla in 9 segmente de 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).
set_easy_board(): copiaza o tabla de dificultate usoara random din start_boards (unde sunt initializate diferite table de joc) in sudoku_board.
set_hard_board(): copiaza o tabla de dificultate grea random din start_boards (unde sunt initializate diferite table de joc) in sudoku_board.
write_key(): insereaza cifra introdusa prin keypad pe tabla de joc.
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.
draw_menu(): deseneaza meniul principal unde jucatorul are optiunile de a alege intre un joc usor sau un joc greu.
Rezultate obtinute
Bibliografie/Resurse