Adina-Ştefania BUDRIGĂ (78490) - 💣 Bomberman 💣

Autorul poate fi contactat la adresa: stefaniabudriga@gmail.com

Introducere

Proiectul este o implementare a jocului Bomberman pe care îmi plăcea foarte mult să îl joc când eram mai mică. Este un joc strategic, two-player, ce presupune eliminarea adversarului prin plasarea unor bombe în calea sa.

Fiecare jucător are la dispoziție un număr nelimitat de bombe, doar că pot pune pe ecran o singură bombă la un moment dat, ce explodează după un anumit timp.

Utilitatea lui este aceea de amuzament: între două teme pentru facultate, mai joc un bomberman cu prietenii mei :-D

Descriere generală

Vor exista câte 5 butoane pentru fiecare jucător (4 pentru deplasare și unul folosit pentru montarea unei bombe), iar jocul se va putea urmări prin intermediul LCD-ului colorat. Am ales să fac implementarea prin intermediul butoanelor și nu joystick-uri din motive de familiaritate (vreau să mă folosesc mai mult de ce am lucrat la laborator) și economice ;-)

În labirint există mai multe tipuri de bombe pe care le pot lua jucătorii și care nu explodează, ci doar le aduc (sau nu!) beneficii. Acestea apar pe ecran la intervale regulate de timp, fiind generate aleatoriu. Fiecare jucător pornește cu 3 vieți.

Partea amuzantă a acestui joc este faptul că bomberman-ii se pot sinucide dacă își pun bombele prost și se află în raza de acțiune a acestora. La final (când expiră runda de joc sau moare un jucător) câștigă jucătorul cu cele mai multe vieți rămase.

Hardware Design

Listă de piese:

  • PCB
  • Pachetul cu componente de bază
  • LCD 2.8'' 240×320 px
  • Fire mamă-mamă, tată-mamă
  • Convertor tensiune
  • Plăci de test
  • Cablu USB
  • Butoane
  • Opțional: buzzer

Schema electrică:

Software Design

Ca jocul să vină cu cât mai multe funcționalități, vor exista patru tipuri de power-ups pentru bombe:

  • Fire-Up. O bombă explodează în formă de “+” (deci poate parcurge 4 căsuțe). Cu acest power up, în schimb, distanța afectată de foc se mărește până la 8 căsuțe (devine un “+” mai mare). Se poate folosi doar pentru 3 atacuri consecutive, după care se pierde puterea respectivă.
  • Bomb-Up. Un jucător deține un stoc de bombe pe care le poate pune simultan pe ecran la un moment dat (inițial este 1). La fiecare bomb-up acumulat, se incrementează cu 1 acest stoc. Power-up-ul rămâne activ pe toată durata jocului (sau până se ia un bomb-down).
  • Tracing-Bomb. Dacă oponentul e la distanță de 3 căsuțe la un moment dat, iar jucătorul curent a luat acest power-up, bomba nu mai explodează în formă de +, ci “urmărește” adversarul. Odată acumulat acest power-up, se va folosi automat la prima declanșare de bombă (după care se pierde super-puterea).
  • Heal-Bomb. Fiecare jucător pornește cu 3 vieți la începutul jocului. Dacă moare la un moment dat și ia un heal-bomb apoi, jucătorul își poate recupera una dintre vieți. Heal-Bomb mai este utilă atunci când bomberman-ul este bolnav.

Și două tipuri de power-downs:

  • Bomb-Down. Pe dos față de bomb-up, adică decrementează cu 1 numărul de bombe pe care le poate pune simultan un jucător pe ecran.
  • Surprise-Bomb. Dacă un jucător ia această bombă, se poate întâmpla unul dintre următoarele:
    • Sickness. Se îmbolnăvește și fie nu mai poate pune bombe pentru un anumit timp, fie nu se mai poate opri din pus bombe. Boala este contagioasă; dacă doi jucători se ating în același timp și unul dintre ei este bolnav, și celălalt o va lua razna. Boala persistă până când se ia un Heal-bomb.
    • Stand-Still. Așa cum îi spune și numele, această bombă va face ca jucătorul să nu se poată mișca din căsuța curentă pentru un anumit timp.
    • Reverse-movement. Inversează sensurile de mișcare (sus devine jos, ← devine →, etc). Power-down-ul dispare după un anumit timp.

Alte observații

  • Tipurile de bombe diferite se diferențiază prin <fc #FF0000>c</fc><fc #FFFF00>u</fc><fc #FF00FF>l</fc><fc #0000FF>o</fc><fc #00FFFF>r</fc><fc #008000>i</fc>.
  • Când o bombă ia foc, căsuțele din “+” (sau path-ul până la adversar) se vor umple cu o formă de foc, apoi vor reveni la normal.
  • Când un bomberman moare, forma lui devine scheletică, iar jocul se termină, afișându-se un mesaj sugestiv.
  • Vor exista 2 tipuri de hărți (labirint) desenate pentru joc.

Stretch goals

  • Bombele cu semnificație diferită să fie desenate diferit (deci să aibă forme diferite, nu doar să fie distinse prin culoare).
  • Adăugare tipuri diferite de sunet: explozie de bombă, mișcare jucător, fundal sonor default. Folosirea buzzer-ului pentru realizarea acestei funcționalități.

Rezultate Obţinute

  • Până la urmă mi-am desenat câteva primitive (cerc, dreptunghi) și am ales ca efectul de bombă să îl creez prin mai multe cercuri concentrice, de diferite culori reprezentative pentru foc (roșu, galben, portocaliu). A ieșit mai bine așa decât doar simplu ”+” :-D La Fire-Up, diferența e că raza inițială (a primului cerc) e puțin mai mare, ca să creeze un damage pe măsură.
  • Am folosit buzzer-ul ca să creez un sunet atunci când o bombă explodează.

Concluzii

Mi-a plăcut să lucrez la acest proiect :-D Am învățat multe lucruri noi (în special la partea de hardware unde lucrurile chiar au mers surprinzător de bine - lipirea componentelor, a butoanelor, conectarea LCD-ului / buzzerului).

Download

Jurnal

12 aprilie. Am ales tema proiectului și primit ACK din partea asistentului cum că ar fi făcubil și de către mine :-D

20 aprilie. Submitere milestone 1. Am detaliat puțin mai mult ceea ce vreau să fac.

27 aprilie - 3 mai. Lipirea pieselor pe placa de bază (rezistențe, led-uri, diode, etc).

5 mai. Submitere milestone 2. Am încărcat schema electrică pe pagina proiectului.

17 mai. Conectare LCD la plăcuță: am avut nevoie de un translator de nivel.

18 mai. Realizarea plăcilor de test (am descoperit într-un final că 10 butoane nu îmi încap pe o plăcuță mică de test :-? ⇒ a trebuit să fac rost de încă una): lipire butoane, fire de breadboard.

21 mai. Realizarea meniului, desenare caractere/bombe, implementare nivelurilor de joc (Easy - fără obstacole, potrivit pentru ca user-ul să se obișnuiască cu jocul și funcționalitățile lui; Medium - cu obstacole).

23 mai. Submitere milestone 3. Am încărcat documentația provizorie.

24 mai. Am conectat buzzer-ul, încărcat arhiva pe wiki și finalizat pagina de proiect.

Bibliografie/Resurse

pm/prj2018/rbarbascu/badina-bomberman.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