Pong Game

Introducere

Joc Pong pentru 2 jucatori. Jocul consta in doua “palete” aflate in stanga si respectiv in dreapta ecranului si o minge care va sari daca se loveste de “paleta”.

Scopul jocului e sa-ti aperi partea ta a ecranului si sa acumulezi mai multe puncte decat adversarul tau.

Jocul va fi acompaniat de muzica.

Am cautat mai multe variante de proiect si mi-a atras atentia acest joc, care mi-a trezit nostalgia asa ca am decis sa construiesc o mini consola cu un joc asemeni celor pe care le aveam in copilarie.

Consider ca e un joc distractiv si potrivit pentru a-ti petrece timpul cu un prieten.

Descriere generală

Schema bloc:

Hardware Design

Piese:

  • 4 butoane: pentru controlul “paletei”, 2 pentru fiecare jucator si un buton de start game.
  • ecran LCD 16×2: unde va fi afisat jocul
  • Arduino UNO (ATmega328P): placuta de baza pentru implementare
  • breadboard: pentru conectare intre componenete
  • buzzer: pentru acompanie muzicala
  • 5 rezistoare de 1k ohm
  • multe fire

Software Design

Biblioteci folosite:

  • LiquidCrystal.h
  • avr/interrupt.h

In implementare am folosit o clasa pentru datele paletelor si mai multe functii care determina fluxul jocului. Astfel avem urmatoarele functii:

Functii pentru dfeterminare pozitiei paletelor -

  • MovePaddleDown
  • MovePaddleUp
  • PrintPaddles

In care este implementata logica de pozitionare si miscare a paletelor.

Funtii de printare -

  • PrintBall
  • StartGamePrint
  • PrintScore
  • PrintWinner

Care contin metode de afisare a textului de start, scorului, invingatorului etc.

Functii care determina pozitia mingei -

  • void GenerateBallArray()
  • PrintBall
  • UpdateBall
  • AwardAPoint

In care a fost implementata majoritatea funtionalaitatii jocului si anume a miscarii mingii, sunt tratate mai multe cazuri cand se loveste de pereti sau de palete si cum isi schimba traiectoria. Se ia in considerare si in ce parte a paletei se va lovi mingea si astfel aceasta se va misca deferit.

In partea de setup este setat ecranul si este afisat textul initial si apoi jocul in sine cu palete pe pozitii initiale, sunt setatii pinii pentrubutoane si intreruperile.

Au fost implementate 2 intreuperi ca sa permita jocul concomitent a doi jucatori si miscarea concomitenta a paletelor.

Aditional a fost adaugate sunete atunci cand mingea se loveste de paleta sau perete si muzica atunci cand un jucator marcheaza sau castiga jocul.

Rezultate Obţinute

Concluzii

Proiectul s-a dovedit a fi putin mai greu decat am expectat dar a fost mai interesant de al dezvolta. Am invatat sa scriu cod pentru arduino mai complex si sa pot afisa pe un ecran extern. Partea de intreruperi am inteloso mai greu insa dupa inspectarea internetului au fost implementate in cateva randuri.

O probleama este implementarea fizica si anume a ecranului, initial a fost dezvoltata pe tinkercad insa diferite ecrane de la diferiti producatori au biblioteci proprii si ar fi nevoie de rescriere de cod dar totusi e asemanator cu cel de pe tinkercad insa trebuie sa fim atentie cu conectarea acestuia la arduino. Partea de buzzer era cea mai usor fiindca am implementato anterior la alte materii.

In general a fost satisfacator sa vezi rezultatul final, am primit aproape o cosnola de care aveam cand eram mic si acest proiect mi-a trezit mai mult interesul fata de dezvoltari pe placute.

Multumesc de atentie!

Download

Codul sursa: pong_game_code.zip

Jurnal

21.04.2022: Am adăugat tema proiectului, componentele si schema bloc.

27.05.2022: Am adaugat milestone 2, parte de schema electrica, sectiunea de software conlcuzii si biografie.

01.06.2022: Am adaugat poze, demo si cod pentru implementarea fizica a proiectului.

Bibliografie/Resurse

pm/prj2022/imacovei/pong_game.txt · Last modified: 2022/06/01 18:29 by stanislav.onea
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