This shows you the differences between two versions of the page.
pm:prj2024:rpascale:darius.calota [2024/05/15 03:26] darius.calota [Hardware Design] |
pm:prj2024:rpascale:darius.calota [2024/05/21 23:33] (current) darius.calota [Software Design] |
||
---|---|---|---|
Line 60: | Line 60: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Mediu de Dezvoltare: | ||
+ | Codul aplicației este dezvoltat folosind Arduino IDE. | ||
+ | |||
+ | Librării și Surse 3rd-Party: | ||
+ | Codul utilizează biblioteca standard LiquidCrystal.h, care facilitează interacțiunea cu afișajele LCD bazate pe controlere HD44780. Aceasta permite controlul ecranului pentru a afișa caractere și grafică personalizată. | ||
+ | |||
+ | Algoritmi și Structuri Implementate: | ||
+ | Aplicația implementează un joc simplu de tip runner, unde jucătorul controlează un erou ce se deplasează printr-un teren care se derulează continuu de la dreapta la stânga. Principalele componente ale algoritmului includ: | ||
+ | * Inițializarea Graficii: Funcția initializeGraphics() definește și încarcă caractere personalizate pentru afișajul LCD, utilizând funcția lcd.createChar() pentru a crea sprite-uri pentru erou și teren. | ||
+ | * Avansarea Terenului: Funcția advanceTerrain() deplasează terenul cu o unitate spre stânga, ajustând caracterele pentru a simula mișcarea continuă a terenului. | ||
+ | * Desenarea Eroului: Funcția drawHero() gestionează afișarea eroului în diferite poziții (alergare, săritură) și detectează coliziunile cu terenul. | ||
+ | * Gestionarea Interacțiunilor: Funcția buttonPush() tratează apăsările de buton folosind întreruperi hardware pentru a declanșa salturi ale eroului. În funcția loop(), starea jocului este actualizată continuu, avansând terenul, schimbând poziția eroului și verificând coliziunile. Jocul reîncepe atunci când este detectată o coliziune. | ||
+ | * Controlul Jocului: Folosind variabile statice pentru a menține starea jocului între iterațiile buclei principale, jocul este controlat printr-o serie de stări și tranziții care determină acțiunile eroului și actualizarea ecranului. | ||
+ | |||
+ | Surse și Funcții Implementate: | ||
+ | * initializeGraphics(): Definește caracterele personalizate pentru erou și teren și inițializează matricele de teren. | ||
+ | * advanceTerrain(char terrain, byte newTerrain) : Actualizează matricele de teren prin deplasarea conținutului spre stânga și adăugarea de noi elemente la capătul din dreapta. | ||
+ | * drawHero(byte position, char terrainUpper, char terrainLower, unsigned int score): Desenează eroul în poziția sa actuală și verifică coliziunile cu terenul. Afișează și scorul curent pe ecranul LCD. | ||
+ | * buttonPush(): Setează un flag atunci când butonul este apăsat, utilizat pentru a declanșa saltul eroului. | ||
+ | * setup(): Configurarea inițială a pinilor, afișajului LCD și întreruperilor hardware. | ||
+ | * loop(): Buclează continuu pentru a actualiza starea jocului, incluzând avansarea terenului, gestionarea poziției eroului și verificarea coliziunilor. De asemenea, gestionează starea de așteptare înainte de începerea unui nou joc. | ||
+ | |||
- | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | ||
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | ||
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | ||
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | ||
- | * (etapa 3) surse şi funcţii implementate | ||
- | </note> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== |