Florin-Eugen IANCU (24967) - Flappy Bird Enhanced

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

  • Scopul proiectului este de a proiecta o solutie bazata pe gama AVR32 de la Atmel.
  • Se doreste implementarea unui joc de Flappy Bird, folosind un controller ATmega324, cu interfata grafica pe un ecran LCD.

Descriere generala

Flappy Bird este un joc single-player in care jucatorul foloseste un buton ca input. Elementul principal este o pasare care trebuie sa se deplaseze printre o serie de perechi de coloane, fiecare pereche formand o deschizatura prin care pasarea trebuie sa treaca. Daca pasarea se loveste de orice coloana, jocul se termina (sau jucatorul pierde o viata).

Acesta face parte din categoria jocurilor infinite, generate procedural: nu exista final; progresul este indicat doar de numarul maxim de perechi de coloane de care jucatorul a reusit sa treaca, plus scorul din eventuale bonusuri.

Pentru a aduce imbunatatiri jocului, acesta va beneficia de:

  • auto-save la un interval predeterminat (asemanator unui sistem de nivele);
  • bonusuri intre perechile de coloane, care ofera diverse facilitati (vieti in plus, munitie pentru distrugerea coloanelor, tunneling prin coloane, slow motion, distante orizontale mai mari intre coloane);
  • (optional) inaltimile perechilor de coloane generate pe baza informatiilor primite de la un senzor hardware (de orice fel).

Se va incerca dezvoltarea elementelor din jocul original, pentru a asigura o experienta cat mai putin repetitiva si cat mai distractiva.

Schema bloc

Hardware Design

Componente de baza (cumparate la comun)

Index Denumire Cod Farnell Cantitate Cod schema Descriere Observatii
1 Atmel ATMEGA324PA-PU 1715485 1 IC2 Controller Datasheet
2 Multicomp 2227-40-06-05 4285669 1 IC2 Soclu Datasheet
3 Multicomp 703-0100 2112111 2 LED, PWR LED rosu Datasheet
4 Alps SKHHAJA010 2056808 2 RESET, BTN Butoane Datasheet
5 Multicomp USB-B-S-RA 2112373 1 J2 Conector USB-B Datasheet
6 Raltron AS-16.000-18 1611761 1 Q1 Quartz Datasheet
7 Fairchild Semiconductor 1N5226B 1700785 2 D1, D2 Diode Zener Datasheet
8 Harwin M20-9980546 1022236 1 JP1 (2×3 pini) Header de pini Datasheet
9 Wurth Elektronik 61304011121 2356175
0104210000001587
Optimus (RO)
2 PORT{A,B,C,D}
(4×10 pini)
JP3 (1×3 pini)
Header de pini Datasheet
10 Multicomp MCF 0.25W 100R 9339043 2 R5, R6 Rezistente 100Ω Datasheet
11 Multicomp MCF 0.25W 470R 9339531 3 R9, R12, R13 Rezistente 470Ω Datasheet
12 Multicomp MCF 0.25W 1K5 9339183 1 R8 Rezistenta 1.5kΩ Datasheet
13 Multicomp MCF 0.25W 10K 9339060 1 R15 Rezistenta 10kΩ Datasheet
14 Vishay K104K15X7RF53H5 1141777 3 C6, C7, C8 Condensator 100nF Datasheet
15 Vishay K150J15C0GF53L2 1141759 2 C13, C15 Condensator 15 pF Datasheet
16 Amphenol FCI 68786-202 1654800 1 JP3 Jumper Datasheet

Componente principale

Index Denumire Cod Farnell Cantitate Cod schema Descriere Observatii
1 PM2016 1 Placuta proiect Cablaj
2 Kemo Electronic E012 2503759 1 Perfboard Datasheet
3 Philips PCD8544 1420491028
Laser Shop (EU)
(doar ilustrativ)
1 LCD
(pe perfboard)
LCD Nokia 5110 Datasheet
Pinout
4 Multicomp 11.99.8819 2444241 1 Cablu USB-A - USB-B Datasheet
5 Fire colorate mama-mama diverse
Optimus (RO)
~15 Panglica fire
(Jumper wire ribbon)
Datasheet

Componente extra

Index Denumire Cod Farnell Cantitate Cod schema Descriere Observatii
1 Fairchild Semiconductor LM7805CT 1102157 1 IC3 Regulator 5V Datasheet
2 Multicomp MJ-179PH 1737246 1 J3 Conector mufa adaptor Datasheet
3 Vishay K104K15X7RF53H5 1141777 1 C10 Condensator 100nF Datasheet
4 Multicomp MCGPR16V106M5X11 9451056 2 C5, C11 Condensator 10μF Datasheet
5 STMicroelectronics LE33CZ-TR 1703359 1 IC1 Regulator 3.3V Datasheet
6 TE Connectivity CFR25J1K0 2329626 1 R1 Rezistenta 1kΩ Datasheet
pt. LCD Nokia
7 Wurth Elektronik 61304011121 2356175
0104210000001587
Optimus (RO)
1 PORTSW (1×4 pini)
PBGND (2 pini)
suport LCD
(4×2 pini)
(pe perfboard)
Header de pini Datasheet
8 Alps SKHHAJA010 2056808 4 SW{1,2,3,4}
(pe perfboard)
Butoane Datasheet
9 FC-07 0104110000001313
Optimus (RO)
1 BUZZER
(pe perfboard)
Buzzer cu modul
10 Powerpax SW4305 1971788 1 Alimentator 1A Datasheet

Componente de uz general (existente sau cumparate la comun)

Descriere Fludor 0.5mm Sacaz Burete / rezerva Cleste sfic Penseta Perie antistatica Cleste universal
Cod Conex (RO) 9325 24261 15269 / 15270 14196 306 ERS-410990081 (TME) 10437
Descriere Statie cu pistol de lipit Suport de lipit Tresa 2mm / 0.5mm Pompa fludor Fire cupru Alcool izopropilic Cutter
Cod Conex (RO) 14189 13497 9384 / 9387 0986 13096 1421 8768

Schema electrica

Placa principala (PM2016)

LCD + perfboard

Conexiuni fire (orientativ)

Detalii importante

  • Placa de test (perfboard) folosita in acest proiect <fc #CC181E>are legaturi electrice pe una din directii</fc>, prin intermediul unor linii de strat metalic subtire; prin urmare, daca se doreste de exemplu lipirea unui header de pini, exista 2 variante: a) se lipesc pe directia cu legatura electrica, pe o linie, dar se foloseste o lama pentru a despica stratul metalic, sau b) se pune headerul perpendicular (fiecare pin vine pe cate o linie distincta)
  • Ecranul nu trebuie lipit sau conectat cu nimic altceva in afara de placa principala; pentru a-l tine totusi fixat, <fc #CC181E>am lipit 4 suporti de cate 2 pini pe perfboard</fc>, astfel incat ecranul sa poata fi fixat si detasat la 0, 90, 180 sau 270 de grade (vezi poze montaj mai jos)
  • A se ignora buzzer-ul de sine statator de pe perfboard; <fc #CC181E>nu este folosit</fc>.
  • Am intampinat (si eu si alti colegi) probleme la conectarea unui buton la PD2, in sensul ca butonul parea mereu apasat. <fc #CC181E>O mai buna alternativa ar fi conectarea butoanelor la pinii ramasi din PORTB.</fc>
  • <fc #CC181E>PORTC este de asemenea compatibil cu ecrane de Nokia 5110</fc>. Se poate conecta ecranul si acolo.

Rezultatul final hardware

Montaj fata Montaj spate

Software Design

Algoritmi si structuri de date

Programul beneficiaza de un software foarte simplu. La inceput se genereaza un numar fix de coloane (in virtutea faptului ca nimeni nu va putea trece de acel numar), apoi se porneste jocul. Exista o bucla exterioara care cicleaza jocul de la capat, cand acesta a fost pierdut, si una interioara, in care se avanseaza jocul in desfasurare. La fiecare iteratie se verifica existenta coliziunilor, si se misca entitatea jucatorului conform unui avant care scade odata cu timpul.

Utilitati si detalii de implementare

Utilitati minime

#define FPS         10                  // cadre pe secunda
#define SPEED       1                   // pixeli avans coloane per frame

#define MAX_COLS    (100 * 2)           // cate perechi de coloane
#define COL_W       4                   // grosimea preferata a coloanelor
#define COL_GAP_H   30                  // distanta pe Oy intre coloane
#define COL_GAP_W   16                  // distanta pe Ox intre coloane
#define COL_UPPER_L 5                   // limita minima de inaltime a col. sup.
#define COL_LOWER_L (LCD_Y_RES - 5)     // limita minima de inaltime a col. inf.

#define PADDING_I   45                  // limita initiala coloane
#define PADDING     20                  // limita stanga coloane
#define PLAYER_X    30                  // pozitie Ox jucator
#define PLAYER_Y_I  (LCD_Y_RES / 2)     // pozitie Oy jucator initiala
#define PLAYER_H    2                   // inaltime jucator
#define PLAYER_W    3                   // latime jucator

#define GRAVITY     1                   // forta gravitatie
#define PUNCH       4                   // forta avant

Tipuri de date

typedef struct {
    int width, height;
    int posx, posy;
} column_t;

Rezultate obtinute

  • Partea cea mai solicitanta a fost scrierea programului software.
  • Am obtinut o implementare simpla a jocului Flappy Bird.
  • Am fost nevoit sa renunt la mici aspecte ale proiectului din lipsa de timp.

Video

The Adobe Flash Plugin is needed to display this content.

Concluzii

  • Per total, a fost o experienta foarte, foarte utila pe mai departe. Necesitatea lucrului practic m-a motivat si m-a ajutat sa invat multe lucruri noi, devreme ce pentru realizarea proiectului a fost nevoie sa parcurg toate etapele de la cautarea componentelor pana la testarea de software.

Download

Arhiva contine urmatoarele:

  • biblioteca de LCD Nokia 3310/5110 (lcd.c, lcd.h, fonts.h)
  • aplicatia propriu-zisa (neterminata) (main.c, main.hex, Makefile)
  • readme cu descrierea implementarii
  • schema si cablajul in Eagle (poze si fisiere-sursa)
  • o arhiva cu biblioteci ce trebuie adaugate la Eagle (unele componente au fost folosite in schema de mai sus; este inclus si modulul Eagle pentru LCD Nokia 5110, facut de mine)
  • bootloader-ul folosit (disponibil si aici)

Parola are 4 cifre si este foarte simplu de dedus. :)

Bibliografie/Resurse

Resurse hardware

Resurse software

pm/prj2016/amusat/flappybird_1337.txt · Last modified: 2021/04/14 17:07 (external edit)
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