BattleShip
Introducere
Proiectul consta intr-un joc minimal de Battleship cu 2 jucatori (umani), realizat folosind minimul de piese necesar(doua joysitck-uri, doua ecrane, si un buzzer).
 
Descriere generală
Playerii primesc o aranjare random a pieselor pe care o pot vedea pe propriul ecran. 
Turn-ul player-ului este semnalat de un led care face switch rapid on/off pe ecran ce reprezinta cursorul lui. Cursorul poate fi mutat prin joystick si prin apasarea acestuia se selecteaza tinta.
In functie daca a lovit barca jucatorului sau nu, led-ul tintit isi va schimba culoarea in mod specific.
Apoi vine turn-ul player-ului 2, si ciclul se va repeta pana ce unul din playeri a doborat toate piesele inamicului.
Buzzer-ul va semnala prin diferite sunete: tinta lovita, ratarea si finalul de joc (specific pentru fiecare player).
 
 
Hardware Design
Lista Piese:
Schema Electrica
Software Design
Mediu de dezoltare
Librarii si surse 3rd-party
Descrierea codului
Initializari
Folosesc o serie de variabile globale ce vor fi initializate in setup si folosite mai tarziu in joc:
Pinii folositi pentru componente:
-  SW_pin_joystick0 
-  X_pin_joystick0 
-  Y_pin_joystick0 
-  SW_pin_joystick1 
-  X_pin_joystick1 
-  Y_pin_joystick1 
-  buzzerPin 
Variabile ce retin pozitia cursorului (curenta si precedenta):
-  cursorX 
-  cursorY 
-  lastCursorX 
-  lastCursorY 
Variabila ce retine playerul ce se afla la turn: player
Matrici de leduri liniarizate ce vorfi folosite pe parcursul jocului:
-  ledsP1Boats 
-  ledsP2Boats 
-  ledsP1Hits 
-  ledsP2Hits 
-  ledsP1 
-  ledsP2 
Variabile ce reprezinta entitatile ce pot aparea pe matrice:
-  boat 
-  empty 
-  hit 
-  miss 
-  cursor 
-  cPlayer0 
-  cPlayer1 
Variabile pentru contorizarea timpului la intreruperi:
 
Functii folosite
-  resetGame - elibereaza matricele de joc, seteaza random jocul pentru cei 2 playeri, apoi anunta prin buzzer startul de joc 
-  debugBoats - functie folosita in debugging, printeaza matricele de barcute ale celor 2 jucatori pe interfata seriala 
-  setDisplay - matricele liniarizate ledsP1 si ledsP2 sunt folosite pentru a afisa barcile, respectiv punctele lovite de cei doi jucatori, prin setDisplay, se face switch in functie de jucatorul la turn intre cele doua matrici pentru vizualizarea jocului 
-  setup - setez pinii dispozitivelor folosite, pornesc interfata seriala, initializez jocul prin resetGame() si setez cele doua matrici de leduri la pinii corespunzatori 
-  play - in aceasta functie se citesc miscarile joystick-ului de la playerul ce se afla la turn si se muta corespunzator cursorul acestuia. Apasarea joystick-ului anunta faptul ca jucatorul a tintit un anume punct din arena adversarului, ce urmeaza sa fie evaluat la hit or miss 
-  start - functia ce va fi folosita in loop-ul programului, aceasta face switch intre matricele de joc prin setDisplay si apeleaza functia play cu parametrii necesari jucatorului la turn 
-  win - anunta prin buzzer finalul jocului, pune pe display-ul castigatorului un smiley face si pe cel al pierzatorului un sad face, apoi prin apasarea oricarui buton al joystick-ului reincepe jocul prin functia resetGame 
-  checkEnded - vefica daca vreunul dintre jucatori a castigat (a distrus toate “barcutele” adversarului) si apeleaza functia win daca unul din jucatori a castigat 
-  ISR(INT0_vect) - functie ce controleaza intreruperea INT pe PD2, daca butonul a fost tinut apasat mai mult de 2.5 secunde, se resetaza jocul la urmatoarea mutare 
-  ISR(PCINT2_vect) - functie ce controleaza intreruperea PCINT pe PD4, acelasi efect ca cel de pe PD2 
 
Rezultate Obţinute
Concluzii
Am bifat un achievment pe care il am inca din copilarie: sa fac jocuri :)
Cred ca am sumarizat destul de bine continutul laboratoarelor de PM.
 
Download
Bibliografie/Resurse