Table of Contents

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 8-o. 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.8-)

Schema bloc

Hardware Design

Lista piese:

  • Arduino Uno
  • Breadboard 400
  • Display LCD 12864B V2.0, 128×64 dots
  • 2 x Joystick PS2 HW-504
  • Difuzor 1W/8ohm/50mm
  • Led RGB
  • Fire de legatură
  • Potențiometru
  • Rezistențe
  • Led albastru
  • Led verde

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:

  • Pini utilizati:

  • Structuri folosite:

In jocul Snake, serpii sunt reprezentati de structuri de tipul:

  • Functii implementate:
    1. 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
    2. 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
    3. 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

  • Am invatat sa folosesc pistolul de lipit cu fludor.
  • Costurile pentru dezvoltarea proiectului au fost accesibile.
  • A fost interesant sa creez un proiect pornind de la 0, sa invat lucruri noi, sa documentez fiecare pas si apoi sa vad rezultatul final.

Download

Arhiva contine codul sursa, bibliotecile folosite, schema electrica finala, schema display-ului, schema joystick-ului, README si prezentarea jocurilor.

1v1gameconsolearchive.zip

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 -

  • Am terminat designul proiectului 8-O
  • Am stabilizat joystickurile si displayul cu suruburi
  • Am reparat cateva mici bug-uri FIXME
  • Am finalizat proiectul! ^_^

Bibliografie/Resurse

Export to PDF