BlackJack

Descriere generala

Cunoscut și sub numele de 21, este un joc des întâlnit în cazinouri. Jocul a câștigat popularitate deoarece este ușor de jucat, jucătorul ce are suma cărților 21 sau cel mai aproape de 21 câștigă.

Jucatorul primeste la inceput 2 carti cu valorile cuprinse intre 1 si 11 (11 este asul). El poate sa aleaga la fiecare pas daca mai vrea sau nu o carte; pentru a castiga trebuie ca suma tuturor cartilor sa fie in intervalul [18, 21]. Voi folosi un ecran pe care voi afisa cartile si, in final, daca s-a castigat sau s-a pierdut.

Descrierea generala a jocului se afla la linkul: Blackjack

Implementare hardware

Pentru realizarea proiectului, am mai creat o placuta suplimentara, pe langa placuta de baza:

Apoi am conectat placuta de extensie la cea de baza, cu ajutorul unor cabluri:

Ecranul Nokia 3310:

Piesele utilizate pentru conectarea placutei de baza cu LCD-ul Nokia 3310 sunt urmatoarele:

  1. 5 rezistente de 1k8
  2. 5 rezistente de 3k3
  3. 2 diode 1N4148
  4. 1 dioda Zener 3v3 (sa nu se arda ecranul daca una din rezistente nu limiteaza curentul)
  5. 1 condensator 10uF
  6. 3 butoane: Yes, No, Reset
  7. pini
  8. fire de legatura

LCD-ul Nokia 3310 functioneaza la o tensiune de 2.7 - 3.3V; de aceea au fost folosite niste divizoare de tensiune pentru pinii SCK (clock), SDIN (data), D/C (data/cmd), SCE (enable), RES (reset). Pinul GND este conectat la GND de pe placuta si pinul VOUT este conectat la condensatorul de 10uF (care este conectat la masa). S-a protejat ecranul printr-o dioda Zener de 3V3.

Conectarea ecranului cu atmega16:

  1. SCK = PC7
  2. SDIN = PC6
  3. D/C = PC5
  4. SCE = PC4
  5. RES = PC3

Conectarea butoanelor cu atmega16:

  1. Yes = PA2
  2. No = PA3
  3. Reset = PA4

Implementare software

Implementat in C.

Mediul de dezvoltare utilizat: Notepad++, Visual C++ 2008.

Am folosit libraria pcd8544.h

Implementare BlackJack:

  1. am folosit niste functii deja definite pentru un lcd de Nokia
  2. am definit structura unui dreptunghi (carte[][]), in care am considerat pixelii de desenat ca fiind 1 (ce nu e de desenat e 0)
  3. initButtons(): initializeaza portul A, cu pinii corespunzatori: 0 pentru Reset, 1 pentru Yes, 2 pentru No
  4. GetButton(): verifica ce buton a fost apasat, pentru a sti intentiile jucatorului
  5. blackZero(): initializeaza la 0 toata structura de carte (toate elementele din matrice sunt 0)
  6. blackInit(unsigned char val): pornind de la structura matricei carte[][], care initial are toate valorile 0, incep sa marchez ce pixeli trebuie desenati; am gandit ca o carte sa aiba dimensiunea de 9×12 (tot ecranul Nokia are 84×48); vreau sa i se ofere jucatorului maxim 6 carti, toate puse in linie; in dreapta sus am pus o carte speciala, care are ca simbol notat pe ea ”?” ⇒ inseamna ca ar putea sa mai primeasca o carte; dupa ce am marcat conturul unei carti, in functie de ce valoare are inauntru, am marcat pixelii care vor forma numarul; numarul este format ca si conturul, din puncte care formeaza linii; in functie de valoarea lui val, se va desena in contur numarul.
  7. blackDraw(unsigned char val): apeleaza functia blackInit, pentru a vedea ce carte trebuie desenata; aici, daca un element din matrice este 1, se va apela functia LCD_setpixel; pe masura ce apelez blackDraw in main, cartile de vor aseza la dreapta anterioarei, pe acelasi Y, deci numai X se va modifica.
  8. blackDrawWhenever(unsigned char val): deseneaza mereu cartea din dreapta sus
  9. reset(): se poate apasa butonul de reset; atunci jocul o ia de la inceput: se afiseaza 2 carti, se afiseaza cartea din dreapta, score-ul devine 0, nu e nici un buton apasat.
  10. myRand(): imi calculeaza niste numere random, intre 1 si 11, care reprezinta valorile cartilor.
  11. main(): afisez 2 carti pe ecran, cartea din dreapta sus, score-ul se calculeaza ca suma a celor 2 carti; daca e 21 din prima, jucatorul castiga si se afiseaza pe ecran “Blackjack”; daca nu, jucatorul poate sa aleaga sa mai primeasca o carte (apasand pe butonul de Yes), sau sa incheie jocul, apasand pe No. Jocul este castigat daca score-ul este in intervalul [18, 21]. Daca nu, jucatorul pierde. Jucatorul poate sa apese si pe butonul de Reset, moment in care jocul o ia de la inceput, cu totul pe 0.

Rezultate obtinute

Concluzii

Ecranul de Nokia a fost greu de gasit si de aceea am folosit un ecran comun cu cativa colegi (la aprobarea asistentei noastre de laborator).

A fost dificila testarea codului, deoarece exista riscul arderii ecranului, daca conectam la o tensiune > 3.3V.

In final, totusi, a mers. Este un BlackJack basic, care nu are cine stie ce grafica, dar afiseaza pe ecran cartile conform descrierii si calculeaza score-ul si stie sa se reseteze.

Bibliografie

pm/prj2011/dloghin/blackjack.txt · Last modified: 2021/04/14 17:07 (external edit)
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