Proiectul consta intr-un mini-joc de baschet. Exista doua moduri de joc, pentru un jucator sau pentru 2 jucatori. Joc singleplayer: Scopul este sa se arunce cat mai multe mingi intr-un interval de timp setat. Scorul si timpul ramas sunt afisate permanent. Joc multiplayer: Jucatorii arunca pe rand la cos. Pe display este afisat constant scorul cat si jucatorul al carui rand este. Randul jucatorului este indicat de asemenea si de culaorea ledurilor.
La inceputul jocului se va seta timpul pentru joc cu ajutorul unui buton. Dupa ce timpul este setat se apasa butonul de start. Esista 2 butoane pentru a alege modul de joc. Pentru modul singleplayer: Cand senzorul detecteaza prima minge care intra in cos, atunci se incepe numaratoarea inversa,afisata pe modulul 7-segmente. Cand senzorul detecteaza o minge, se modifica scorul si buzzer-ul este declansat. Pentru modul multiplayer contorizarea timpului incepe imediat. Pe ecran este afisat numarul jucatorului care este la rand.Acesta este indicat si de culoarea ledurilor. Daca jucatorul arunca mingea in cos, se modifica automat jucatorul curent. Daca jucatorul rateaza, se va apasa pe un buton pentru a trece la celalalt jucator.
La finalul jocului se va declansa un sunet si se va afisa mesajul “Game Over” pe modulul 7 segmente. Senzorul cu infrarosu este asezat pe inelul coșului de baschet. Când detectează o minge, scorul se modifică penru jucătorul curent și se declanseaza buzzer-ul și banda led.
SetUp
Am initializat LCD-ul, banda led, pinii de input pentru senzor si cele 4 butoane si pinul de output pentru buzzer.
Loop
Daca jocul inca nu a inceput (start == 0) citestc inputurile date de butoane. Daca este apasat butonul 4, timpul creste cu 20 de secunde. Daca este detectat input de la butonul 3, jocul incepe, (start = 1). Daca jocul a inceput, dar nu s-a ales modul de joc (game_mode == 0), se asteapta input de la butoanele 1 sau 2 pentru a seta modul de joc. Daca modul de joc este 1, se va apela functia multiplayer_game_mode , altfel se va apela functia singleplayer_game_mode.
Multiplayer_game_mode
Daca este primit un input de la unul dintre cele 2 butaone, se schimba jucatorul care este la rand. Daca este activat senzorul, atunci scorul jucatoruluicurent se modifica Se apeleaza functiile SetupGreenPalette() si SetupBluePalette() pentru a seta culaorea ledurilor in functie de jucatorul care este la rand. Se afiseaza timpul curent pe modulul 7 segmente si se apeleaza functia stepUp() pentru a creste timpul
Singleplayer_game_mode
Pe acelasi principiu ca si la multiplayer, daca senzorul este activat se modifica scorul. Se afiseaza timpul curent pe modulul 7 segmente si se apeleaza functia stepDown() pentru a arata timpul ramas
StepUp / StepDown
Sunt doua functii foarte asemanatoare care modifica timpul. In cazul stepUp, daca timpul a atins numarul de minute si secunde setate la inceput, jocul s-a terminat, (game_over = 1) . In cazul stepDown, timpul scade, iar daca a ajuns la 0 jocul se termina. In ambele cazuri pe modulul 7 segmente va fi afisa mesajul Game Over si buzzer-ul va fi activat
Functii pentru culoare led
Functiile SetupGreenPalette(),SetupPurpleAndGreenPalette(), SetupBluePalette() seteaza paleta de culori pentru inelul de leduri, iar functia FillLEDsFromPaletteColors itereaza prin index-urile ledurilor pentru a oferi senzatia de miscare a culorilor
A fost printre putinele proiecte la care am lucrat cu placere si fara stres. Am reusit sa realizez ce mi-am propus. Pe masura ce implementam am adaugat mai multe functionalitati fata de ce mi-am propus initial.