This is an old revision of the document!
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.
Lista de piese:
Schema electrica:
Pentru dezvoltare am folosit ArduinoIDE, si ca biblioteci am folosit:
Ca si implementare a programului:
î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; }
aleagă ce poziție va ataca;
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
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ă