Table of Contents

Victor-Laurențiu MUNTEANU (78713) - The World's Hardest Game

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Jocul presupune controlarea, cu ajutorul accelerometrului, catre zona verde a unei buline ce este afisata pe LCD.

Scopul jocului este sa ajungi la finish-ul de la ultimul nivel murind de cat mai putine ori.

M-am gandit .. cat de greu poate fi sa implementezi The World's Hardest Game pe LCD ^_^

E util pentru ca e distractiv si interesant.

Descriere generală

Bila/Patratul, controlat de Player, trebuia sa ajunga in zona verde (iesirea). Dar, in drum pot exista mai multe obstacle: bile/patrate care se misca si pe care, daca le atingi, mori si esti respawnat la inceputul nivelului, sau diverse obiecte statice.

Schema bloc

Hardware Design

Lista piese suplimentare:

Scheme electrice:

Software Design

ReadMe

Mediu de dezvoltare:

dar pentru scrierea codului am folosit Visual Studio 2017 + GitHub(in caz ca nu-mi mai mergea ceva sa dau repede Revert).

Librării şi surse 3rd-party:

Am combinat ce am gasit pe GitHub + ce am gasit in proiectele din anii trecuti si am obtinut:

Spre exemplu: in lcd.c am modificat afisarea caracterului astfel incat sa-mi scrie pe orizontala (Am aplicat formula de rotire a imaginii)

Algoritmi

Mi-am creat 2 vectori:

  1. de structuri ce retin parametrii unui nivel precum:
    • matrice de block-uri, unde fiecare element reprezinta culoarea unui block.
    • inaltimea si lungimea tileMap-ului precum si dimensiunea unui block (tile)
    • pozitia si dimensiunea start-ului si a finish-ului
    • mesajele de la inceputul fiecarui nivel
  2. de functii care folosesc aceste structuri
    • afiseaza tileMap-ul respectiv
    • initializeaza player-ul, si alte obiecte din joc,
    • citeste datele de la accelerometru
    • muta player-ul, verifica coliziunile si updateaza toate obiectele dinamice din scena

Toate aceste caracteristici pot fi variate. De aceea veti vedea ca fiecare nivel difera de cel precedent.

In aceste functii am loop-ul fiecarui nivel si pot decide cati si ce fel de inamici o sa am, comportamentul acestora ( sa mearga in linie, in cerc, sa se plimbe de la un punct la altul etc. ), forma player-ului, viteza sa, dimensiunea etc.

Deoarece matricile sunt destul de mari, le-am pus in memoria read-only a programului, deoarece nu am nevoie decat sa le accesez, nu sa le si modific.

Surse şi funcţii implementate

Definitie tileMap: matrice de 0 si 1 ( 0 = gol si 1 = block/tile) in care fiecare tile are o anumita lungime Detectarea coliziunilor

Pentru coliziunea dintre dreptunghi si tileMap m-am uitat intre ce indexi se incadreaza player-ul si daca la acei indexi se afla un block ⇒ coliziune. Spre exemplu: player-ul (dreptunghi) e intre (45, 45) si (55, 55) iar tileSize-ul = 20 ⇒ verific doar perechile (2, 2), (2, 3), (3, 2) si (3, 3). E muuult mai eficient asa decat sa verific coliziunea player-ului cu cele 11 * 16 patrate din matrice.

Rezultate Obţinute

Un joc amuzant si greu de batut.

Watch Beginner's version:

A little harder level: (note: I played bad intentionally)

Concluzii

A fost greu … mai ales partea cu hardware-ul. Gaseam pe net 10 moduri in care sa-mi conectez accelerometrul + libraria pe care sa o downloadez ca sa-mi mearga si niciuna nu mergea. Si debugging-ul, la fel. Dupa ce am facut sa-mi mearga accelerometrul, nu-mi dadeam seama ce date primesc de la el (in ce interval) plus ca mi se bloca intr-una jocul si nu intelegeam de ce.

All in all … a fost greu, dar s-a meritat. Am cu ce ma lauda la cei 2 prieteni.

Download

theworldshardestgame2.zip

Jurnal

Luni 14 Mai - cumparat toate piesele

Vineri 18 Mai - terminat in sfarsit tema la SO (si pe Windows)

Sambata 20 Mai - 7 ore de lipit si conectat piesele

Luni 22 Mai - mi-am facut lcd-u sa afiseze ce vreau

Marti 23 Mai - mi-am facut si accelerometrul sa-mi dea valori corecte

23-25 Mai - codat la greu, modularizat cod, facut 3 nivele usoare si 1 hardcore

25 Mai - PM Fair

componente_victor.jpg

componente_asamblate_victor.jpg

Initial player-ul era o pensula pe ecran

Dar dupa ce sterg mereu vechea sa pozitie … It becomes an eraser

Dupa transportul proiectului de la PM Fair inapoi acasa am realizat ca am cam stricat LCD-u …

Bibliografie/Resurse

  1. libraria: am folosit libraria gasita la un student din anii trecuti la care doar am schimbat orientarea scrisului (din vertical in orizontal): http://cs.curs.pub.ro/wiki/pm/prj2016/ddragomir/igorparvan?s[]=igor

Documentatia