Survival Shooter

Nume: Anghel Mihai-Gabriel
Grupa: 336CC

Introducere

Jocul constă într-un personaj ce este controlat de un joystick, se poate mișca sus-jos, stânga-dreapta, trăgând cu proiectile în obiecte care se mișcă pe verticală (sus → jos). Când player-ul elimină obiecte, punctajul crește și buzzer-ul produce un zgomot, altfel punctajul va scădea. Player-ul are 3 vieți de-a lungul unei sesiuni de joc, evidențiate prin trei leduri care se sting secvențial în momentul în care personajul este atins de un obiect. La anumite perioade de timp, viteza cu care obiectele vin și/sau densitatea lor va crește, pentru o dificultate sporită. Personajul va ataca în momentul apăsării unui buton. Anumite informații legate de joc, cum ar fi: timestamp-ul și scorul jucătorului cu cele mai bune rezultate, se vor salva pe un card microSD. Scopul jocului este ca player-ul să rămână în viață cât mai mult timp și să acumuleze un punctaj cât mai mare.

Descriere generală

Descriere

Jocul are scopul de a oferi un joc plăcut care stârnește dorința de a bate recordul înregistrat pâna la momentul respectiv. Acesta este construit pe 3 niveluri de dificultate. Primul nivel este de acomodare, al doilea pentru introducere într-un ritm mai rapid, iar ultimul nivel te provoacă să dai tot ce ai mai bun. Controlul player-ului este foarte ușor mulțumită joystick-ului, același lucru fiind valabil și pentru bombardarea inamicilor. Atât buzzer-ul, cât și led-urile sporesc adrenalina menită să facă un joc cât mai atractiv.

Input:

  • Joystick-ul face deplasarea player-ului
  • Butonul declanșează lansarea proiectilului
  • Modulul RTC pentru a putea stabili timestamp-ul
  • Modulul microSD de pe care se vor citi date

Output:

  • Ecranul LCD pe care apare animația
  • Trei LED-uri care indică nivelul vieții player-ului
  • Buzzer-ul care scoate un sunet când player-ul doboară un obiect și probabil atunci când se finalizează jocul
  • Modulul microSD pe care se vor scrie anumite date

Joystick-ul este conectat la pinii analogici A0, A1 ai plăcuței Arduino
Butonul este conectat la pinul digital 2 folosește o rezistență de pull-down de 1kohm
Buzzer-ul este conectat la pinul digital 3
Display-ul folosește pinii digitali 8 - 12
ShiftRegister-ul folosește pinii digitali 5 - 7
Cele trei leduri care indică nivelul vieții player-ului sunt conectate la ieșirile Q0, Q1 și Q2 ale shiftregister-ului
Modulul microSD este conectat la pinii Q3 - Q6 ai shiftregister-ului

Toate componentele sunt legate fie la sursa de 5V fie la cea de 3.3V ai placuței arduino și folosesc GND-ul comun.

Hardware Design

Schema electrică:

Listă piese:

  • Placă Arduino UNO
  • LCD Nokia 5110
  • Modul RTC
  • Modul microSD
  • Breadboard
  • Buton
  • Joystick
  • Buzzer
  • LED-uri
  • Shift register
  • Rezistențe
  • Fire

Software Design

Mediu dezvoltare

  • Arduino IDE

Biblioteci

  • SPI.h
  • SD.h
  • Adafruit_PCD8544.h

Funcțiile și structurile implementate

  • void readMAXScore()
    • citește rezultatul maxim din cardul microSD
  • void writeMAXScore()
    • citește rezultatul maxim din cardul microSD
  • updateShiftRegister(byte updateLed)
    • face update la pinii de output ai ShiftRegister-ului (set / reset)
  • void turnOnLeds()
    • aprinde ledurile
  • void turnOffLeds(int Led, bool leds)
    • stinge unul sau toate ledurile, în funcție de opțiunea 'leds'
  • void startJingle()
    • pornește un pattern muzical la anumite momente de timp
  • void setDisplay(int level)
    • face anumite setări display-ului
  • void setLevel(int level, int deltatime, float objSpeed)
    • această funcție este o interfața de setup apelată de urmatoarele trei funcții
  • void level1_setup()
    • setează contextul jocului (display, jucator, obiecte) pentru level 1
  • void level2_setup()
    • setează contextul jocului (display, jucator, obiecte) pentru level 1
  • void level3_setup()
    • setează contextul jocului (display, jucator, obiecte) pentru level 1
  • void drawPlayer(float x, float y)
    • desenează player-ul
  • void drawBullet()
    • desenează proiectilul folosit de player pentru a doborî obiectele
  • void drawObject()
    • desenează obiectele
  • void movePlayer(float *x, float *y, int deltaX, int deltaY)
    • la input-ul joystick-ului, se face mișcarea player-ului
  • bool bulletCollision(int i)
    • verifică dacă proiectilul este în coliziune cu vreun obiect
  • void checkPlayerLives()
    • verifică dacă player-ul mai are vieți active
  • void computeScore()
    • aplică o formulă pentru a calcula scorul final
  • bool checkGameOver()
    • verifică dacă jocul s-a terminat (player-ul nu mai are viață) + comută într-o stare finală a jocului
În ceea ce privește structurile, am creat două: object și _bullet
  • object - un obiect de tip object conține date despre: poziție, viteză asociată, activ / inactiv, o perioadă de timp pe care o folosesc pentru generere de obiecte
  • _bullet - un obiect de acest tip înglobează: poziție, viteză asociată, activ / inactiv
Mai jos am realizat o schemă prin care se evidentiază interacțiunea dintre funcțiile implementate. Funcțiile care sunt apelate din setup() și loop() sunt puse de la stânga la dreapta, în ordinea apelării lor.



Rezultate Obţinute

Mai jos puteți vedea rezultatele obținute în diferite faze ale jocului

Concluzii

Download

Jurnal

Data Progres
03.05.2022 Pagina wiki
05.05.2022 1) Descriere proiect
2) Schema bloc
3) Listă componente
4) Mediu de dezvoltare
25.05.2022 1) Schema electrică
2) Biblioteci folosite
26.05.2022 1) Completare descriere generală
2) Adăugare funcții si structuri impelmentate
3) Adăugare rezultate obținute
4) Adăugare arhivă de download
5) Bibliografie
28.05.2022 1) Adăugare schemă bloc software


Bibliografie/Resurse

pm/prj2022/ndrogeanu/survival_shooter.txt · Last modified: 2022/06/02 14:44 by mihai.anghel0711
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