This is an old revision of the document!


Implementare joc Battleship - Leahu Morie Robert Andrei 331 CB

Introducere

Am decis sa fac implementarea jocului Battleship, folosind un microcontroller, o matrice cu LED-uri, m-am gândit sa folosesc un ecran LCD pentru scor, un timer pe care îl folosesc pentru a avea timeout la miscări si un buzzer pe care îl folosesc atunci cand câstigi/pierzi, eventual dupa fiecare miscare.

Afișajul se va împărți în două regiuni egale, una pentru fiecare jucător si se vor genera cel puțin două forme diferite de nave / vapoare pentru fiecare jucător, plasate aleator pe spațiul de joc.

Poziția de lovire va fi selectată de un jucător folosind 4 butoane pentru direcțiile stânga, dreapta, sus, jos sau un joystick. Confirmarea poziției se va realiza folosind un alt buton;

Odata ce un „vapor” a fost lovit și scufundat, led-urile aferente lui se vor aprinde într-o anumită culoare și vor rămâne aprinse pe toată durata jocului;

Pozițiile de pe matrice unde s-a încercat o lovire, însă ele au fost libere, vor rămâne aprinse pe toată durata jocului înt-o anumită culoare.

În momentul în care un jucător câștigă se va afișa un mesaj corespunzător, precum și scorul, iar buzzer-ul o sa inceapa sa cante. Buzzer-ul o să cânte și atunci când un jucător o să piardă. Dupa fiecare miscare am decis sa pun un timeout, pentru ca jucătorul să se gândească, folosind un timer.

Descriere Generala

SCHEMA_BLOC:

Hardware Design

Lista de piese:

  • Arduino UNO
  • 1 LCD cu I2C
  • Buzzer
  • rezistente
  • 10 fire
  • 2 LED-uri
  • buton MIC
  • modul adaptor micro SD
  • servomotor SG90
  • modul matrice LED MAX7219

Schema electrica:

Software Design

Pentru dezvoltare am folosit ArduinoIDE, si ca biblioteci am folosit:

  • Wire.h – pentru interfața serială I2C
  • LiquidCrystal_I2C.h – pentru modulul LCD
  • Keypad.h – pentru tastatură
  • LedControl.h – pentru matricea de LED-uri
  • Servo.h - pentru servomotor

Ca si implementare a programului:

  • setup() : generarea în mod aleator a celor două hărți, setarea poziției de

început, inițializarea modulelor (LCD, matricea de LED-uri)

void setup() {
  randomSeed(analogRead(0)); // seeds the random number generator by a value obtained from doing AnalogRead on pin A0
  myServo.attach(13);   // attaches the servo on pin 9 to the servo object
  lcd.backlight(); // turn on backlight
  lcd.begin();     // initialize the lcd

  lc.shutdown(0, false);   // turns the display on 
  lc.setIntensity(0, 10); // set the brightness
  lc.clearDisplay(0);    // clear the display

  Serial.begin(9600);  // initialize serial communication

  // start position for attack
  xPos = 0;
  yPos = 7;

  // display on LED matrix
  lc.setRow(0, 0, B10000000); //setting the leds from the first row (index=0) 

  // first player - player 0
  PLAYER = 0;
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("PLAYER #0");
  displayScore();
  delay(700);

  // generate maps and backup maps
  generateMaps();

  // game is won when WON != -1
  WON = -1;
}
  • loop() : cât timp jocul nu este câștigat, așteptăm ca jucătorul curent să

aleagă ce poziție va ataca;

  • se afișează pe matricea de LED-uri poziția
  • selectată de jucător prin apăsarea tastelor;
  • la apăsarea tastei 5 se verifică
  • pe harta adversarului dacă atacul este hit sau miss
  • generateMap: generează o matrice de 0 și 1 ce reprezintă navele de

lungimi 2, 3 și 4 așezate random; pentru fiecare navă nouă, folosim funcția random pentru a genera poziția de start și direcția, pe baza acestor date verificăm dacă nava nu intersectează alte nave deja amplasate

  • checkHit: verifică pentru player-ul curent dacă pe harta adversarului, la

poziția atacată se găsește o navă și returnează 1 la hit, 0 la miss; la fiecare hit, se marchează acea poziție pe hartă

Rezultate Obtinute

Concluzii

Download

Jurnal

Bibliografie/Resurse

pm/prj2023/amocanu/implementare-joc-battleship/create-page.1684857400.txt.gz · Last modified: 2023/05/23 18:56 by robert_andrei.leahu
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