Vlad-Andrei URSU (25228) - Sudoku 9x9

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Sudoku 9×9 este un joc interactiv ce testeaza de capacitatea de gandire logica a jucatorului si ii ofera acestuia o modalitate de a se relaxa. Acesta versiune a jocului presupune existenta unei tabele patratice ce este impartita in 9 subtabele patratice de dimensiune 3×3 (in total 81 de casute). Jocul poate fi jucat de un singur jucator, a carui obiectiv este sa completeze intreaga tabela sudoku, respectand urmatoarele reguli:

  • O cifra (intre 1 si 9) poate sa apara o singura data pe fiecare linie;
  • O cifra (intre 1 si 9) poate sa apara o singura data pe fiecare coloana;
  • O cifra (intre 1 si 9) poate sa apara o singura data in fiecare subtabela de dimensiunea 3×3.

Initial, tabela are completate anumite casute, iar jucatorul trebuie sa porneasca de la acestea pentru a obtine o completare valida.

Descriere generală

Jucatorul va putea seta 3 nivele de dificultate: usor, mediu, dificil. Dupa aceasta etapa, pe LCD va aparea tabela ce trebuie completata. O parte din casute vor avea deja numere asignate, obiectivul jucatorului fiind sa obtina o solutie valida pornind de la acestea. Folosind butoanele, jucatorul se va putea deplasa pe ecran catre casuta dorita, o va selecta si va putea completa acea casuta cu valoarea dorita.

In momentul de fata, m-am gandit ca jucatorul sa aiba la dispozitie 4 butoane speciale, ce reprezinta numerele 1, 2, 4 si 8 si pornind de la aceastea, jucatorul sa le apese in asa fel incat suma valorilor butoanelor apasate sa fie valoarea pe care doreste sa o introduca. Aceasta varianta este una corecta, intrucat orice numar poate fi scris ca o suma de puteri ale lui doi. Daca valoarea este o suma de puteri, jucatorul va trebui sa apese simultan 2 sau 3 butoane (astfel incat suma valorilor butoanelor sa dea valorea cautata).

Partea de software va verifica daca valoarea introdusa respecta regulile jocului. Daca valoarea nu poate fi introdusa in acea casuta, se va aprinde LED-ul utilizator timp de jumatate de secunda.

In momentul terminarii unui joc, va aparea un mesaj de terminare,dupa care jucatorul va putea selecta alt joc.

Componente

  • Microcontroller-ul ATMega324 - va controla intregul joc;
  • LCD - va afisa pe ecran tabela de joc, mesaje de validare/invalidare;
  • Butoane - vor fi folosite de jucator pentru selectarea nivelului, a casutelor si a cifrelor de introdus;
  • LED-uri - vor fi folosite pentru mesaje de validare/invalidare;

Hardware Design

Electrical schematic:

Software Design

Pentru realizarea acestul proiect am folosit ca mediu de dezvoltare versiune gratuita a Sublime Text. Pentru compilare am folosit WinAVR, iar pentru a incarca pe placa programul am folosit Bootloaderul pus dispozitie de facultate. Biblioteca folosita pentru a programa LCD-ul ST7920 se gaseste la aceasta adresa.

In momentul pornirii, va fi afisat un meniu, din care jucatorul trebui sa selecteze nivelul de dificultate dorit folosind butonul DOWN. In momentul in care este hotarat ce nivel doreste, jucatorul va apasa butonul de SELECT pentru a incepe jocul. Pe ecran va fi afisata tabela de sudoku. Casutele deja completate la inceputul jocului nu pot fi modificate si vor fi marcate distinctiv.

  • Statea UNLOCKED de pe ecran semnifica faptul ca utilizatorul trebuie sa foloseasca butoanele pentru a se deplasa prin tabela.
  • Statea LOCKED de pe ecran semnifica faptul ca utilizatorul trebuie sa foloseasca butoanele pentru a selecta valoarea dorita.

Trecerea de la o stare la alta se face folosind butonul de SELECT. Casuta in care se afla jucatorul in momentul curent este de asemenea marcata distinctiv.

IMPORTANT

  • Daca jucatorul se afla in starea UNLOCKED si incearca sa selecteze o casuta ce nu poate fi modificata, se va aprinde LED-ul utilizator timp de 0.5 secunde.
  • Daca jucatorul se afla in stare LOCKED si incearca sa introduca o valoarea ce nu este valida pentru pozitia respectiva, se va aprinde LED-ul utilizator timp de 0.5 secunde.

Pe ecran vor fi afisate si “numar_casute_completate/numar_de_casute_totale”. In momentul in care cele doua valori devin egale (jucatorul a completat toate casutele cu valori valide), pe ecran va fi afisat un mesaj de notificare, dupa care jucatorul va reveni la meniul de selectare a nivelului.

Rezultate Obţinute

<WRAP center round box 84%>

  • Ansamblu

  • Meniu Principal

  • In joc - selectare casuta & selectare valoare

  • Aproape completat & Mesaj final

</WRAP>

Concluzii

Am gasit acest proiect interesant si consider ca in urma acestei experiente am capatat cunostintele elementare in ceea ce priveste proiectarea folosind microprocesoare. De asemenea, o parte pozitiva a reprezentat-o faptul ca nu a trebuit sa umblu foarte mult dupa componentele necesare realizarii proiectului. Sunt destul de multumit de rezultatul obtinut. Cu toate acestea, exista functionalitati la care m-am gandit, insa nu am avut timp sa le implementez, motiv pentru care, daca voi avea timp voi continua sa imbunatatesc acest proiect.

Download

<WRAP center round download 60%> Arhiva ce contine codul sursa, fisierul de README, biblioteca u8glib si un Makefile se gaseste la urmatoarea adresa. </WRAP>

Bibliografie/Resurse

pm/prj2016/amusat/260294.txt · Last modified: 2021/04/14 17:07 (external edit)
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