Differences

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

Link to this comparison view

pm:prj2022:ionuto:ponggame [2022/05/16 01:19]
raluca_elena.aldea
pm:prj2022:ionuto:ponggame [2022/05/16 14:18] (current)
raluca_elena.aldea [Download]
Line 9: Line 9:
 Scopul jocului este de lovi mingea si a-l face pe oponent sa rateze. Scopul jocului este de lovi mingea si a-l face pe oponent sa rateze.
  
-Exista modul de joc player vs player +Exista modul de joc player vs playerFiecare jucator va avea un joystick prin care isi poate controla paleta. La atingerea paletei, mingea ricoseaza si isi schimba directia de mers.
-  +
-Fiecare jucator va avea un joystick prin care isi poate controla paleta. La atingerea paletei, mingea ricoseaza si isi schimba directia de mers.+
  
-Pe parcursul jocului, in fiecare runda, va aparea pe ecran o putere (care va mari lungimea paletei), iar jucatorul care a atins ultimul mingea este cel care o colecteaza.+Pe parcursul jocului, in fiecare runda, va aparea pe ecran o putere (care va mari lungimea paletei), iar jucatorul care a atins ultimul mingea este cel care o colecteaza. Efectul bonusului inceteaza la sfarsitul rundei.
  
-Un player primeste un punct in momentul in care adversarul rateaza mingea. ​La acumularea a 3 puncte, jocul se termina si se poate incepe o noua runda.+Un player primeste un punct in momentul in care adversarul rateaza mingea. ​Atunci cand unul dintre jucatori acumuleaza ​3 puncte, jocul se termina si se poate incepe o noua runda.
  
-Am ales implementarea acestui joc pentru ca este probabil printre primele jocuri pe care l-am jucat in copilarie si s-a potrivit perfect cu dorinta mea de a face un proiect ce implica un ecran LCD.+Am ales implementarea acestui joc pentru ca este probabil printre primele jocuri pe care l-am jucat in copilarie si s-a potrivit perfect cu dorinta mea de a lucra la un proiect ce implica un ecran LCD.
  
 ===== Descriere generală ===== ===== Descriere generală =====
Line 23: Line 21:
 {{ :​pm:​prj2022:​ionuto:​pong_schematic_1.png?​nolink |}} \\ {{ :​pm:​prj2022:​ionuto:​pong_schematic_1.png?​nolink |}} \\
  
-Fiecare jucator va avea propriul modul joystick prin care controleaza paleta ​sus sau josMiscarile joystick-ului sunt procesate ​prin placuta Arduino Uno R3 ATmega328P si afisate pe ecranul LCD.+Fiecare jucator va avea propriul modul joystick prin care controleaza paleta. ​Asadar, sistemul are ca input comenzile jucatorilor,​ iar efectele acestora se regasesc in output, adica prin afisarea jocului pe display-ul atasat. In plus, terminarea unei runde si a jocului ​sunt anuntate ​prin sunete emise de buzzer.
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 32: Line 30:
   * Ecran LCD 1.8" SPI (LCD TFT de 1,8 ", cu rezolutia de 128 x 160 pixeli si 262k de culori)   * Ecran LCD 1.8" SPI (LCD TFT de 1,8 ", cu rezolutia de 128 x 160 pixeli si 262k de culori)
   * Modul Buzzer pasiv   * Modul Buzzer pasiv
-  * Modul Joystick PS2+  * 2 Module ​Joystick PS2
   * Rezistente   * Rezistente
   * Fire de legatura   * Fire de legatura
Line 39: Line 37:
   * Placa prototipare   * Placa prototipare
   * Breadboard   * Breadboard
 +
 +Am inceput proiectul prin conectarea ecranului la placuta Arduino. Dupa ce am invatat sa lucrez cu el, am desenat paletele si mingea. Urmatorul pas a fost sa conectez joystick-urile si sa fac paletele sa se miste. Dupa ce am reusit sa fac jocul functional, am conectat butonul ce reseteaza runda de joc si buzzer-ul care face zgomot la fiecare "​gol"​ dat de oricare dintre jucatori, iar la finalul rundei am implementat coloana sonora de la jocul Pac Man. Proiectul fiind pe final, am ales sa il conectez la baterii si un switch pentru a nu fi dependent de calculator.
 +
 +Schema proiectului: ​
 +
 +{{ :​pm:​prj2022:​ionuto:​screenshot_2022-05-16_at_11.07.32.png?​nolink&​800 |}}
 +
 +Schema detaliata a conexiunii ecranului (sursa: https://​mschoeffler.com/​2019/​06/​20/​arduino-tutorial-making-the-kmr-1-8-spi-tft-display-work/​): ​
 +
 +{{ :​pm:​prj2022:​ionuto:​screenshot_2022-05-15_at_23.00.16.png?​nolink&​800 |}}
 +
 +Proiectul: ​
 +
 +{{ :​pm:​prj2022:​ionuto:​img_8862.jpg?​nolink&​600 |}}
 +
 +Schema electrica: ​
 +
 +{{ :​pm:​prj2022:​ionuto:​pong_se-2.png?​nolink&​600 |}}
 +
 +===== Software Design =====
 +
 +Am realizat proiectul in Visual Studio Code, cu ajutorul extensiei Arduino.
 +
 +Proiectul este structurat in 6 fisiere.
 +
 +  * colors.h, ce contine codurile de culoare folosite pe parcursul proectului
 +  * constants.h,​ unde am definit diverse valori sau texte
 +  * song.h, ce contine codul sursa pentru coloana sonora a jocului Pac Man (sursa: https://​github.com/​robsoncouto/​arduino-songs/​blob/​master/​pacman/​pacman.ino)
 +  * lcd.cpp, ce contine implementarea metodelor ce tin de ecran (desenarea paletelor, a mingii, a puterii si a marginii ecranului)
 +  * lcd.h, header-ul fisierului lcd.cpp; contine semnaturile functilor
 +  * main.ino, ce contine toata logica jocului
 +
 +Pentru a porni jocul este nevoie de activarea switch-ului. Jocul incepe prin desenarea celor doua placute, a mingii, a puterii care apare random pe ecran si a marginii ecranului. Mingea merge spre paleta dreapta. In momentul in care puterea este colectata, paleta ultimului jucator care a atins mingea este marita cu 20 de pixeli. La acumularea unui punct, scorul este afisat peste marginea ecranului (stanga sus sau dreapta jos), sub forma unei mingi. La acumularea a 3 puncte, ecranul se actualizeaza cu textul "Left player won!" sau "Right player won", iar pe fundal se aude melodia tematica de la jocul Pac Man. La finalul cantecului, se poate apasa butonul de reset si se porneste o noua runda. ​
 +
 +
 +===== Rezultate Obţinute =====
 +
 +Am obtinut un joc functional, iar procesul de dezvoltare a fost foarte placut.
 +
 +{{:​pm:​prj2022:​ionuto:​img_8845.jpg?​nolink&​300|}}
 +{{:​pm:​prj2022:​ionuto:​img_8847.jpg?​nolink&​300|}}
 +{{:​pm:​prj2022:​ionuto:​img_8901.jpg?​nolink&​300|}}
 +{{:​pm:​prj2022:​ionuto:​img_8903.jpg?​nolink&​300|}}
 +
 +===== Concluzii =====
 +
 +A fost un proiect foarte distractiv de realizat. Am invatat sa lucrez cu o placuta arduino, sa folosesc un letcon, sa fiu atenta la conectarea firelor si mi-am indeplinit dorinta de a lucra cu un ecran LCD. Consider ca a fost de o dificultate medie si a ajutat la consolidarea cunostintelor acumulate la laborator. ​
 +
 +Cele mai mare dificultate a fost realizarea coliziunilor cu paleta.
 +===== Download =====
 +
 +Arhiva codului sursa:
 +
 +{{:​pm:​prj2022:​ionuto:​ponggame_aldearalucae.zip|}}
 +
 +Galerie imagini si scheme: ​
 +
 +{{:​pm:​prj2022:​ionuto:​galerieimagini_scheme.zip|}}
 +
 +
 +===== Jurnal =====
 +
 +  * Alegerea proiectului si gandirea functionalitatilor
 +  * Realizare documentatie Milestone 1
 +  * Conectarea ecranului LCD si invatarea modului de functionare
 +  * Desenarea paletelor, a mingii si realizarea functionalitatii de miscare
 +  * Realizarea coliziunilor cu paletele
 +  * Desenarea marginii ecranului si realizarea coliziunii cu aceasta
 +  * Desenarea puterii si implementarea logicii de colectare
 +  * Conectarea buzzer-ului si implementarea functionalitatilor asociate
 +  * Implementarea logicii butonului de reset si a switch-ului legat la baterii
 +  * Lipirea componentelor
 +  * Realizare documentatie Milestone 2
 +
 +
 +===== Bibliografie/​Resurse =====
 +
 +  * Codul sursa pentru coloana sonora Pac Man : https://​github.com/​robsoncouto/​arduino-songs/​blob/​master/​pacman/​pacman.ino
 +  * Conectarea ecranului : https://​mschoeffler.com/​2019/​06/​20/​arduino-tutorial-making-the-kmr-1-8-spi-tft-display-work/​
 +  * Conectare buton : https://​www.arduino.cc/​en/​Tutorial/​BuiltInExamples/​Button
 +  * Conectare buzzer : https://​create.arduino.cc/​projecthub/​SURYATEJA/​use-a-buzzer-module-piezo-speaker-using-arduino-uno-89df45
 +  * Conectare switch : https://​www.instructables.com/​Powering-Arduino-with-a-Battery/​
 +  * Logica coliziunilor:​ https://​gamedev.stackexchange.com/​questions/​4253/​in-pong-how-do-you-calculate-the-balls-direction-when-it-bounces-off-the-paddl
 +  * Diagramele au fost realizate cu ajutorul extensiei Drow.io pentru VS code si aplicatia Fritzing
 +
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
 +
pm/prj2022/ionuto/ponggame.1652653169.txt.gz · Last modified: 2022/05/16 01:19 by raluca_elena.aldea
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