Sudoku

  • Autor: Axinia Claudiu-Andrei
  • Grupa: 335CC

Introducere

Proiectul reprezinta implementarea unui joc Sudoku(varianta 4×4), folosind materiale si concepte legate de materia Proiectarea cu Microprocesoare.

Este o varianta mai rapida si mai distractiva atat de implementat, cat si de jucat chiar si pentru pasionatii de Sudoku(inclusiv eu, de unde mi-a venit si ideea pentru acest proiect), comparativ cu variantele clasice pe foaie sau un dispozitiv mobil.

Descriere generală

Jocul poate fi jucat de un jucator pornind de la o configuratie initiala afisata pe un ecran LCD. Trebuie respectate regulile Sudoku: nu pot exista cifre duplicate pe un rand, pe o coloana sau intr-un careu din grila.

Jucatorul va putea selecta din butoanele disponibile atat pozitionarea pe grila de Sudoku(sus/jos/stanga/dreapta), cat si incrementarea si apoi plasarea/stergerea inainte de plasare a unei cifre. In final, in caz de victorie se va primi un mesaj “Ai castigat!” si se va afisa scorul primit.

Hardware Design

Lista componente folosite:

  • Placa compatibila cu Arduino UNO
  • Ecran LCD 128 x 160
  • Breadboard
  • Butoane(x7)
  • LED
  • Buzzer
  • Fire tata-tata
  • Rezistoare 1000 & 470 Ohmi

Conectare LCD 128 X 160 - sursa bibliografie

Implementare hardware

Schema electrica

Nu am gasit in Tinkercad LCD-ul meu anume, asa ca am incercat sa arat cat mai apropiat in schema cum am legat. Conectarea ecranului meu LCD la Arduino/Breadboard s-a facut conform acestei poze dintr-un videoclip de pe YouTube(bibliografie):

Conectare ecran LCD-Arduino/Breadboard

Schema Bloc

Software Design

Am implementat codul in Arduino IDE, folosind si biblioteca Ucglib(bibliografie) pentru afisarea pe ecranul LCD.

Implementare:

In setup(): Sunt afisate regulile scorului pe ecran, sunt scrise numerele initiale pe grila si scorul este initializat cu 0.

In resetGame(): Este desenata grila si sunt afisate numerele initiale, fiind initializata matricea de sudoku si pozitia jucatorului. Numerele initiale sunt colorate cu albastru, cele puse pe parcurs cu alb, iar casuta in care se afla jucatorul cu verde.

In loop(): Este verificata starea LOW/HIGH a butoanelor si se executa actiuni pe baza acestei stari.

UP/DOWN - schimba pozitia pe axa Oy, iar LEFT/RIGHT pe axa Ox

DELETE - sterge numarul curent(nu unul din cele initiale!)

INCREMENT - incrementeaza valoarea numarului(maxim pana la valoarea admisa)

PLACE - scrie numarul selectat in celula curenta(respectand regulile de non-duplicate)

Rezultate Obţinute

Am obtinut jocul de Sudoku(versiunea 4×4), respectand, prin implementarile hardware si software, regulile si design-ul binecunoscute. Jucatorul se poate deplasa in toate cele 4 directii pe ecran si poate plasa/sterge numere in grila pentru a rezolva jocul. In final, se calculeaza scorul conform regulilor afisate la inceput si, in caz de victorie, se afiseaza un mesaj de felicitari “Ai castigat!”. Functionalitati:

Reguli - ecran de start

Joc initial

Joc final

Mesaj "Ai castigat!" si scor

Concluzii

- A fost un proiect distractiv de implementat, care a necesitat cunostinte matematice pentru implementarea software a Sudoku, rabdare in intampinarea si solutionarea dificultatilor si munca pentru asamblarea hardware prin aplicarea cunostintelor invatate la materia PM.

- Jocul este foarte asemanator cu cel clasic pe hartie, folosind bineinteles o altfel de implementare prin jocul din butoane push pe LCD.

- Am tratat si cazuri absurde precum jucatorul incercand sa stearga numerele date deja initial sau iesirea in afara grilei.

- Codul este o baza solida caruia i se pot aplica in viitor lucruri/functii suplimentare prin updatarea acestuia.

Download

Jurnal

06.05: Creare pagina de ocw si descriere detalii despre proiect, implementare, piese folosite si schema bloc.

Saptamana 16-20 mai: procurare materiale si piese necesare, incepere implementare hardware(conectare ecran LCD) & software(reguli Sudoku).

Saptamana 23-27 mai: finalizare implementare hardware & software, finalizare wiki pagina OCW.

Bibliografie/Resurse

https://github.com/olikraus/ucglib - Biblioteca UCGLIB;

https://www.youtube.com/watch?v=boagCpb6DgY&ab_channel=educ8s.tv - Conectare ecran LCD 128 x 160;

https://acoptex.com/project/263/basics-project-054a-18-spi-tft-lcd-128x160-module-and-flickering-streaks-at-acoptexcom/ - Conectare ecran LCD & alte informatii legate de el;

- Diverse surse de pe internet( + cunostinte proprii :) ) referitoare la regulile Sudoku si cum ar corespunde ele in cadrul proiectului;

Export to PDF

pm/prj2022/robert/sudoku.txt · Last modified: 2022/05/27 23:56 by claudiu.axinia
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