Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:avaduva:nim [2021/04/30 23:04]
stefan.popovici [Jurnal]
pm:prj2021:avaduva:nim [2021/05/26 15:32] (current)
stefan.popovici
Line 5: Line 5:
 ====== Introducere ====== ====== Introducere ======
  
-Proiectul ​ofera posibilitatea de a juca jocul Nim, atat in 2 jucatori ​cat si de unul singurimpotriva computerului.+Proiectul ​isi propune sa le ofere utilizatorilor ​posibilitatea de a juca jocul Nim, atat single player (jucator vs computer) ​cat si multiplayer (doi jucatori joaca unul impotriva celuilalt). Acesta este un joc simplu, care presupune existenta unor gramezi ​de obiecte din care jucatorii extrag, pe rand, unul sau mai multe obiecte la fiecare mutareinsa doar dintr-o singura gramada la un moment dat. Jucatorul care extrage ultimul pierde. Varianta implementata este cea cu trei gramezi de obiecte, cantitatile fiind generate aleatoriu (valori intre 1 si 50 inclusiv).
  
 ====== Descriere generala ====== ====== Descriere generala ======
  
-Initialse va alege modul de joc (single player/​multiplayer)Se genereaza aleatoriu numarul ​de obiecte ​din fiecare ​dintre ​cele 3 seturi si se alege (tot aleatoriujucatorul care va face prima mutare. Pe ecran vor fi afisate numarul de obiecte ramase in fiecare set si alte informatii. Jucatorii pot sa foloseasca butoanele ​pentru a selecta setul din care vor sa extraga ​obiecte si un potentiometru pentru ​stabili ​cantitatea de extrasAtunci cand au fost extrase toate obiectele din fiecare setjucatorul care efectuat ultima mutare pierdecelalalt fiind castigatormoment evidentiat printr-un sunet emis de buzzer.+Informatiile despre starea curenta a jocului sunt afisate pe un ecran LCD 16x2. Initial se vor afisa cele 2 moduri ​de joc disponibileOdata ce unul dintre acestea este ales, in timpul derularii jocului se vor afisa cantitatile ​de obiecte ​ramase in fiecare ​din cele 3 gramezi, pe prima linie a ecranului, respectiv cantitatea ce se doreste a fi extrasa la urmatoarea mutare, pe a doua linie a ecranului, in dreptul gramezii ​(coloaneidorite. Jucatorii ​au la dispozitie trei butoane si un potentiometru prin intermediul carora ​pot introduce mutarile pe care vor sa le faca atunci cand le vine randul. Cu ajutorul primelor doua butoane pot comuta spre stanga sau spre dreapta ​pentru a alege gramada ​din care vor sa extraga. Potentiometrul are rolul de selecta cu usurinta ​cantitatea ​ce se doreste a fi extrasa, variind intre 1 si numarul ​de obiecte ramase in gramada respectivaNu in ultimul randultimul buton (cel din dreapta) este folosit pentru ​efectua mutarea stabilita in modul descris anterior si a ceda randul celuilalt jucator. In modul single playerpentru ca mutarile computerului sa poata fi observate cu usurinta de catre utilizatoracestea vor fi afisate pe ecran pentru un timp scurt, urmand apoi randul jucatorului. Cand jocul se termina, pe ecran se va afisa castigatorul,​ iar buzzerul va emite un sunet timp de cateva secunde.
  
 ==== Schema bloc ==== ==== Schema bloc ====
  
-{{:​pm:​prj2021:​avaduva:​nim_block_diagram.png|}}+{{:​pm:​prj2021:​avaduva:​nim_block_diagram.jpg|}}
  
 ====== Hardware Design ====== ====== Hardware Design ======
 +==Lista componente==
 +^ Componenta ^  Cantitate ​ ^
 +| Arduino UNO R3 |  1  |
 +| LCD 16x2 |  1  |
 +| Breadboard 400 points |  1  |
 +| Resistor 220 Ohm |  1  |
 +| Potentiometer 10kOhm |  2  |
 +| Pushbutton ​ |  3  |
 +| Piezo capsule [PKM22EPP-40] |  1  |
 +| Solid core jumper wires |    |
  
-**Lista de piese:** +==Schema circuitului== 
-  * Arduino UNO R3 +{{:pm:​prj2021:​avaduva:​Nim_Tinkercad.jpg?​700|}}
-  * LCD 16x2 +
-  * butoane +
-  * potentiometru +
-  * buzzer +
-  * fire +
-  * rezistoare +
-  * breadboard+
    
 ====== Software Design ====== ====== Software Design ======
 +Am folosit Arduino IDE 1.8.15 pentru dezvoltare. Am inclus biblioteca LiquidCrystal.h pentru a configura LCD-ul si pentru a afisa informatiile corespunzator.
 +
 +In ceea ce priveste implementarea,​ jocul incepe cu selectarea modului dorit. Se poate alege modul single player folosind butonul din stanga sau modul multiplayer folosind butonul central. Se va afisa un mesaj corespunzator,​ apoi se afiseaza numarul de obiecte din fiecare gramada, iar jucatorii incep sa isi efectueze mutarile pe rand. Jucatorul care face prima mutare este ales aleatoriu. In cazul computerului,​ acesta are implementata o strategie optima de joc, bazata pe teoria numerelor. Astfel, va incerca mereu ca, dupa mutarea sa, numarul de obiecte ramase in cele 3 gramezi sa aiba propritatea de suma-nim nula (ceea ce presupune ca valoarea obtinuta prin aplicarea operatiei binare xor pe cele 3 valori sa fie 0). Daca acest lucru nu este posibil, atunci obtinerea unei victorii depinde de o potentiala greseala a adversarului,​ iar computerul va alege sa faca o mutare aleatoare. Mai multe detalii despre strategia de joc optima se gasesc [[https://​en.wikipedia.org/​wiki/​Nim|aici]]. Finalul jocului este semnalat cu ajutorul buzzerului si printr-un mesaj corespunzator.
 +
 +====== Rezultate Obtinute ======
 +{{:​pm:​prj2021:​avaduva:​nim0.jpeg?​700|}}
 +{{:​pm:​prj2021:​avaduva:​nim2.jpeg?​700|}}
 +{{:​pm:​prj2021:​avaduva:​nim5.jpeg?​700|}}
 +{{:​pm:​prj2021:​avaduva:​nim6.jpeg?​700|}}
 +{{:​pm:​prj2021:​avaduva:​nim4.jpeg?​700|}}
  
 ====== Concluzii ====== ====== Concluzii ======
  
 ====== Download ====== ====== Download ======
 +Cod + prezentare video: {{:​pm:​prj2021:​avaduva:​Nim.zip|}}
  
 ====== Jurnal ====== ====== Jurnal ======
   * descriere + schema bloc: 30 aprilie 2021   * descriere + schema bloc: 30 aprilie 2021
 +  * hardware design, software design, rezultate, video, completare resurse + update descriere: 26 mai 2021
 ====== Bibliografie/​Resurse ====== ====== Bibliografie/​Resurse ======
  
 https://​en.wikipedia.org/​wiki/​Nim\\ https://​en.wikipedia.org/​wiki/​Nim\\
 https://​www.arduino.cc/​en/​Tutorial/​LibraryExamples/​LiquidCrystalDisplay\\ https://​www.arduino.cc/​en/​Tutorial/​LibraryExamples/​LiquidCrystalDisplay\\
 +https://​store.arduino.cc/​genuino-starter-kit\\
 [[https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​avaduva/​nim?​do=export_pdf | Export to PDF]] [[https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​avaduva/​nim?​do=export_pdf | Export to PDF]]
  
pm/prj2021/avaduva/nim.1619813045.txt.gz · Last modified: 2021/04/30 23:04 by stefan.popovici
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