Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul propune realizarea unui mini-joc de poker prin reprezentarea pe 3 linii a cartilor, astfel:
Se va afisa caracterul 'W' in dreapta jucatorului castigator (jucatorilor castigatori).
Am ales aceasta tema de proiect deoarece consider interesanta o implementare a acestui joc, fiind prima ocazie de a invata sa lucrez intr-un astfel de context. Am pornit de la ideea de a alege aceasta tema, deoarece sunt pasionat de acest joc, considerat de majoritatea ca fiind unul de noroc, dar el este unul care testeaza si abilitatile de a monitoriza statisticile cazurilor preponderent invingatoare, de a anticipa miscarea adversarului etc. Fiind interesat de acest joc, am fost curios cum s-ar reprezenta punerea sa in practica in acest context (placa ATMega, LCD pe care se vor afisa informatii, placa de test pentru butoane).
Cele 2 carti ale fiecaruia dintre cei 2 jucatori si cele 5 carti comune sunt obtinute prin valori random, algoritmul determinand mana castigatoare sau remiza (daca este cazul).
Este util atat pentru altii, cat si pentru mine in contextul invatarii de a lucra intr-un astfel de mediu.
Denumire componenta | Cantitate |
---|---|
LCD | 1 |
Conector USB | 1 |
Pini | 5 |
Fire mama-mama | 8 |
Fire mama-tata | 8 |
Placa de test | 1 |
Butoane | 5 |
Pentru implementarea jocului am folosit un LCD pe care vor fi afisate informatiile legate de jucatori, asa cum am descris in Introducere. Conectorul USB face legatura intre hardware si software, pentru testare am utilizat AVR.
Am folosit 5 pini (pusi pe placa de test) pentru a conecta, cu ajutorul firelor mama-tata, la Ground urmatorii pini de pe LCD: BLK, MISO, CS1, CS2, PEN. Cu fire mama-mama am facut urmatoarele 9 conexiuni:
LCD | ATMEGA324A-PU |
---|---|
GND | PB- |
VCC | PB+ |
CLK | PB1 |
MOSI | PB5 |
RES | PB6 |
DC | PB7 |
si cele 3 butoane de pe placa de test legate la PD0, PD1, PD2.
Buton apasat (de pe placa de test) | Actiune |
---|---|
PD0 | Se genereaza cartile ambilor jucatori |
PD1 | Se genereaza cele 5 carti comune |
PD2 | Se afiseaza jucatorul castigator (sau remiza) |
Am implementat un comparator de maini de poker, pentru a stabili castigatorul sau cazul de remiza.
Cartile au un singur caracter: 2/3/4/5/6/7/8/9/T/J/Q/K/A
Codificare | Carte |
---|---|
2-9 | 2-9 |
T | 10 |
J | 12 |
Q | 13 |
K | 14 |
A | 15 |
Codificare | Culoare | Traducere englezeasca |
---|---|---|
d | romb | diamonds |
s | inima neagra | spades |
c | trefla | clubs |
h | inima rosie | hearts |
Exemplu de mana: 4sAc2h3hJd =
Algoritmul analizeaza rangul fiecarei maini si compara astfel valorile mainilor jucatorilor
Rangul unei maini se defineste in urmatorul tabel:
Mana | Rang |
---|---|
Obisnuita | 0 |
O pereche | 1 |
Doua perechi | 2 |
Tripla | 3 |
Chinta | 4 |
Culoare | 5 |
Full-House | 6 |
Careu | 7 |
Chinta Regala | 8 |
Chinta Royala | 9 |
Comparatorul lucreaza cu valorile rangurilor mainilor atasate si decide jucatorul castigator. Programul este implementat in C, sursa este cea mai jos atasata, la sectiunea “Download”.
A fost un proiect care mi-a dezvoltat cunostintele de electronica si mi-a pus la incercare abilitatile practice si in acelasi timp pe cele de a ma descurca in situatii limita.
Aproape finalizat, cu mici neajunsuri (nu analizeaza cazurile de egalitate intre 2 maini de acelasi rang).