Battleship

Introducere

Proiectul consta in crearea unui joc multiplayer (2 jucatori) ce simuleaza un joc de Battleship, iar de-a lungul jocului se va auzi o coloana sonora. Fiecarui jucator ii sunt asignate 5 nave de lupta de dimensiuni diferite asezate fie vertical, fie orizontal, iar scopul jocului este sa distrugi in totalitate toate navele inamicului. Jucatorii interactioneaza cu celalalt pe runde: jucatorul care trebuie sa faca o decizie vede tabla pe care loviturilor pe care le-a dat ce pot fi de doua tipuri HIT sau MISS in cazul in care lovitara a nimerit o unitate a unei nave. O nava este alcatuita dintr-un numar de 2, 3, 4 sau 5 unitati si este considerata distrusa in momentul in care toate unitatile au fost nimerite. Jocul se opreste in momentul in care unul dintre jucatori reuseste sa distruga toate navele celuilalt jucator.

La nivelul interactiunii cu proiectul in momentul in care un jucator trebuie sa aleaga o pozitie (coordonata x si y) a unui atac apasa pe butonul de ATTACK, iar pe ecran se vor afisa un mesaj de tipul “X: N Y: N”, jucatorul trebuind sa aleaga o pozitie a atacului prin apasarea butoanelor LEFT, RIGHT, UP, DOWN si apoi sa apese butonul HIT. Celor doi jucatori li se vor afisa mesaje ce vor sugera daca aceasta actiune a avut un impact.

Descriere generală

Schema bloc ce contine interactiunea intre modulele folosite in proiect. Pentru interactiunea jucatorilor folosesc doua ecrane LCD, un potentiometru pentru reglarea luminozitatii ecranelor si butoanele cu care jucatorii pot lua decizii. De asemenea folosesc un Modul SD Card pentru a incarca o melodie ce va fi redata in timpul jocului, folosindu-ma de un amplificator de sunet si un difuzor, iar pentru reglarea volumului folosesc un potentiometru.

Schema electrica ce contine legaturile intre componente. Cele doua placi Arduino interactioneaza intre ele prin intermediul interfetei seriale (RX si TX). O placuta Arduino gestioneaza semnalele transmise catre cele doua LCD-uri, pe langa alimentare (5V pentru tensiune, 3.3V pentru pinul BLA si Ground) mai transmite semnale pe pinii de Enable(E - pinii 12 si 13), Register Select(RS - pinii 9 si 10) si Read/Write(R/W - pinii 7 si 11). Cealalta placuta se ocupa de getionarea input-ului provenit de la butoane (pinii 2, 3, 4, 5, 6, 7) cat si a input-ului catre DFPlayer. Player-ul MP3 este conectat la pinii 8 si 9, si are conectat un difuzor pentru a reda semnalele audio, volumul melodiei redate este controlate de catre potentiometru.

Pentru schema electrica am folosit Tinkercad in care am simulat interactiunea dintre componente. De mentionat este ca am folosit un LCD16X2 (LCD-ul 12864 are un potentiometru integrat, nu a mai fost nevoie sa folosesc unul separat), iar pentru a reda sunet am folosit in schema electrica un buzzer Piezzo (nu exista modulele folosite DFPlayer si Difuzor 3W4Ohm).

circuit_fizic_final.jpg

Hardware Design

Componentele hardware folosite în cadrul proiectului:

  • ARDUINO UNO
  • LCD 12864
  • Potentiometru WH148
  • MP3 DFPLayer
  • Card MicroSD
  • LED-uri
  • Rezistente
  • Difuzor 3W4Ohm
  • Breadboard
  • Fire
  • Butoane

Software Design

Descrierea codului aplicaţiei (firmware):

Mediu de dezvoltare: Arduino IDE

Biblioteci aditionale: DFRobotDFPlayerMini.h, U8g2lib.h

Functii implementate: sender-ul (transmite informatii de la butoane catre placuta Arduino ce se ocupa de afisarea pe LCD si reda o melodie de la DFPlayer modificand volumul folosind un potentiometru) si receiver-ul (primeste input de la sender, genereaza jocul folosind functia generateGame, afiseaza pozitia de atac, afiseaza rezultatul unui atac si castigatorul jocului).

Rezultate Obţinute

In urma proiectului am obtinut un joc care respecta cerintele unui joc de BattleShip, in sensul ca fiecare jucator alege o pozitie de atac, iar castigatorul este decis in urma distrugerii tuturor navelor inamice. Pe langa aceste functionalitati proiectul include si o parte audio, volumul melodiei redate poate fi controlat printr-un potentiometru.

Concluzii

Aspecte pozitive: am reusit sa interactionez cu componente hardware mult mai in detaliu fata de laborator, a fost foarte interesanta partea de lipire a pinilor pe un LCD si pe un difuzor, am imbunatatit cunostinetele despre lucrul cu registri, interfata seriala, redarea audio si video.

Aspecte de imbunatatit: documentarea asupra proiectului mult mai amanuntita, verificarea interactiunea unei biblioteci cu alte functionlatati (biblioteca de afisare pentru LCD si timere) si decizii mai bune in ceea ce priveste partea hardware.

Download

Arhiva contine fisierele sursa si un fisier README.

arhivapm_andronicdragossebastian.zip

Jurnal

6.05.2023 - Schema bloc

20.05.2023 - Etapa Hardware

27.05.2023 - Etapa Software

Bibliografie/Resurse

pm/prj2023/apredescu/battleship_game.txt · Last modified: 2023/05/28 00:00 by dragos.andronic
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