Alexandru ELISEI (66946) - Pong

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere


Voi implementa jocul Pong cu doi jucători și single player.

Jocul Pong este un joc 2D care simulează un joc de tenis de masă. Se joacă cu doi jucători și fiecare jucător are la dispoziție o paletă cu care încearcă să lovească o minge ce ricoșeaza de la un jucător la altul. Jucătorul ce nu reușește să lovească mingea și ea trece de paleta lui a pierdut.

În modul single player va exista doar o paletă și mingea va ricoșa de partea opusă a ecranului.

Jocul Pong este unul dintre primele jocuri pe calculator (creat în 1972) și mi s-a părut un proiect interesant.

Descriere generală


Voi folosi un display de Nokia 3310/5110 pentru a afisa jocul si mai multe butoane pentru a controla paletele si meniul jocului. Voi scrie eu biblioteca pentru controlul display-ului folosind datasheet-ul.

Hardware Design


La realizarea proiectului voi folosi următoarele piese (pe lângă piesele de bază pentru plăcuță):

Cod Denumire Cantitate
LP2950CZ-3.3G Regulator tensiune 3.3V, LDO 1
MCGPR35V106M5X11 Condensator electrolitic 10uF 1
CFR16J1K0 Rezistenta 1KO, 0.25W 1
PCD8544 Display Nokia 5110/3310 1
Momentary switches (butoane) 6
Placa de test 1
Jumper wire mama-tata 20
Cablu USB A/B 1

Plăcuța va fi alimentată la 3.3V.

Schema electrică este următoarea:

Software Design

Am extins proiectul inițial cu un buzzer care cânta melodia din Mario și cu o fotorezistență care detectează mișcarea mâinii pentru a opri sau porni muzica.

Pentru realizarea proiectului am folosit avr-gcc, bootloaderHID și vim.

Jocul poate fi jucat în modul single player sau multiplayer. Aceasta opțiune poate fi aleasă din meniul principal. Jocul se termină când unul dintre jucători atinge scorul 3.

Programul principal este un automat finit care păstreaza starea jocului: single player, multiplayer sau meniu. In funcție de stare butoanele de control fac lucruri diferite:

  • în meniu, butoanele sus și jos ale jucătorului 1 mută cursorul. Butoanele SELECT și BACK activează opțiunea curentă sau ies din meniu.
  • în modul single player sunt active butoanele sus și jos ale jucătorului 1 și butonul BACK care deschide meniul.
  • în modul multiplayer sunt active butoanele sus și jos ale ambilor jucștori și butonul BACK.

Pentru a controla display-ul de Nokia 3310/5110 (controller PCD8544) am implementat propria bibliotecă în fișierele PCD8544.h și PCD8544.c folosind datasheet-ul. Pentru a comunica cu display-ul folosesc SPI. De asemenea am creat propriul meu font în fișierul charmap.h.

Redarea muzicii din Mario este implementată în fișierele music.h și music.c. Am folosit două timere: unul creeaza semnal PWM pe pinul PB4 cu duty cycle 50% și frecvența variabilă în funcție de frecvența notei care este redată și care controlează buzzer-ul. Al doilea timer modifică frecvența semnalului PWM la terminarea redării notei curente. Acest timer folosește întreruperi pentru a seta frecvența semnalului PWM.

Muzica se oprește din redat atunci când se face cu mâna deasupra unui fotorezistor. Pentru a detecta mișcarea mâinii am folosit o fotorezistență în serie cu o rezistență legată la GND pentru a realiza un divizor rezistiv. La lumina fotorezistența are a o valoare mică și pinul de ADC va măsura o tensiune apropiată de cea de referință. La întuneric fotorezistența va avea o valoare mare și tensiunea măsurată de ADC va fi mai mică. Detectarea mișcării mâinii se face în doi pași: mai întâi se detectează mâna deasupra fotorezistenței (tensiune mică), apoi se așteaptă să se ridice mâna (tensiune mare). Am folosit acest sistem pentru a preveni situații în care se ține mâna deasupra fotorezistenței și melodia se oprește apoi se pornește în mod repetat.

Pentru debugging am folosit un convertor de la UART la USB ce folosește IC-ul PL2303.

Rezultate Obţinute

Am terminat proiectul și am făcut jocul Pong cu doi sau un jucător.

Imagini:

 Meniu

 Single Player

 Multiplayer

Concluzii

E foarte interesant să lucrezi cu hardware-ul.

E foarte multă bătaie de cap să creezi un joc deoarece toate jocurile funcționeaza ca automate finite.

E mai greu să faci debugging la hardware decât la software.

Download

Codul sursă: Pong

Bibliografie/Resurse


Resurse Hardware

PCD8544 datasheet

ATmega324PA datasheet

  • Documentația în format PDF
pm/prj2017/aaldescu/elisei.alexandru.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