This is an old revision of the document!
True/False este un joc perfect pentru testarea cunoștințelor într-un mod distractiv! Jocul este bazat pe un concept simplu și cunoscut de toată lumea: întrebări cu răspuns adevărat/fals. Întrebările din diverse domenii fac ca jocul să fie accesibil tuturor, dar totodată păstrează un factor de dificultate adecvat. Acest joc reprezintă deopotrivă un mijloc de învățare și verificare și un joc ce stârnește spiritul competitiv.
Mod de utilizare:
Jucătorul apasă butonul de start. Urmează să îi fie afișate secvențial pe ecranul LCD 10 întrebări. Timpul pentru a răspunde la o întrebare este limitat. Jucătorul poate răspunde la întrebare prin apăsarea butonului de adevărat sau prin apăsarea butonului de fals, după cum consideră. Un răspuns corect este semnalizat sonor prin intermediul buzzer-ului și vizual prin aprinderea unui LED verde. Acesta este punctat în funcție de timpul scurs până la selectarea răspunsului. Un răspuns incorect este semnalizat sonor diferit prin intermediul buzzer-ului și vizual prin aprinderea unui LED roșu. Acesta nu este punctat, dar nici penalizat. La finalul jocului, este afișat scorul final.
Funcționalitate:
În starea de început se așteaptă apăsarea butonului de start. Apăsarea oricărui alt buton nu va avea niciun efect. Apoi, se afișează pe ecran o întrebare. Se poate apăsa ori butonul de corect, ori butonul de greșit într-un interval de 10 secunde. Apăsarea butonului de start nu va avea niciun efect. Lipsa apăsării unui buton în acest interval nu va avea niciun efect. Răspunsul corect va porni buzzer-ul și LED-ul verde, cel greșit buzzer-ul și LED-ul roșu. Se repetă acest procedeu de 10 ori. La final, se afișează scorul final, iar după 10 secunde se trece în starea de început.
Piese utilizate:
Am dezvoltat proiectul în Arduino IDE. Am folosit bibliotecile TFT.h și SPI.h pentru comunicarea prin SPI cu LCD-ul.
Pentru a păstra fiecare întrebarea alături de răspunsul aferent am folosit următoarea structură:
struct question{ const char* question; const char* answer; };
Am păstrat toate întrebările în vectorul question questions[].
Pentru a selecta în mod aleator 10 întrebări diferite la fiecare joc am implementat funcția void selectQuestions() care alege random un index corespunzător unei întrebări și funcția bool isSelected(int index, int selectedCount) care verifică dacă întrebarea a mai fost aleasă sau nu.
Logica de funcționare este următoarea: inițial se citește în continuu valoarea input-ului butoanelor până când se primește o valoare aferentă butonului de start. Apoi se trece în starea de pregătire a jocului: flag-ul de start este setat și scorul este resetat. După, se trece în starea de joc, fiind afișate secvențial 10 întrebări, apoi scorul final, după care se trece din nou în starea inițială.
Funcțiile void wrongAnswer() și void rightAnswer() asigură semnalizarea sonoră și vizuală a corectitudinii răspunsului oferit de jucător.
Pentru afișarea pe ecran a celor trei stări posibile: start, întrebări și scor final am implemntat următoarele funcții: void printStart(), void printGetReady(), void printQuestion(const char *question, const char *answer) și void printScore(). Funcția void printQuestion(const char *question, const char *answer) se folosește de funcțiile void questionText(const char *question) care are rolul de afișare a întrebării, void questionTime(const char *answer) care se ocupă cu afișarea timpului rămas pentru a răspunde la întrebare și void questionScore() care afișează scorul curent. Logica pentru citirea input-ului analogic din partea butoanelor, compararea acestuia cu răspunsul corect și actualizarea scorului curent este implementată în funcția void questionTime(const char *answer).
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.