Pong Game

Autor: Raluca Elena Aldea
Grupa: 334CB

Introducere

Proiectul consta in realizarea jocului Pong pe un ecran LCD. Jocul consta in doua palete ce se misca sus-jos. Scopul jocului este de lovi mingea si a-l face pe oponent sa rateze.

Exista modul de joc player vs player. Fiecare jucator va avea un joystick prin care isi poate controla paleta. La atingerea paletei, mingea ricoseaza si isi schimba directia de mers.

Pe parcursul jocului, in fiecare runda, va aparea pe ecran o putere (care va mari lungimea paletei), iar jucatorul care a atins ultimul mingea este cel care o colecteaza. Efectul bonusului inceteaza la sfarsitul rundei.

Un player primeste un punct in momentul in care adversarul rateaza mingea. Atunci cand unul dintre jucatori acumuleaza 3 puncte, jocul se termina si se poate incepe o noua runda.

Am ales implementarea acestui joc pentru ca este probabil printre primele jocuri pe care l-am jucat in copilarie si s-a potrivit perfect cu dorinta mea de a lucra la un proiect ce implica un ecran LCD.

Descriere generală


Fiecare jucator va avea propriul modul joystick prin care controleaza paleta. Asadar, sistemul are ca input comenzile jucatorilor, iar efectele acestora se regasesc in output, adica prin afisarea jocului pe display-ul atasat. In plus, terminarea unei runde si a jocului sunt anuntate prin sunete emise de buzzer.

Hardware Design

Lista de piese:

  • Arduino Uno R3 ATmega328P
  • Ecran LCD 1.8” SPI (LCD TFT de 1,8 ”, cu rezolutia de 128 x 160 pixeli si 262k de culori)
  • Modul Buzzer pasiv
  • 2 Module Joystick PS2
  • Rezistente
  • Fire de legatura
  • Switch
  • Buton
  • Placa prototipare
  • Breadboard

Am inceput proiectul prin conectarea ecranului la placuta Arduino. Dupa ce am invatat sa lucrez cu el, am desenat paletele si mingea. Urmatorul pas a fost sa conectez joystick-urile si sa fac paletele sa se miste. Dupa ce am reusit sa fac jocul functional, am conectat butonul ce reseteaza runda de joc si buzzer-ul care face zgomot la fiecare “gol” dat de oricare dintre jucatori, iar la finalul rundei am implementat coloana sonora de la jocul Pac Man. Proiectul fiind pe final, am ales sa il conectez la baterii si un switch pentru a nu fi dependent de calculator.

Schema proiectului:

Schema detaliata a conexiunii ecranului (sursa: https://mschoeffler.com/2019/06/20/arduino-tutorial-making-the-kmr-1-8-spi-tft-display-work/):

Proiectul:

Schema electrica:

Software Design

Am realizat proiectul in Visual Studio Code, cu ajutorul extensiei Arduino.

Proiectul este structurat in 6 fisiere.

  • colors.h, ce contine codurile de culoare folosite pe parcursul proectului
  • constants.h, unde am definit diverse valori sau texte
  • song.h, ce contine codul sursa pentru coloana sonora a jocului Pac Man (sursa: https://github.com/robsoncouto/arduino-songs/blob/master/pacman/pacman.ino)
  • lcd.cpp, ce contine implementarea metodelor ce tin de ecran (desenarea paletelor, a mingii, a puterii si a marginii ecranului)
  • lcd.h, header-ul fisierului lcd.cpp; contine semnaturile functilor
  • main.ino, ce contine toata logica jocului

Pentru a porni jocul este nevoie de activarea switch-ului. Jocul incepe prin desenarea celor doua placute, a mingii, a puterii care apare random pe ecran si a marginii ecranului. Mingea merge spre paleta dreapta. In momentul in care puterea este colectata, paleta ultimului jucator care a atins mingea este marita cu 20 de pixeli. La acumularea unui punct, scorul este afisat peste marginea ecranului (stanga sus sau dreapta jos), sub forma unei mingi. La acumularea a 3 puncte, ecranul se actualizeaza cu textul “Left player won!” sau “Right player won”, iar pe fundal se aude melodia tematica de la jocul Pac Man. La finalul cantecului, se poate apasa butonul de reset si se porneste o noua runda.

Rezultate Obţinute

Am obtinut un joc functional, iar procesul de dezvoltare a fost foarte placut.

Concluzii

A fost un proiect foarte distractiv de realizat. Am invatat sa lucrez cu o placuta arduino, sa folosesc un letcon, sa fiu atenta la conectarea firelor si mi-am indeplinit dorinta de a lucra cu un ecran LCD. Consider ca a fost de o dificultate medie si a ajutat la consolidarea cunostintelor acumulate la laborator.

Cele mai mare dificultate a fost realizarea coliziunilor cu paleta.

Download

Arhiva codului sursa:

ponggame_aldearalucae.zip

Galerie imagini si scheme:

galerieimagini_scheme.zip

Jurnal

  • Alegerea proiectului si gandirea functionalitatilor
  • Realizare documentatie Milestone 1
  • Conectarea ecranului LCD si invatarea modului de functionare
  • Desenarea paletelor, a mingii si realizarea functionalitatii de miscare
  • Realizarea coliziunilor cu paletele
  • Desenarea marginii ecranului si realizarea coliziunii cu aceasta
  • Desenarea puterii si implementarea logicii de colectare
  • Conectarea buzzer-ului si implementarea functionalitatilor asociate
  • Implementarea logicii butonului de reset si a switch-ului legat la baterii
  • Lipirea componentelor
  • Realizare documentatie Milestone 2

Bibliografie/Resurse

pm/prj2022/ionuto/ponggame.txt · Last modified: 2022/05/16 14:18 by raluca_elena.aldea
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