This is an old revision of the document!
Cu ajutorul unor componente electronice, se vrea recrearea clasicului joc spanzuratorea.
Regulile jocului sunt urmatoarele: Jucatorului ii este dat un cuvant, iar acesta trebuie sa ghiceasca literele din care este compus. Spre exemplu, daca jucatorul alege litera 'A', iar aceasta face parte din cuvant, atunci pozitiile literei ii vor fi descoperite jucatorului. In schimb, daca litera NU face parte din cuvant, o parte din corpul unui jucator va fi taiata, pana nu vor mai ramane parti componente. De aici rezulta faptul ca un jucator are maxim 6 greseli pe care le poate comite pana ce cuvantul va fi ghicit.
Cu ajutorul unui keypad, jucătorul trebuie sa ghiceasca literele pentru a descoperi cuvântul afișat pe LCD. Șansele jucătorului vor fi exprimate printr-o matrice de leduri reprezentând un omuleț. La o literă ghicita corect/greșit se va aplica un efect sonor. Volumul sunetului la iesire va putea fi reglat cu ajutorul unui potentiometru.
Pentru a introduce o anumita litera astfel incat aceasta sa fie afisata pe ecran se utilizeaza o tastatura 4×4, iar principiul de functionare se bazeaza pe cel al unui telefon Nokia vechi. Prin apasarea repetata a unei taste, se pot selecta, spre exemplu, literele A, B, C. Ideea se poate intelege mai bine consultand imaginea de mai jos.
Codul rulat pe placuta Arduino se poate gasi la acest link: https://github.com/cristidragomir/Joc-Spanzuratoarea/blob/main/sketch_may22a.ino
In partea de setup() am initializat afisarea la Serial Monitor in scop de debug. Am ales random indexul din lista de cuvinte interne care va fi de ghicit. Se initializeaza pinii pentru citirea inputului de la keyboard, se afiseaza mesajele de bun-venit; se seteaza literele corespunzatoare fiecarui buton de la tastatura, butonul curent si anterior apasat, statusul jocului, LCD-ul si se initializeaza poll-ul de cuvinte.
Pentru afisarea unui mesaj la ecranul LCD mi-am creat o functie specializata care imi afiseaza mesajul fractionat, deoarece LCD-ul poate afisa maxim 32 de caractere.
In partea de loop() ne utilizam de logica din spatele unei matrice de butoane. Fiecare rand este pus pe LOW pt a marca faptul ca acel rand este analizat spre a se vedea daca un anumit buton este apasat. La randul i setat pe LOW(in timp ce celelalte sunt setate pe HIGH) se citeste daca o coloana s-a trecut pe LOW in urma apasarii. Daca da, in functie de linie si coloana se calculeaza ce buton a fost apasat. Pentru a iesi din starea 0 a jocului (abia a fost pornit Arduino) sau 2 (un joc s-a terminat) trebuie apasat ENTER. Astfel, se trece in starea 1 sau 3, iar jocul practic incepe. Cand se apasa un buton diferit de ENTER se trece in selectLetter() unde counterul tuturor tastelor se trece la 0 insemnand ca la apasarea unei alte taste se incepe de la 'A'. Daca se apasa aceeasi tasta ca cea anterioara se incrementeaza counterul unei taste, adica 'A' devine 'B', iar 'B' devine 'C', etc.. Cand se apasa tasta ENTER, avand o litera care se vrea a fi verificata se trece la functia letterSubmittedCases(). Aici, daca litera face parte din cuvant, se incrementeaza numarul de caractere ghicite din cuvant(var. globala), se va afisa un mesaj in acest sens si se va reda un efect sonor. De-asemenea, daca numarul de caractere ghicite e acelasi cu lungimea cuvantului jocul este castigat. Cam aceeasi logica, cumva negata, se aplica si atunci cand litera data spre verificare nu face parte din cuvant. La un nou joc, parametri programului sunt resetati.