Autorul poate fi contactat la adresa: Login pentru adresa
Am incercat sa fac programul cat mai simplu:
Am inceput prin generarea nivelului. Ca un prim pas mi-am creat prefabricatele (pereti, apa, lava) intr-o structura care le va tine pe toate. Urmatorul pas a fost ca sa ordonez aceste prefabricate. Am impartit ecranul in 8 diviziuni a cate 40 de pixeli pe latime acestea corespunzand fiecare unui obiect. Apoi cu ajutorul unui vector am retinut ordinea prefabricatelor pe ecran. De asemenea, am avut grija ca primul si ultimul obiect sa fie pereti pentru a face mai usor jocul. Ordonarea obiectelor random a fost prima problema reala deoarece:
Toata treaba asta si desenarea pasarii, a inimilor si chenarului pentru vieti mi-a luat cam o zi. Ceea ce urmeaza a durat ceva mai mult. Dar stiti cum se zice toate lucrurile la inceput sunt frumoase :)).
Urmatorul pas au fost coliziunile.. si de aici a devenit interesant. Pentru ca felul in care eu afisam pe ecran era putin.. ciudat. Mai exact, axele x si y erau inversate. Si de aici m-am chinuit putin sa ma folosesc de algoritmii de detectie de pe net (aabb collision detection) sau de suma Minkowski intre cele 2 dreptunghiuri - pasarea si obiectul. Ca orice om care face coliziuni de la 0, faci greseli, este pur si simplu natural, doar ca eu am facut mai multe. Si de asta am pierdut undeva la 17 ore ca sa imi dau seama ca mai bine iau pe foaie totul si fac dupa propria mea logica. Logica mea a fost ca sa detectez cu ce parte a obstacolului are loc coliziunea, detectarea in sine a coliziunii a fost folosind aabb collision detection. Logica mea.. una barbara, daca ma intrebi pe mine pentru ca pur si simplu compar laturile si in functie de pozitia lor imi dau seama ce parte a lovit.
Ultimul pas a fost logica jocului. Ideea de ansamblu a fost ca la detectarea de sunet sau la apasarea butonului pasarea sa sara. Si am facut asta. Problema a fost ca trebuia sa si cada. Aici devine putin tricky.. deoarece ajungi cu intrebarile :
Microfonul KY-038. Quite the deal. Pacat ca este foarte greu de initializat cum trebuie :(. De ce ? Este simplu.. are un potentiometru a carui piulita trebuie invartita pentru a creste/scade sensibilitatea acestuia. Cum interpretezi asta in cod? Nu asa de simplu. Trebuie sa te foloseste de un ADC (la mine pus pe A0, cu prescaler de 8 - mai mic mai accurate) care va primii Analog Output de la microfon.
20 - Liniste 100 - PM FAIR
In primul rand a fost un proiect care mi-a mancat nervii timp de o saptamana. TOTUSI ma simt mandru ca am reusit sa fac asa ceva. Este primul proiect pe care pot sa il arat oricui si nu doar sa inteleaga ci sa si fie putin uimit macar. De asemenea, este unul din proiectele din facultate care iti da un sens de implinire avand o dovada fizica cum ca ai reusit sa faci ceva.
Data | Activitatea |
---|---|
18.05.2019 | Am inceput si terminat de lipit toate componentele |
19.05.2019 | Am inceput sa lucrez la cod, in mare parte m-am jucat cu LCD-ul. |
20.05.2019 | Am creat prefabricatele pentru nivel si am incercat sa inteleg de ce nu pot sa ma folosesc de random(). |
21.05.2019 | Am realizat ca trebuie sa folosesc un timer intern pentru a genera nivele random si am terminat tot ce tine de partea de grafica si afisare. |
22.05.2019 | Am inceput sa lucrez la coliziuni. Speram sa termin in acceasi zi.. dar nu am avut atat noroc . |
23.05.2019 | Am terminat coliziunile. Am inceput sa inteleg cum functioneaza ADC-ul si microfonul. |
24.05.2019 | Am deslusit si microfonul si am terminat logica jocului. |