Differences

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

Link to this comparison view

pm:prj2021:apredescu:tetris [2021/05/28 14:11]
andrei.traistaru99 [Software Design]
pm:prj2021:apredescu:tetris [2021/05/28 18:44] (current)
andrei.traistaru99 [Bibliografie/Resurse]
Line 57: Line 57:
 Pentru fiecare joc în parte, există o anumită structură care memorează statusul jocului și permite implementarea logicii jocului: Pentru fiecare joc în parte, există o anumită structură care memorează statusul jocului și permite implementarea logicii jocului:
   * Tetris   * Tetris
-Într-o buclă infinită, se generează următoarea poziție pentru piesa în mișcare pe baza inputului de la joystick. În momentul în care jucătorul apasă pe joystick, se execută o rutină de tratare a întreruperii de pe pinul corespunzator în care se marchează faptul că piesa curentă trebuie rotită. Se verifică dacă prin rotire / deplasare stânga - dreapta / coborâre cu o poziție nu apare vreo coliziune. Dacă noua poziție este validă, se redesenează piesa prin suprascriere cu negru și redesenarce ​în noua poziție. Altfel piesa rămâne pe loc și la următoarea iterație se va genera o nouă piesă. La fiecare iterație se verifică existența rândurilor complete care vor fi eliminate din tabla de joc, aducând o bonificație la scor.+Într-o buclă infinită, se generează următoarea poziție pentru piesa în mișcare pe baza inputului de la joystick. În momentul în care jucătorul apasă pe joystick, se execută o rutină de tratare a întreruperii de pe pinul corespunzator în care se marchează faptul că piesa curentă trebuie rotită. Se verifică dacă prin rotire / deplasare stânga - dreapta / coborâre cu o poziție nu apare vreo coliziune. Dacă noua poziție este validă, se redesenează piesa prin suprascriere cu negru și redesenare ​în noua poziție. Altfel piesa rămâne pe loc și la următoarea iterație se va genera o nouă piesă. La fiecare iterație se verifică existența rândurilor complete care vor fi eliminate din tabla de joc, aducând o bonificație la scor.
   * X și O   * X și O
 Într-o buclă infinită, se așteaptă input-ul jucătorului. În momentul în care acesta se deplasează cu joystick-ul stânga - dreapta, sus - jos, se redesenează pătratul care permite selecția următoarei mutări. În momentul în care se apasă pe joystick, prin rutina de tratare a întreruperii,​ se marchează un flag în memorie. La următoarea iterație, dacă acest flag este setat, se verifică dacă poziția selectată este validă, caz în care se desenează un X în celula corespunzătoare. În continuare se generează o poziție pentru jucătorul O după o logică trivială: se verifică dacă se poate câștiga dintr-o mutare cu un O; altfel se verifică dacă se poate câștiga cu o mutare cu un X (pentru apărare); altfel se alege aleator o poziție liberă. Se verifică în permanență dacă jocul s-a încheiat și care jucător a câștigat. Într-o buclă infinită, se așteaptă input-ul jucătorului. În momentul în care acesta se deplasează cu joystick-ul stânga - dreapta, sus - jos, se redesenează pătratul care permite selecția următoarei mutări. În momentul în care se apasă pe joystick, prin rutina de tratare a întreruperii,​ se marchează un flag în memorie. La următoarea iterație, dacă acest flag este setat, se verifică dacă poziția selectată este validă, caz în care se desenează un X în celula corespunzătoare. În continuare se generează o poziție pentru jucătorul O după o logică trivială: se verifică dacă se poate câștiga dintr-o mutare cu un O; altfel se verifică dacă se poate câștiga cu o mutare cu un X (pentru apărare); altfel se alege aleator o poziție liberă. Se verifică în permanență dacă jocul s-a încheiat și care jucător a câștigat.
Line 70: Line 70:
 Pentru monitorizarea progresului am realizat câteva imagini din timpul implementării:​ Pentru monitorizarea progresului am realizat câteva imagini din timpul implementării:​
  
-  * Testarea componentelor pe breadboard (o parte din legături ​le-am lipid pe un cablaj de test pentru conexiuni ferme):+  * Testarea componentelor pe breadboard (o parte din legături ​sunt deja lipite ​pe un cablaj de test pentru ​a obține ​conexiuni ferme):
 {{:​pm:​prj2021:​apredescu:​tetris:​componente_pe_breadboard_1.jpeg?​500|}} {{:​pm:​prj2021:​apredescu:​tetris:​componente_pe_breadboard_1.jpeg?​500|}}
  
Line 92: Line 92:
 ===== Concluzii ===== ===== Concluzii =====
  
-Proiectul a fost o oportunitate de a experimenta implementarea unor jocuri clasice, simple, atât din perspectivă software de nivel înalt (logica jocului), cât și dintr-o perspectivă software de nivel jos (desenarea pieselor de Tetris din figuri geometrice simple / updatarea imaginii de pe ecran încât întârzierea produsă de această acțiune să nu reducă semnificativ experiențde joc - ștergerea și redesenarea întregului ecran la fiecare nou cadru nu a reprezentat o soluție întrucât tranziția nu avea loc la o frecvență suficient de mare încât să devină insesizabilă pentru ochiul uman, caz în care am adoptat o tehnică de a actualiza doar părțile din imagine care s-au modificat de la ultimul cadru). De asemenea, necesitatea de a lipi fire pe un cablaj de test și a monta toate componentele într-o cutie de dimensiuni cât mai mici (reducerea spațiului ocupat pe cât posibil printr-o organizare atentă a firelor / aranjarea componentelor pentru a realiza un dispozitiv "​ergonomic"​) au reprezentat aspecte plăcute ale implementării proiectului.+Proiectul a fost o oportunitate de a experimenta implementarea unor jocuri clasice, simple, atât din perspectivă software de nivel înalt (logica jocului), cât și dintr-o perspectivă software de nivel jos (desenarea pieselor de Tetris din figuri geometrice simple / updatarea imaginii de pe ecran încât întârzierea produsă de această acțiune să nu reducă semnificativ ​calitatea ​experienței de joc - ștergerea și redesenarea întregului ecran la fiecare nou cadru nu a reprezentat o soluție întrucât tranziția nu avea loc la o frecvență suficient de mare încât să devină insesizabilă pentru ochiul uman, caz în care am adoptat o tehnică de a actualiza doar părțile din imagine care s-au modificat de la ultimul cadru). De asemenea, necesitatea de a lipi fire pe un cablaj de test și a monta toate componentele într-o cutie de dimensiuni cât mai mici (reducerea spațiului ocupat pe cât posibil printr-o organizare atentă a firelor / aranjarea componentelor pentru a realiza un dispozitiv "​ergonomic"​) au reprezentat aspecte plăcute ale implementării proiectului.
 ===== Download ===== ===== Download =====
  
 Arhiva cuprinde: Arhiva cuprinde:
   * Componenta software implementată   * Componenta software implementată
-  * Pozele ​din timpul implementării proiectului+  * Poze din timpul implementării proiectului
   * Schema bloc   * Schema bloc
   * Schema electrică   * Schema electrică
Line 109: Line 109:
   - Stabilirea temei proiectului ✔   - Stabilirea temei proiectului ✔
   - Stabilirea componentelor necesare / Studierea compatibilității pieselor ✔   - Stabilirea componentelor necesare / Studierea compatibilității pieselor ✔
-  - Testarea ​componentelor ​individual ✔+  - Testarea individuală a componentelor ​
   - Montarea tuturor componentelor pe breadboard ✔   - Montarea tuturor componentelor pe breadboard ✔
   - Montarea tuturor componentelor pe cablajul de test ✔   - Montarea tuturor componentelor pe cablajul de test ✔
Line 124: Line 124:
  
 Resurse hardware: Resurse hardware:
-  * Demonstrație cu proiectul în forma finală: https://​drive.google.com/​file/​d/​1S-WoGj8A0A0UtUowCiCEAjtv1QPca7kY/​view?​usp=sharing+  * Demonstrație cu proiectul în forma finală: https://​drive.google.com/​file/​d/​1S-WoGj8A0A0UtUowCiCEAjtv1QPca7kY/​view
   * Scheme pentru conectarea pinilor componentelor:​ https://​www.optimusdigital.ro/​ro/​   * Scheme pentru conectarea pinilor componentelor:​ https://​www.optimusdigital.ro/​ro/​
   * https://​www.analog.com/​en/​analog-dialogue/​articles/​introduction-to-spi-interface.html#​   * https://​www.analog.com/​en/​analog-dialogue/​articles/​introduction-to-spi-interface.html#​
  
 [[https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​apredescu/​tetris?​do=export_pdf|Export to pdf]] [[https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​apredescu/​tetris?​do=export_pdf|Export to pdf]]
pm/prj2021/apredescu/tetris.1622200281.txt.gz · Last modified: 2021/05/28 14:11 by andrei.traistaru99
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