Introducere

Jocul Pong a fost unul dintre primele jocuri video create, si reprezinta o forma primitiva, 2-dimensionala de tenis. Jocul a ajuns foarte repede la un nivel incredibil de popularitate, fiind jucat de numeroase persoane si in ziua de azi.

ponggame_big.jpg

Descriere generala

Jocul va fi realizat pe un microprocesor ATmega 16, si va fi afisat pe un ecran LCD de Nokia 3310. Aplicatia reprezinta un joc Pong multiplayer. Astfel, vor exista doi jucatori care se vor infrunta. Pentru control se folosesc cinci butoane:

- buton mutare in sus Jucator1,

- buton mutare in jos Jucator1,

- buton mutare in sus Jucator2,

- buton mutare in jos Jucator2,

- buton Reset: cand acest buton este apasat, paletele celor doi jucatori sunt puse in pozitiile lor initiale, iar scorul este resetat.

Hardware Design

Dupa cum am spus in capitolul de Descriere Generala a proiectului, jocul va fi afisat pe un ecran LCD de Nokia 3310. Acesta va fi conectat printr-o extensie la microcontroller-ul Atmega16. Pentru a respecta specificatiile conform carora ecranul LCD trebuie alimentat la o tensiune de maxim 3.3V, am folosit un divizor de tensiune. In acest sens, placuta de extensie va contine 12 rezistente (6 de 3.3k si 6 de 1.8k), si 2 condensatoare (unul de 10uF si unul de 100 uF). Pe langa divizorul de tensiune, pe placuta de extensie se vor afla si cele 5 butoane.

Schema cu modulele proiectului:

id0jpp105957-02.jpg

Sursa de tensiune:

zs4rxs749465-02.jpg

Microcontroller-ul Atmega16:

Butoanele:

vhu.yt823301-02.jpg

Software Design

Functiile folosite pentru comunicarea cu LCD-ul sunt scrise mai jos:

void LcdInit       ( void );
void LcdClear      ( void );
void LcdUpdate     ( void );
void LcdImage      ( const byte *imageData );
void LcdContrast   ( byte contrast);
byte LcdGotoXYFont ( byte x, byte y );
byte LcdChr        ( LcdFontSize size, byte ch );
byte LcdStr        ( LcdFontSize size, byte dataArray[] );
byte LcdFStr       ( LcdFontSize size, const byte *dataPtr );
byte LcdPixel      ( byte x, byte y, LcdPixelMode mode );
byte LcdLine       ( byte x1, byte x2, byte y1, byte y2, LcdPixelMode mode );
byte LcdRect       ( byte x1, byte x2, byte y1, byte y2, LcdPixelMode mode );
byte LcdSingleBar  ( byte baseX, byte baseY, byte height, byte width, LcdPixelMode mode );
byte LcdBars       ( byte data[], byte numbBars, byte width, byte multiplier );

Detalii de implementare:

Fiecare dintre cei doi jucatori dispune de o racheta, cu care trebuie sa loveasca mingea. Pentru a permite o vizualizare buna a elementelor grafice, fiecare patrat din scena jocului va fi compus din 3×3 pixeli.

Structurile folosite pentru a retine rachetele (structura bara):

typedef struct {
	int8_t pos_x;	//coloana
	int8_t pos_y;	//linia
} patrat;

typedef struct {
	patrat sq[NO_BLOCKS];
} bara;

Initializarea pozitiilor celor doua rachete si a mingii se realizeaza prin apelarea functiei initGame();

Un joc va rula pana va fi apasat butonul de Reset.

Rezultate obtinute

Poze cu proiectul rezultat:

eo4fep723862-02.jpg

nrwmyw375019-02.jpg

Concluzii

Partea software a proiectului a fost usor de implementat, avand in vedere faptul ca in precedentii 2 ani si jumatate ai facultatii am mai programat mult in limbajul C. Lucrul cel mai interesant si provocator in realizarea proiectului a fost construirea placutei, proiectarea si lipirea placutei de extensie. Aceste lucruri au fost o noutate pentru mine, si consider ca notiunile deprinse in timpul dezvoltarii proicetului imi vor fi folositoare mai tarziu.

Download

Implementarea jocului : pong.zip

Resurse

Datasheet LCD Nokia 3310: http://www.myplace.nu/mp3/files/pcd8544.pdf

Model de LCD pentru Proteus : http://www.8501projects.net/downloads217.html

pm/prj2011/ascurei/pong.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