Jocul se bazeaza pe reproducerea unei secvente aleatorii care este reprodusa de joc. Daca utilizatorul reuseste sa isi aminteasca secventa intocmai, trece la nivelul urmator si ii creste scorul. In caz contrar, pierde si jocul se termina. Secventele vor fi reprezentate de niste LED-uri care se aprind si se sting. Butoanele cu ajutorul carora jucatorul va introduce secventa vor avea la baza cate o fotorezistenta. Jocul are si un buzzer pentru a scoate niste sunete specifice unor diferite actiuni: secventa a fost introdusa corect, respectiv secventa introdusa nu este corecta si jocul se termina. Utilizatorul poata sa isi vada scorul pe ecranul LCD, dar si timpul pe care il mai are la dispozitie ca sa insereze secventa.
In functia setup am initializat LED-urile, nivelul de dificultate al jocului de la care se porneste, ecranul LCD, buzzerul si intreruperile pentru timer.
In functia loop verific constant daca jocul s-a terminat sau nu (daca player-ul a gresit secventa sau nu). In cazul in care s-a terminat, afisez un mesaj care sa instiinteze jucatorul de acest lucru, urmand ca dupa aceea jocul sa o ia de la capat, incepand de la nivelul cel mai usor. In caz contrar, se genereaza o secventa utilizand functia generateSequence, mai apoi secventa este aratata prin aprinderea LED-urilor corespunzatoare prin functia showLEDSequence, urmand ca in final, playerul sa vina cu input-ul pentru a reproduce secventa in exactitate, lucru care se observa in functia getPlayerInput.
Functia getPlayerInput se foloseste de ADC pentru a citi inputul de la fotorezistori (daca playerul tine degetul deasupra unui fotorezistor e ca si cum el ar apasa pe un “buton”). Daca input-ul este corect, jocul merge mai departe, cu un nivel de dificultate mai greu, adica o secventa mai mare de LED-uri care o sa se aprinda. In caz contrar, jocul se termina, iar jucatorul este instiintat de acest lucru cu un mesaj sugestiv pe ecranul LCD si cu o atentionare audio din partea buzzer-ului.