Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:vstoica:sudoku [2023/05/07 00:31]
maria_beatrice.dinu
pm:prj2023:vstoica:sudoku [2023/05/28 01:49] (current)
maria_beatrice.dinu [Bibliografie/Resurse]
Line 1: Line 1:
 ====== Sudoku ====== ====== Sudoku ======
 +
 +Dinu Maria-Beatrice 332CA
  
 ===== Introducere ===== ===== 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. 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 ===== ===== Descriere generala =====
 Sudoku este un joc logic care implica completarea unei grile de 9x9 cu cifre de la 1 la 9. Scopul jocului este sa plasezi fiecare cifra in asa fel incat sa fie respectate anumite reguli.\\ Sudoku este un joc logic care implica completarea unei grile de 9x9 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 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 coloana din grila trebuie sa contina toate cifrele de la 1 la 9, fara repetitii. 
- * Fiecare regiune de 3x3 trebuie sa contina toate cifrele de la 1 la 9, fara repetitii.+  * Fiecare regiune de 3x3 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.
  
 {{:​pm:​prj2023:​vstoica:​schema_bloc_sudoku.png?​500|Schema bloc}} {{:​pm:​prj2023:​vstoica:​schema_bloc_sudoku.png?​500|Schema bloc}}
Line 16: Line 22:
  
 Lista componente\\ Lista componente\\
- - Arduino UNO +  ​- Arduino UNO 
- - Ecran LCD 1.8" SPI +  - Ecran LCD 1.8" SPI 
- - Tastatura numerica 4*4 +  - Tastatura numerica 4*4 
- - Joystick +  - Joystick 
- ​- ​Placa de prototipare +  Breadboard 400 de puncte 
- - Rezistente + fire+  - Rezistente + fire 
 + 
 +Schema electrica\\ 
 +{{:​pm:​prj2023:​vstoica:​sudoku_schema.jpeg?​500|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 3x3. 
 +  - 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. 
 + 
 +{{:​pm:​prj2023:​vstoica:​schema_bloc_sudokuv2.png?​400|Schema Stari}} 
 + 
 +===== Rezultate obtinute ===== 
 +{{:​pm:​prj2023:​vstoica:​start_menu_sudoku.jpeg?​150|Start menu}} 
 +{{:​pm:​prj2023:​vstoica:​start_game_sudoku.jpeg?​150|Start game}} 
 +{{:​pm:​prj2023:​vstoica:​playing_game_sudoku.jpeg?​150|Playing game}} 
 +{{:​pm:​prj2023:​vstoica:​win_screen_sudoku.jpeg?​150|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: {{:​pm:​prj2023:​vstoica:​sudoku_arduino.zip|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 ===== ===== Bibliografie/​Resurse =====
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
pm/prj2023/vstoica/sudoku.1683408693.txt.gz · Last modified: 2023/05/07 00:31 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