Adrian-George GĂVAN (87693) - Brick Breaker Game


Date de contact

Introducere

Proiectul constă în realizarea unui joc de tipul “Brick Breaker”. A fost unul din jocurile mele preferate ca și copil așa că m-am gândit că va fi interesant să implementez o versiune a acestui joc. Proiectul va avea un accelerometru pentru control și un LCD pentru vizualizarea desfășurării jocului.

Brick Breaker este un joc Arcade, în general single player. Jocul a fost numit inițial Breakout și a fost dezvoltat în 1976. Schimbarea majoră a apărut în 2007 când a fost lansat jocul sub denumirea de “Brick Breaker”. Acesta a fost primul joc creat pentru telefonul BlackBerry.

Descriere generală

Scopul jocului este ca jucătorul să distrugă toate cărămizile din nivelul corespunzător. Pentru a face acest lucru, jucătorul va utiliza o bilă care va fi lansată de pe o placă. Bila se poate mișca în diferite direcții, iar o căramidă va fi distrusă când bila va intra în contact cu ea.

Greutatea jocului vine din faptul că jucătorul trebuie să nu lase bila să iasă din ecran. Aceasta poate ieși doar prin latura pe care se află și placa jucătorului. Jucătorul trebuie să controleze placa (să o miște stânga dreapta) astfel încât să nu lase bila să treacă de placă și să o redirecționeze către diverse căramizi. În funcție de nivel, un jucător va avea un număr limitat de vieți. Când bila iese din joc se va pierde o viață. Jucătorul pierde jocul dacă rămâne fără vieți.

Jocul va avea mai multe nivele: cărămizi mai rezistente, bila se va mișca mai rapid sau vor fi mai puține vieți. De asmenea, pe parcursul diferitelor nivele se vor întâlni diverse puteri (cum ar fi o placă mai mare sau o viață în plus).

Schemă bloc:


Descriere schemă bloc

  • Input: Jucătorul va utiliza butoanele pentru a selecta diferite opțiuni (cum ar fi nivelul), iar datele primite de la accelerometru vor fi utilizate pentru a mișca placa jocului pentru a nu lăsa bila să iasă din joc (rezultând în pierderea unei vieți). Accelerometrul va fi pus pe o placă separată care va fi mișcată stânga-dreapta, în funcție de direcția în care vrem să mutăm placa.
  • Output: Jocul va putea fi observat pe LCD-ul proiectului. Vor fi afișate toate elementele jocului și desfășurarea jocului va putea fi observată pe LCD. Când se va lovi o cărămidă sau placa jucătorului se va produce un sunet cu ajutorul buzzer-ului.

Hardware Design

Listă componenete:

  • PCB
  • Plăci test
  • Fire
  • Componente de bază pentru placa de bază
  • 2 rezistențe de 10K
  • 5 butoane
  • Accelerometru MPU6050
  • Buzzer activ
  • LCD 2.8'' 240×320 px

Schemă electrică:

LCD-ul și buzzerul sunt montate ambele pe aceeași placă de test.
Cele 5 butoane și accelerometrul sunt montate pe aceeasi placă, de aici putând fi controlată placa, dacă se pune pauză sau se iese din joc, se pot alege diverse opțiuni etc.
Buzzerul este conectat la portul D, LCD-ul este conectat la portul B, Accelerometrul este conectat la portul C și butoanele sunt conectate la portul A.
GND-ul tras din portul A este tras din pin-ul numit VCC deoarece pe placa de bază denumirea pinilor VCC și GND pentru portul A a fost inversată.

Software Design

Jocul începe prin afișarea unui mesaj de “Bun venit”. Se va apăsa orice buton pentru a trece mai departe.
Jocul are 3 meniuri pentru opțiuni:

  • Selectarea nivelului
  • Selectarea modului de control
  • Selectarea culorii plăcii și a bilei

Primul meniu este cel pentru selectarea dificultății nivelului. Jocul are 3 nivele:

  • ușor
  • mediu
  • greu

Se vor folosii butoanele “Up” și “Down” pentru a naviga printre nivele. Opțiunea curentă va avea în dreptul ei ”← Selected”. Se va apăsa “Enter” pentru a selecta nivelul.
Al doilea meniu este cel pentru selectarea modului de control. Jucătorul poate alege să utilizeze butoanele “Left” și “Right” de pe placa de control pentru a muta placa din joc sau poate să utilizeze accelerometrul, prin înclinarea plăcii de control în stânga sau dreapta. La fel ca și mai sus, se alege opțiunea dorită și apoi se trece la următorul meniu.

Din ultimul meniu jucătorul poate alege una din cele 3 variante pentru culoarea plăcii și a bilei.
După ce s-au ales opțiunile, jocul va începe iar pe ecran vor fi afișate elementele nivelului corespunzător.
Jucătorul va începe mereu cu 3 vieți, iar viețile vor putea fi văzute pe peretele de sus al nivelului.
Jocul va fi câștigat dacă jucătorul va distruge toate cărămizile. În funcție de nivel, cărămizile au 1,2 sau 3 vieți (și culori diferite în funcție de numărul de vieți curent).

Jucătorul va pierde dacă va rămâne fără vieți (caderea bilei pe lângă placă sau prin diverse bonusuri).
Cărămizile pot avea 1,2 sau 3 vieți ⇒ vor fi colorate cu Galben (1 viață), Albastru (2 vieți) și Roșu închis (3 vieți). Când o cărămidă va fi lovită, fie va fi ștearsă, fie i se va scădea viața și i se va modifica culoarea.

Placa se poate mișca stânga dreapta (până la pereți), iar bila are 3 direcții: verticală, oblic la stânga și oblic la dreapta. Bila va lua o direcție în funcție de locul în care lovește placa și în funcție de cum va ricoșa din pereți sau cărămizi.

Jocul are și opțiunea de pauză: se poate apăsa “Down/P” pentru a pune pauză sau pentru a anula pauza.
Jocul are și opțiunea de escape, astfel încât cand se apasă butonul “Up/Esc” în timpul jocului, jocul se va termina și ne vom întoarce la primul meniu.
Pentru a face totul mai interesant, au fost adăugate și bonusuri în joc. Sunt 6 tipuri de bonusuri în total:

  • Viață în plus
  • Viață în minus
  • Placă mai mare
  • Placă mai mica
  • Bila de neoprit
  • Moarte instantanee

Bonusurile sunt atașate random unor cărămizi. Când o cărămidă este distrusă și are un bonus, acesta va începe să cadă spre partea inferioara a ecranului.
Daca cade pe langa placă atunci acesta dispare. Dacă este prins cu placa, atunci se va executa efectul lui.

Orice nivel va avea cate 2 bonusuri din fiecare din primele 5 tipuri de bonusuri din listă. Nivelele mediu și hard vor avea și un bonus de tipul “Moarte instantanee”.
Acest bonus ii ia toate viețile jucătorului ⇒ jucătorul pierde instant. Dacă nivelul este hard, atunci vor mai fi în plus 2 bonusuri pentru luare a unei vieți, pentru a face lucrurile mai grele.

Când se pierde o viață, bonusurile aflate în cădere vor fi automat distruse și efectul bonusurilor de tipul “placa mai mare”, “placa mai mică” sau “bila de neoprit” vor fi anulate.
Când un jucător câștigă sau pierde se va afișa un mesaj corespunzător pentru 7 secunde, iar apoi ne vom întoarce înapoi la meniul pentru selectarea nivelului.

Rezultate Obținute

Rezultatele au fost cele dorite: am reușit să creez un joc funcțional și să realizez tot ce mi-am propus.
Este un joc distractiv cu diverse opțiuni, nivele și bonusuri. Am reușit să fac și partea hardware să funcționeze, lucru de care imi era cel mai frică.
Jucătorul poate alege daca vrea să utilizeze butoanele pentru mișcarea plăcii sau accelerometrul. Dacă doreste să utilizeze accelerometrul, se va ține placa paralel cu podeaua și se va înclina spre stânga sau spre dreapta.

Un demo al proiectului poate fi descărcat de aici: demo_brickbreaker.zip.

Concluzii

  • Este foarte frumos ca după toată munca depusă să ai ceva practic care funcționeză.
  • Credeam că partea hardware va fi foarte grea, dar s-a dovedit a fi destul de ok (îți trebuia doar răbdare).
  • A durat puțin până am înteles cum să utilizez accelerometrul.
  • Am învățat multe lucruri noi, fiind prima materie unde am îmbinat așa mult partea hardware și software.
  • Chiar mi-a plăcut să lucrez la acest proiect.
  • Proiectul este funcțional și gata să fie folosit.

Download

Arhiva cu fișierele proiectului poate fi găsită aici: 334ca_gavanadriangeorge_brickbreaker.zip

Jurnal

  • 20.04.2019 - Început pagina proiect (Temă, Schema bloc și listă componente)
  • 22.04.2019 - Finalizare plăcuță de bază și încărcare bootloader
  • 03.05.2019 - Finalizare schemă electrică în EAGLE și câteva actualizări a paginii de proiect
  • 06.05.2019 - Finalizare montaj componente
  • 13.05.2019 - Găsit biblioteci, testat accelerometru, LCD, butoanele și buzzer-ul activ.
  • 15.05.2019 - Creat meniuri și logica de selectare a nivelelor
  • 17.05.2019 - Creat nivele și logica de afișare a lor, mesaj pentru victorie sau înfrângere
  • 18.05.2019 - Logica pentru coliziunile bilei cu cărămizile, pereții și placa. Logica pentru resetarea jocului la terminarea unui joc. Logica pentru pierderea vieților sau câștigarea jocului.
  • 19.05.2019 - Rezolvat bug-uri pentru afișarea culorii cărămizilor în funcție de viețile ei, afișarea vieților jucătorului, setat accelerometru și făcut bila rotundă
  • 22.05.2019 - Logica pentru bonusuri (creare bonusuri, căderea bonusurilor, efectele lor, contactul cu placa etc.)
  • 23.05.2019 - Aranjat cod și documentație

Bibliografie/Resurse

pm/prj2019/ctranca/87693.txt · Last modified: 2021/04/14 17:07 (external edit)
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