Denis-George MARCU (67180) - Car race

Introducere

Proiectul pe care l-am ales consta in implementarea unui joc de pe un brick game, si anume un joc cu masini (car race), pe un LCD. Scena jocului este alcatuita din mai multe benzi de mers, pe care circula masini in acelasi sens cu masina playerului. Scopul jocului este de a depasi aceste masini. Cu fiecare masina depasita, playerul va acumula puncte, iar in urma unei coliziuni, acesta va pierde o viata din cele 3 disponibile. Pentru sunetele specifice jocului vom folosi un buzzer.

Descriere generală

Schema bloc

Jocul va avea doua nivele de dificultate care pot fi alese la inceput de catre utilizator:

  • nivelul mai usor: circuitul este format din doua benzi de mers, iar masinile inamice vin la distante mai mari
  • nivelul mai greu: circuitul este format din trei benzi, iar masinile vin una in urma celeilalte, pastrand totusi un culoar pentru masina playerului

Masina playerului este controlata cu ajutorul butoanelor (stanga/dreapta). De asemenea, la fiecare apasare de buton va exista un sunet specific.

Distantele dintre masini si viteza acestora se vor micsora, respectiv mari, o data cu avansarea in joc. Exista si un buton de accelerare, care mareste viteza de deplasare a playerului atunci cand este apasat si readuce masina playerului la viteza normala atunci cand este lasat liber.

La finalul jocului, va exista posibilitatea unui replay, folosind un buton.

Hardware Design

Lista piese

  • Placa de baza
  • Componente de baza
  • Modul LCD cu Controller PCD8544 (compatibil cu Nokia 5110)
  • 2 butoane (pentru controlul masinii)
  • 1 buton pentru accelerarea masinii sau reset joc
  • 2 seturi de fire (mama-mama)
  • 1 set de fire (tata-tata)
  • Placa de test
  • Buzzer pasiv 5V
  • Condensator 10uF

Schema electrica

Software Design

Mediu de dezvoltare

  • Programmers Notepad [WinAvr]
  • BootloaderHID

Biblioteci

  • avr/io.h
  • avr/interrupt.h
  • util/delay.h
  • avr/pgmspace.h
  • stdio.h
  • lcd.h 37

Descriere implementare

  • Initial vom aveam un cadru de introducere cu text (materie, nume, grupa) si o bara de loading. Pentru a desena acestea am folosit functiile din biblioteca lcd-ului, avem functie pentru scrierea unui string si functie pentru setarea unui pixel. Bara de loading am realizat-o colorand treptat pixelii a 3 linii de la baza ecranului (o bara de loading mai ingrosata), avand pauze intre iteratii cu ajutorul unui delay.
  • Al doilea cadru este o animatie pentru joc: se vor deplasa de sus spre centrul ecranului o masina, urmata de cuvintele “RACE” si “CAR”. Pentru a desena o masina mi-am definit o matrice de 0 si 1, in care realizez silueta acesteia folosind 1. Astfel, am realizat o functie care seteaza pixelul atunci cand in matricea respectiva este 1. Asemenea si pentru literele din cuvintele “CAR” si “RACE”, avem definite matrici pentru a afisa litere mari si ingrosate. Dupa ce s-a terminat animatia, se va astepta pentru butonul ok.
  • Urmatorul cadru este cel de selectare a nivelului dorit. Avem nivelele 1 sau 2, iar selectarea se face folosind butoanele stanga/dreapta. Pe ecran, nivelul selectat apare intr-un box. Acesta l-am desenat folosind functia de setarea a pixelilor si o matrice ce descrie conturul unui box. Apasam butonul ok pentru a continua jocul.
  • Nivelul 1: Vom avea un cadru de introducere in nivel cu textul “Livel 1” si animatia pentru bara de loading, apoi va incepe jocul efectiv. Scena jocului este formata din doua benzi. Masina playerului este mereu la baza ecranului, initial pe banda din stanga. Pentru a muta masina de pe o banda, vom folosi butoanele stanga/dreapta, iar la o mutare efectiva, buzzerul va reda un sunet semnaland schimbarea de banda. Masinile inamice vor fi pozitionate random pe una din benzi, avand distanta dintre ele de o masina, pentru a avea loc masina player-ului intre ele. Pentru simularea miscarii, practic deplasam scena spre masina player-ului si adaugam alte masini in partea de sus atunci cand distanta ne permite acest lucru.
  • Nivelul 2: Avem un cadru de introducere in nivel cu textul “Livel 2” si animatia pentru bara de loading, apoi va incepe jocul. Scena este formata din trei benzi. Masina playerului se afla la baza ecranului, initial pe banda din centru. Ea se poate misca doar pe orizontala. Pentru a muta masina de pe o banda, vom folosi butoanele stanga/dreapta, iar o deplasare va fi semnalata cu ajutorului buzzer-ului. Masinile inamice vor fi pozitionate random pe una din benzi, avand grija ca adaugarea unei noi masini sa nu formeze o diagonala, blocand culoarul masinii player. Masinile inamice sunt adaugate una dupa alta, neexistand distanta prea mare intre ele, de aceea la adaugare trebuie avut grija ca masina player sa aiba mereu culoar. Deplasarea masinii player inainte se face prin deplasarea scenei catre acesta: afisam scena, avem un delay, apoi stergem scena si o deplasam cu doi pixeli, urmand sa repetam procedeul.
  • Player-ul are 3 vieti. La pierderea unei vieti, avem un nou cadru prin care se informeaza player-ul de numarul de vieti ramase si se reincepe jocul. La pierderea celor 3 vieti, jocul se termina. Se va afisa mesajul “GAME OVER” si scorul adunat de player. Va exista acum posibilitatea unui reset, ce are ca efect revenirea la cadrul de selectare a nivelului.

Rezultate Obţinute

Demo proiect watch

Cadrele de inceput ale jocului

Selectarea nivelului

Nivelele 1 si 2

Concluzii

Proiectul a fost foarte interesant, as putea spune chiar o provocare, din care am invatat multe lucruri, cum ar fi lipirea componentelor, folosirea unui datasheet, programarea unui microcontroler si utilizarea unei biblioteci lcd pentru afisarea unor imagini/figuri pe acesta.

Download

Jurnal - Etapele realizarii proiectului

  • Saptamana 8: Am ales tema proiectului
  • Saptamana 9: Descrierea in mare a proiectului si schema bloc a acestuia
  • Saptamana 10: Cumpararea pieselor pentru placuta de baza si lipirea acestora
  • Saptamana 11: Schema electrica a proiectului
  • Saptamana 12: Achizitionarea pieselor necesare proiectului si realizarea hardware-ului
  • Saptamana 13-14: Implementarea software-ul

Bibliografie/Resurse

Resurse Hardware

Resurse Software

  • Biblioteca LCD 37
  • Utilizare buzzer lab0

Documentația în format PDF

pm/prj2017/avoinescu/marcu.denis.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