This is an old revision of the document!
1v1 Game Console
Autor: Proca Andreea-Dana - 332CC
Introducere
Consola portabilă cu jocuri 1v1 oferă o experiență de joc captivantă pentru doi jucători, încurajând competiția și distracția într-un format portabil. Aceasta permite jucătorilor să se bucure de jocuri împreună într-o manieră interactivă. Prin intermediul
unui joystick, fiecare jucător poate controla mișcările personajului în joc, iar ecranul LCD afișează meniurile și grafica jocurilor într-un mod clar și captivant. De asemenea, prin intermediul unui difuzor integrat, consola redă muzică pentru o experiență audio completă.
Am dorit să dezvolt o consolă portabilă cu jocuri 1v1 pentru a oferi o experiență de joc captivantă și interactivă pentru doi jucători.
Descriere generală
Jucătorul poate controla mișcările folosind un joystick, iar meniul si jocurile vor fi afișate pe un ecran LCD, muzica va fi redata de un difuzor. Când unul dintre jucători câștiga un punct, ledul RGB se aprinde pentru câteva secunde in culoarea corespunzatoare acelui jucator. La final, ledul RGB se aprinde intermitent schimbându-și culoarea, iar pe ecaran vor fi afisate scorul si catigatorul. Jocurile disponibile pe consola sunt Snake 1v1 si Whack-a-mole.
♦
Snake 1v1 : fiecare jucator controleaza un sarpe care isi mareste lungimea odata cu trecerea timpului. Daca unul dintre serpi se intersecteaza cu celalalt, loveste un perete sau pe el insusi pierde

. Scopul este de a ramane cat mai mult timp in viata
♦ Whack-a-mole : pe ecran vor fi afisate mai multe causte din care vor iesi aleator cartite. Jucatorii trebuie sa le loveasca
selectand casuta, astfel catigand un punct. Daca ambii lovesc aceeasi cartita, punctul va fi castigat de primul care a lovit-o.
Castiga cel care are cele mai multe puncte.
Schema bloc
Hardware Design
Scheme electrice
♦ ATmega328P
♦ Joystick PS2
♦ Led RGB
Schema electrica finala
Implementarea hardware
Software Design
Mediu de dezvoltare: Arduino IDE
Biblioteci şi surse 3rd-party:
“Wire.h” pentru comunicarea I2C
“U8glib.h” pentru controlul ecranului LCD
“Bounce2.h” pentru gestionarea debouncing-ului butoanelor
“TimerOne.h” pentru gestionarea unui timer
-
Implementare software:
In jocul Snake, serpii sunt reprezentati de structuri de tipul:
Functii implementate:
Generale:
void setup()
void loop()
void playMusic() → porneste muzica folosind note muzicale si duratele lor declarate intr-un vector de tip int
void readCoords() → citeste coordonatele jucatorilor transmise de joystickuri si le scaleaza la dimensiunea displayului
void setColor(int redValue, int greenValue, int blueValue) → seteaza culoarea ledului RGB setand valori pentru cele 3 culori RGB
void setRGBoff() → opreste ledul RGB
void displayMenu(int player1X, int player1Y, int player1Score, int player2Score) → afiseaza fereastra de meniu de unde jucatorii pot alege jocul
Whack-a-Mole:
void initializeMoleGrid()
void spawnMole() → adauga cartite noi in casute alese random
void updateMoles() → sterge cartitele au stat prea mult in joc sau care au fost prinse
void drawGrid() → afiseaza tabla de joc de 2×4 formata din patrate
void drawMoles() → afiseaza “cartitele” reprezentate de patrate verificand inainte daca casuta trebuie sa fie ocupata
void runWhackAMoleGame()
void loadWhackAMole(int player1X, int player1Y, int player2X, int player2Y) → afiseaza fereastra de incarcare a jocului
void playWhackAMole(int player1X, int player1Y, int player2X, int player2Y)
void endGame() → fereastra finala a jocului; aprinde ledul RGB intermitent in diferite culori, alege catigatorul in functie de punctaj, afiseaza pe ecran punctajele jucatorilor si cine a castigat
Snake:
void initializeSnakes()
void drawSnakes()
void updateSnake(struct Snake& snake, byte x, byte y)
bool checkCollision(const Snake& snake1, const Snake& snake2) → verifica daca cei doi serpi s-au intersectat
bool checkWallCollision(Snake& snake) → verifica daca unul dintre serpi s-a lovit de unul dintre pereti
bool checkSelfCollision(const Snake& snake) → verifica daca unul dintre serpi s-a intersectat cu el insusi
void runSnakeGame()
void loadSnake(int player1X, int player1Y, int player2X, int player2Y) → afiseaza fereastra de incarcare a jocului
void playSnake(int player1X, int player1Y, int player2X, int player2Y)
void endSnakeGame() → fereastra finala a jocului; aprinde ledul RGB intermitent in diferite culori, afiseaza pe ecran cine a castigat
Design
Rezultate Obţinute
Concluzii
Download
Jurnal
27.04 - Alegere temei de proiect
29.04 - Achiziţionarea pieselor
05.05 - Crearea paginii Wiki
11.05 - Lipire pini display LCD și difuzor
13.05 - Am facut schema electrica a proiectului folosind Eagle
15.05 - Am facut si testat partea hardware a proiectului
18.05 - Am inceput sa lucrez la partea software
19.05 - Am reusit sa adaug muzica de fundal folosind un timer
21.05 - Am terminat de implementat jocul Whack-a-Mole
22.05 - Am facut LED-ul RGB sa lumineze intermitent la finalul jocului
25.05 - Am terminat de implementat jocul Snake 1v1
27.05 - Am inceput sa lucrez la design-ul proiectului
28.05 - Am adaugat un led verde si unul albastru care semnalizeaza culoarea fiecarui jucator
29.05 -
Bibliografie/Resurse