Joc Mastermind

Autor: Andrei Preda (331 CA)

Introducere

Mastermind este un joc de societate în care o persoană încearcă să ghicească un cod ales de adversarul său. Pentru a reuși, jucătorul poate propune mai multe variante ale codului final, primind pentru fiecare informații despre diferențele dintre răspunsul corect și cel încercat.

Scopul proiectului este implementarea acestui joc folosind un microcontroller Arduino și oferirea posibilității de a juca împotriva “calculatorului”.

Proiectul poate fi aproape util cuiva foarte plictisit și în lipsă de oricare alte activități.

Regulile jocului

Un cod este format din 4 simboluri. Clasic, fiecare simbol are una din 6 valori (de exemplu, A, B, C, D, E sau F).

Jucătorul care sparge codul are un număr limitat de încercări de a-l ghici. După fiecare încercare, va afla câte elemente au valoarea bună și sunt pe poziția corectă, și câte elemente au valoarea bună dar sunt plasate incorect. El câștigă dacă ghicește codul secret și pierde dacă și-a epuizat numărul de încercări.

Din moment ce avem la dispoziție o placuță Arduino, putem adăuga și o limită de timp.

Descriere generală

Arduino UNO va prelua input-ul de la utilizator printr-un buton și un potențiometru. Potențiometrul va fi folosit pentru a naviga prin opțiunile unor meniuri, iar butonul, pentru a confirma o alegere.

Output-ul va fi oferit prin mai multe componente. Un ecran LCD va afișa majoritatea informațiilor legate de joc. LED-uri se vor aprinde pentru fiecare simbol ghicit corect. La finalul jocului, în funcție de deznodământ, un buzzer piezo va cânta o melodie.

Toată logica jocului va fi stocată în microcontroller. Pentru debugging (și hinturi), Arduino va trimite informații despre joc prin interfața serială către o aplicație simplă de pe calculatorul conectat prin USB.

Schema bloc

Hardware Design

Componentă Număr
Arduino UNO 1
LCD 1602 cu I2C 1
LED 4
Breadboard 2
Buzzer piezo 1
Pushbutton 1
Potențiometru 1
Rezistență 150 ohm 4
Rezistență 5k ohm 1

Diagrama electrică

Am inclus și o schemă realizată în Tinkercad, dar am conectat LCD-ul în paralel, deoarece nu am găsit un modul pentru I2C.

Software Design

Pentru dezvoltarea software-ului am folosit arduino-cli.

Am avut nevoie să instalez și câteva biblioteci, precum LiquidCrystal I2C și FTDebouncer.

Am împărțit codul în două module mari: unul pentru jocul propriu-zis și unul pentru interacțiunea cu melodiile din program.

Pentru a modela succesiunea de acțiuni a utilizatorului și “interfețele” programului la fiecare pas, am implementat un fel de automat finit, cu stări precum Citirea codului sau Afișarea feedback-ului. Acest design m-a ajutat destul de mult la implementarea condițiilor de stop-joc, deoarece sunt destul de multe și pot apărea din mai multe părți ale programului (timpul s-a scurs, jucătorul a rămas fără încercări, jucătorul a ghicit răspunsul etc.).

De asemenea, am ținut actualizările LCD-ului la un minim necesar, pentru eficiență și o experiență mai plăcută.

Tot pentru o experiență intuitivă, am folosit un mod custom de debouncing pe baza FTDebouncer.

Rezultate obținute

Jocul obținut funcționează bine și este intuitiv de folosit. Implementarea fizică poate fi văzută mai jos.

preda-andrei-rezultat.jpg

De asemenea, un video demo se găsește pe Youtube.

Jocul este destul de simplu. Am încercat să implementez și un mod de “rezolvare automată”, în care două plăcuțe Arduino concurau una împotriva celeilalte, dar nu am reușit să implementez comunicarea prin SPI.

Concluzii

Mă bucur că am avut ocazia să lucrez la un proiect acest semestru și să folosesc unele noțiuni învățate la laborator, chiar dacă nu am realizat un proiect complex. Am descoperit și că cele mai simple probleme de debugging te pot întârzia destul de mult dacă nu ești atent.

Download

Arhiva se descarcă de aici.

Proiectul este disponibil și pe Github.

Această pagină se exportă de aici.

Jurnal

  • 02.05.2021 - Introducere, schemă bloc, schemă electrică
  • 03.05.2021 - Linkuri corecte către imagini
  • 03.06.2021 - Design software, Concluzii, Bibliografie

Bibliografie/Resurse

pm/prj2021/abasoc/mastermind.txt · Last modified: 2021/06/03 11:53 by andrei.preda3006
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