Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:alazar:joc_pac-man [2021/06/01 15:43]
eduard.azamfirei
pm:prj2021:alazar:joc_pac-man [2021/06/01 18:09] (current)
eduard.azamfirei [Bibliografie/Resurse]
Line 5: Line 5:
 Proiectul are ca scop implementarea unui joc de Pac-Man.\\ Proiectul are ca scop implementarea unui joc de Pac-Man.\\
 Jucătorul se va putea deplasa pe hartă cu scopul de a aduna puncte pentru a crește scorul pentru a acumula toate punctele pana la terminarea timpului.\\ Jucătorul se va putea deplasa pe hartă cu scopul de a aduna puncte pentru a crește scorul pentru a acumula toate punctele pana la terminarea timpului.\\
-Acesta, ​dupa acumularea unui anumit punctaj va putea activa pentru o perioadă o abilitate de invincibilitate(se va opri timer-ul).\\ +Acesta, ​după acumularea unui anumit punctaj va putea activa pentru o perioadă o abilitate de invincibilitate(se va opri timer-ul).\\ 
-Dupa 3000 de puncte timer-ul se va reseta cu o secundă. \\+După 3000 de puncte timer-ul se va reseta cu o secundă. \\
 Motivația din spatele alegerii proiectului este recrearea jocului atât de cunoscut într-o manieră personală,​\\ Motivația din spatele alegerii proiectului este recrearea jocului atât de cunoscut într-o manieră personală,​\\
 astfel valorificând cunoștințele acumulate despre Arduino.\\ astfel valorificând cunoștințele acumulate despre Arduino.\\
Line 17: Line 17:
 Întregul joc va fi afișat pe un ecran LCD(ce foloșeste SPI).\\ Întregul joc va fi afișat pe un ecran LCD(ce foloșeste SPI).\\
 În urma pornirii jocului, jucătorul poate manevra personajul cu ajutorul joystick-ului fie pe linie\\ În urma pornirii jocului, jucătorul poate manevra personajul cu ajutorul joystick-ului fie pe linie\\
-sau coloană. Acesta se va putea plimba pe o planșă în formă de labirint ​și\\ +sau coloană. Acesta se va putea plimba pe o planșă în formă de labirint ​pentru\\ 
-colectând ​cât mai multe puncte pentru a crește scorul.\\+a colecta ​cât mai multe puncte pentru a crește scorul.\\
 Jucătorul va porni cu o singură viață si la diferite limite de punctaj acesta va mai putea primii încă\\ Jucătorul va porni cu o singură viață si la diferite limite de punctaj acesta va mai putea primii încă\\
 una. Acestea vor fi simbolizate cu ajutorul a 2 led-uri RGB(led-ul este verde-jucătorul are viața\\ una. Acestea vor fi simbolizate cu ajutorul a 2 led-uri RGB(led-ul este verde-jucătorul are viața\\
Line 47: Line 47:
 {{:​pm:​prj2021:​alazar:​azamfirei_eduard:​conexiuni_3.jpg?​200|}} {{:​pm:​prj2021:​alazar:​azamfirei_eduard:​conexiuni_3.jpg?​200|}}
  
-Pentru conectarea ecranului ILI9341 prin SPI , acesta a fost conectat cu rezistențe de 10 KOhm la pinii digitali(pentru a nu se arde).\\+Pentru conectarea ecranului ILI9341 prin SPI ,acesta a fost conectat cu rezistențe de 10 KOhm la pinii digitali(pentru a nu se arde).\\
 Ecranul LCD 1602 a fost conectat prin I2C la pinii specifici SCL si SDA, iar joystick-ul are pinii pentru cele 2 axe (Ox si Oy)\\ Ecranul LCD 1602 a fost conectat prin I2C la pinii specifici SCL si SDA, iar joystick-ul are pinii pentru cele 2 axe (Ox si Oy)\\
 conectați la pinii analogici A2 și A3.\\ conectați la pinii analogici A2 și A3.\\
Line 54: Line 54:
 Butonul(switch-ul) folosește întreruperi externe și a fost conectat la pin-ul digital 2(INT0).\\ Butonul(switch-ul) folosește întreruperi externe și a fost conectat la pin-ul digital 2(INT0).\\
 ===== Software Design ===== ===== Software Design =====
-Proiectul a fost realizat cu ajutorul aplicației Arduino, iar bibliotecile folosite sunt LiquidCrystal_I2C.h pentru afișarea ​scorului\\ +Proiectul a fost realizat cu ajutorul aplicației Arduino, iar bibliotecile folosite sunt LiquidCrystal_I2C.h pentru afișarea 
-și a timpului rămas pe ecranul LCD 1602, SPI.h, Adafruit_GFX.h și Adafruit_ILI9341.h pentru realizarea comunicării cu ecranul LCD ILI9341\\ +scorului ​și a timpului rămas pe ecranul LCD 1602, SPI.h, Adafruit_GFX.h și Adafruit_ILI9341.h pentru realizarea comunicării cu ecranul LCD ILI9341 și pentru desenarea, actulizarea și ștergerea tuturor obiectelor și formelor(ce constituie jocul propriu-zis) pe acesta.\\
-și pentru desenarea, actulizarea și ștergerea tuturor obiectelor și formelor(ce constituie jocul propriu-zis) pe acesta.\\+
  
 La **nivel global** au fost salvate poziția jucătorului (pe Ox și Oy), coordonatele și dimensiunile obstacolelor(zidurilor).\\ La **nivel global** au fost salvate poziția jucătorului (pe Ox și Oy), coordonatele și dimensiunile obstacolelor(zidurilor).\\
 De asemenea, se va salva un array is_drawn pentru punctele de colectat, ce va spune dacă punctul respectiv a fost colectat sau nu.\\ De asemenea, se va salva un array is_drawn pentru punctele de colectat, ce va spune dacă punctul respectiv a fost colectat sau nu.\\
-Se vor salva și alte variabile la nivel global, acestea trebuind să fie independente de iterația funcției loop() (scor, număr de vieți,\\ +Se vor salva și alte variabile la nivel global, acestea trebuind să fie independente de iterația funcției loop() 
-puncte rămase de colectat, counter pentru timpul rămas, counter pentru abilitatea specială și dacă jocul s-a terminat cu victorie/​înfrângere\\ +(scor, număr de vieți, puncte rămase de colectat, counter pentru timpul rămas, counter pentru abilitatea specială și dacă jocul s-a terminat cu victorie/​înfrângere sau a început).\\
-sau a început).+
 Se vor declara global și cele 2 ecrane ILI9341 și LCD 1602.\\ Se vor declara global și cele 2 ecrane ILI9341 și LCD 1602.\\
   
-Funcția **setColorRGB()** aprinde LED-urile RGB în funcție de numărul de vieți ale jucătorului. Astfel, un LED roșu simbolizează că\\ +Funcția **setColorRGB()** aprinde LED-urile RGB în funcție de numărul de vieți ale jucătorului. Astfel, un LED roșu simbolizează că jucătorul nu are viața ​respectivă ​iar un LED aprins verde simbolizează că jucătorul are viața ​respectivă. Jucătorul are 2 vieți maxim și schimbarea culorilor se realizează cu funcția analogWrite() pe pinii asociați.\\
-jucătorul nu are viața ​respectiva ​iar un LED aprins verde simbolizează că jucătorul are viața ​respectiva. Jucătorul are 2 vieți maxim\\ +
-și schimbarea culorilor se realizează cu funcția analogWrite() pe pinii asociați.\\+
   
-Funcția **move_character()** este funcția de mișcare a caracterului în care acesta este poziționat la noile coordoanate date de\\ +Funcția **move_character()** este funcția de mișcare a caracterului în care acesta este poziționat la noile coordoanate date de joystick și care verifică coliziunea cu obiectele din jur și cu punctele de acumulat.\\ 
-joystick și care verifică coliziunea cu obiectele din jur și cu punctele de acumulat.\\ +Se vor declara mai întai coordonatele pixelilor modelului jucătorului (relative la poziția curentă) și poziția pixelilor ce trebuie ștersi dupa fiecare tip de deplasare. La orice deplasare se vor sterge treptat pixeli poziției anterioare.\\ 
-Se vor declara mai întai coordonatele pixelilor modelului jucătorului (relative la poziția curentă)și poziția pixelilor\\ +Se vor citi coordonatele axelor x si y ale joystick-ului cu funcția analogRead() ce se vor delimita în 4 cazuri: mișcare în sus, in jos, la stânga sau la dreapta.\\ 
-ce trebuie ștersi dupa fiecare tip de deplasare. La orice deplasare se vor sterge treptat pixeli poziției anterioare.\\ +În funcție de direcția aleasă, se va verifica coliziunea cu toate obstacolele și daca acestea nu sunt validenu vor fi acceptate. Apoi se vor verifica coliziunile cu toate punctele de acumulat.\\ 
-Se vor citi coordonatele axelor x si y ale joystick-ului cu funcția analogRead() ce se vor delimita în 4 cazuri:\\ +În cazul intersectării cu unul dintre acestea, se va crește scorul, se va șterge punctul și se va transmite un sunet cu ajutorul buzzer-ului prin funcția tone().\\ 
-mișcare în sus, in jos, la stânga sau la dreapta.\\ +În cele din urmă se vor desena pixeli caracterului și se vor șterge ​pixelii ​ultimei poziții înainte de deplasare.\\
-În funcție de direcția aleasă, se va verifica coliziunea cu toate obstacolele și daca acestea nu sunt valide\\ +
-nu vor fi acceptate. Apoi se vor verifica coliziunile cu toate punctele de acumulat.\\ +
-În cazul intersectării cu unul dintre acestea, se va crește scorul, se va șterge punctul și se va transmite un sunet\\ +
-cu ajutorul buzzer-ului prin funcția tone().\\ +
-În cele din urmă se vor desena pixeli caracterului și se vor șterge ​pixeli ​ultimei poziții înainte de deplasare.\\+
   
 În funcția **draw_map()** vor fi desenate toate zidurile/​obstacolele cu ajutorul funcției de bibliotecă drawRoundRect().\\ În funcția **draw_map()** vor fi desenate toate zidurile/​obstacolele cu ajutorul funcției de bibliotecă drawRoundRect().\\
  
 În funcția **setup()** se vor seta pini pentru switch, led de abilitate. \\ În funcția **setup()** se vor seta pini pentru switch, led de abilitate. \\
-De asemenea, se vor inițializare cele 2 ecrane, se va apela funcția draw_map() pentru desenarea hărții/​labirintului\\ +De asemenea, se vor inițializare cele 2 ecrane, se va apela funcția draw_map() pentru desenarea hărții/​labirintului și se vor desena punctele de acumulat.\\
-și se vor desena punctele de acumulat.\\+
   
 Întreruperea **intrerupt()** este handler-ului întreruperii externe asociate butonului.\\ Întreruperea **intrerupt()** este handler-ului întreruperii externe asociate butonului.\\
 Prin apăsarea butonului se va porni jocul și se va putea activa abilitatea ce oprește pentru o perioadă timpul ce trebuie învins.\\ Prin apăsarea butonului se va porni jocul și se va putea activa abilitatea ce oprește pentru o perioadă timpul ce trebuie învins.\\
  
-În funcția **loop()** este implementata logica jocului privind scaderea/​creșterea timpului jocului, a finalului jocului\\ +În funcția **loop()** este implementata logica jocului privind scaderea/​creșterea timpului jocului, a finalului jocului (victorie/​înfrângere) dar și logica folosirii abilității speciale.\\ 
-(victorie/​înfrângere) dar și logica folosirii abilității speciale.\\ +Daca jucătorul a acumulat toate punctele de pe hartă, acesta va fi felicitat cu o mică melodie, i se va afișa scorul (la care se adaugă ca bonus viața în plus și timpul rămas) și un mesaj.\\
-Daca jucătorul a acumulat toate punctele de pe hartă, acesta va fi felicitat cu o mică melodie, i se va afișa scorul\\ +
-(la care se adaugă ca bonus viața în plus și timpul rămas) și un mesaj.\\+
 În caz că timpul a ajuns la 0 și jucătorul nu mai are nicio viața, procedura este identică dar opusă.\\ În caz că timpul a ajuns la 0 și jucătorul nu mai are nicio viața, procedura este identică dar opusă.\\
 La un anumit număr de iterații timpul va mai scădea cu o unitate.\\ La un anumit număr de iterații timpul va mai scădea cu o unitate.\\
Line 105: Line 93:
 dar care în același timp să aducă un mic omagiu jocurilor retro.\\ dar care în același timp să aducă un mic omagiu jocurilor retro.\\
 La link-ul următor se găsește un demo al jocului cu o victorie și cu o înfrângere evidențiind toate aspectele acestuia.\\ La link-ul următor se găsește un demo al jocului cu o victorie și cu o înfrângere evidențiind toate aspectele acestuia.\\
-[[https://​drive.google.com/​file/​d/​13u_nzG317tdKUMfg48LzjRUdDgG6FFLZ/​view?​usp=sharing|Link demo joc Pac-Man]]+ 
 +[[https://​drive.google.com/​file/​d/​13u_nzG317tdKUMfg48LzjRUdDgG6FFLZ/​view?​usp=sharing|Link demo joc Pac-Man]]\\ 
 Momemente relevante:​\\ Momemente relevante:​\\
 {{:​pm:​prj2021:​alazar:​azamfirei_eduard:​start_game.jpg?​300|}} {{:​pm:​prj2021:​alazar:​azamfirei_eduard:​start_game.jpg?​300|}}
Line 124: Line 114:
 30 mai 2021: realizare cod proiect final\\ 30 mai 2021: realizare cod proiect final\\
 31 mai 2021: completare schemă electrică și hardware design\\ 31 mai 2021: completare schemă electrică și hardware design\\
-1 iunie 2021: completare software design \\+1 iunie 2021: completare software design, realizare video și poze proiect, completare concluzie, download și rezultate obținute ​\\
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 {{:​pm:​prj2021:​alazar:​azamfirei_eduard:​joc_pac-man.pdf|}}\\ {{:​pm:​prj2021:​alazar:​azamfirei_eduard:​joc_pac-man.pdf|}}\\
pm/prj2021/alazar/joc_pac-man.1622551439.txt.gz · Last modified: 2021/06/01 15:43 by eduard.azamfirei
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