Destroy Your Lungs - Mario Survival Edition

Introducere

Joc pe un ecran LCD cu un personaj care trebuie sa sara peste obstacole. Saritura va fi facuta in momentul in care senzorul de lumina va identifica daca laserul sau lanterna folosite separat, sunt pornite. Buzzer-ul va fi folosit pentru a emite sunete in functie de rezultatul jocului: victorie sau infrangere. Victoria va fi asigurata in momentul in care jucatorul a reusit sa supravietuiasca timp de 100 de secunde fara a fi lovit de vre-un obstacol. Obiectele vor veni cu viteza mare, si pentru asta, jucatorul trebuie sa le incetineasca, tipand :). Exista 2 trepte de viteza, in functie de cat de tare se tipa. Vitezele vor fi date de culoarea LED-ului. Senzorul de sunet se va activa in momentul in care se apasa pe buton.

Descriere generală

Jocul porneste cu un ecran de intro, pe care apare numele jocului, “Light the way Yell for Freedom”, nume relativ sugestiv. Jocul este inspirat din mecanica jocului Dino Run din browser-ul Google, atunci cand suntem offline, in care player-ul trebuie sa se urce pe obiecte, ca in cazul unui joc de tip Mario. Pentru a sari peste obiecte, am folosit un senzor de lumina, care atunci cand citeste o valoare a intensitatii luminii mai mare decat o valoare data, va sari peste obiect (sau va sari pur si simplu, tinand de sincronizarea noastra). Pentru a face jocul mai interesant, oferim posibilitatea de a alege o portiune de joc mai simpla, prin apasarea unui buton care activeaza un senzor de sunet. In momentul in care senzorul se activeaza trebuie sa tipam puternic (daca nu o facem, jocul va ramane pe nivelul hard :) ), pana beculetul RGB se va activa. In momentul acesta, daca becul este rosu, suntem pe dificultate Hard, iar daca este pe culoarea verde, atunci avem o dificultate normala. Atenie !!! Dificultatea normala nu va ramane permanent la fel, ea va trece la un moment dat inapoi in faza de dificultate Hard.

Schema Bloc

Hardware Design

Lista componentelor folosite:

  • Arduino Uno
  • fire
  • rezistente
  • ecran LCD
  • senzor de lumina
  • senzor de sunet
  • LED RGB
  • butoane push
  • buzzer

Schema Electrica

Software Design

Mediu de dezvoltare:

  • Arduino IDE pentru realizarea programului
  • Eagle pentru realizarea schemei electrice

Librarii Folosite

  • Wire.h
  • LiquidCrystal_I2C.h
  • ClosedCube_OPT3001.h

Detalii implementare si descrierea codului

Am inceput implementarea proiectului prin atasarea la Arduino a ecranului LCD I2C, pentru a ii testa ca functionalitatea este ok. Am continuat apoi cu conectarea unui buton la placa, astfel incat sa pot testa etapele de realizare ale jucatorului si ale mapei. In continuare, am ajuns la folosirea senzorului de lumina in locul butonului, pentru etapa de sarit a eroului creat. M-am folosit aici de biblioteca ClosedCube_OPT3001.h, pentru a putea citi mai usor intensitatea luminii, masurata in lux. Astfel, am pus o limita pentru partea de sarit in valoare de 1500 de lucsi, care daca o depasesc , atunci voi sari si cat timp valoarea este activa (adica mai mare) iar jucatorul se afla deja pe un obstacol, acesta va merge pe el.In momentul in care sursa de lumina este indepartata, jucatorul va cadea de pe obstacol, si va pierde.

Daca jucatorul se impiedica de un obstacol, va pierde mereu. Jocul este de tip endless, in momentul in care se pierde meciul, jocul se va relua. In continuare, am adaugat buzzer-ul pentru a reda diferite sunete, de coliziune, de pierdere, de incepere a jocului, etc. Ultima parte a fost cea de reutilizare a butonului prin attachInterrupt, cu alt scop, anume pentru a putea schimba dificultatea jocului. Dificultatea jocului este data de viteza cu care se deplaseaza obiectele, controlata printr-o functie de delay(). Astfel, dificultatea este Hard pentru delay de 40, iar dificultatea este normala pentru un delay de 120.

Pentru ca jucatorul sa stie pe ce dificultate se afla, am adaugat si un LED RGB, conectat prin PWD, care va fi colorat in rosu pentru Hard si in verde pentru Normal. Schimbarea de dificultate se va realiza prin apasarea butonului si strigarea efectiva a jucatorului. Dificultatea va reveni la Hard in momentul in care scorul care se afla in dreapta sus este un numar multiplu de 15.

Rezultate Obţinute

Concluzii

A fost un proiect destul de interesant si fun de implementat, si am intampinat mai multe probleme, multe dintre acestea fiind de parte hardware, cum ar fi: intelegerea functionalitatii unor componente care au o documentatie relativ putin explicata, precum si montarea si lipirea unor pini pe diversi senzori, cum ar fi senzorul de lumina, care a dat ceva emotii, fiind prima oara cand a trebuit sa lipesc de asa maniera. De asemenea, testarea a fost una destul de fun, intrucat stand la camin, senzorul de sunet testat seara a atras multe urechi in jurul camerei :). Overall, pot spune ca rezultatul obtinut este mai mult decat satisfacator, si chiar a iesit mult mai bine decat chiar credeam, in teorie.

Download

Jurnal

  • 20.04.2022 : Alegere tema
  • 21.04.2022 : Realizare pagina pe ocw
  • 24.04.2022: Comandarea pieselor
  • 11.05.2022: Inceperea efectiva a implementarii proiectului
  • 22.05.2022: Am terminat de implementat logica de baza a proiectului
  • 25.05.2022: Finalizarea micilor detalii adaugate + testare amanuntita
  • 27.05.2022: Finalizarea pagina de wiki de pe ocw

Bibliografie/Resurse

pm/prj2022/arosca/lung_destroyer.txt · Last modified: 2022/05/27 22:07 by bogdan_marian.cazan
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