OOP in C++ - prof. Claudio Maccherani - Perugia - 2016
OOP (Tressette)
// "TressetteOOP.cpp" - Claudio Maccherani - 2016/2017 #include
#include
#include
#include
using namespace std; // definizione globale nomi carte, nomi semi e nomi giocatori string nomeCarta[11] = { " ","Asse","Due","Tre","quattro","cinque","sei", "sette","Fante","Cavallo","Re" }; string nomeSeme[5] = { " ","Spadi","Denari","Coppe","Bastoni" }; string nomeGiocatore[5]={ " ","PEPPE","QUINTILIO","MARIO","NATALE" }; // definizione classe/oggetto "Carta" class Carta { public: int numero,seme; string nomecarta,nomeseme; Carta(); Carta(int nc,string nomec,int ns,string nomes); void visualizzaCarta(); }; // metodi Carta::Carta() {} // costruttore generico Carta::Carta(int nc,string nomec,int ns,string nomes) // costrut.personalizzato { numero = nc; nomecarta = nomec; seme = ns; nomeseme = nomes; } void Carta::visualizzaCarta() // visualizza carta { cout << nomecarta << "\t" << nomeseme << "\n"; } // definizione classe/oggetto "MazzoDiCarte" class MazzoDiCarte { Carta mazzo[41]; public: MazzoDiCarte(); void visualizzaMazzo(); void mischiaMazzo(); Carta pescaCarta(); Carta estraeCarta(int i); }; // metodi: MazzoDiCarte::MazzoDiCarte() { // costruttore personalizzato for (int i=1;i<=4;i++) { for (int j=1;j<=10;j++) { Carta c1 = Carta(j,nomeCarta[j],i,nomeSeme[i]); mazzo[10*(i-1)+j] = c1; } } } void MazzoDiCarte::visualizzaMazzo() // visualizzazione intero mazzo { cout << "\n--- Visualizza mazzo ---\n"; for (int i=1; i<=40; i++) { mazzo[i].visualizzaCarta(); } } void MazzoDiCarte::mischiaMazzo() // mischia le carte del mazzo scambiandole { srand(time(NULL)); int k,j; Carta c1; for(int i=0; i<100; i++) { k = rand()%40+1; j = rand()%40+1; if (k != j) { c1 = mazzo[k]; mazzo[k] = mazzo[j]; mazzo[j] = c1; } } cout << "\n--- Il mazzo e' stato mischiato ---\n"; } Carta MazzoDiCarte::pescaCarta() // pesca una carta qualsiasi nel mazzo { srand(time(NULL)); int j = rand()%40+1; return mazzo[j]; } Carta MazzoDiCarte::estraeCarta(int j) // estrae la carta j-esima dal mazzo { return mazzo[j]; } // definizione classe/oggetto "Giocatore" class Giocatore { string nome; Carta mazzo[11]; public: Giocatore(); void visualizzaGiocatore(); void nomealGiocatore(string nom); void cartaalGiocatore(int i,Carta c1); int accusoGiocatore(); }; // metodi: Giocatore::Giocatore() // costruttore personalizzato { nome = " "; for (int j=1;j<=10;j++) { Carta c1 = Carta(0," ",0," "); mazzo[j] = c1; } } void Giocatore::visualizzaGiocatore() // visualizza il giocatore { cout << "\n--- " << nome << " ---\n"; for (int i=1; i<=10; i++) { mazzo[i].visualizzaCarta(); } } // assegna nome al giocatore void Giocatore::nomealGiocatore(string nom) { nome = nom; } // assegnazione una carta al giocatore void Giocatore::cartaalGiocatore(int i,Carta c1) { mazzo[i] = c1; } int Giocatore::accusoGiocatore() // controlla l'accuso del giocatore { cout << "\nAccuso di " << nome << ":\t "; int acc[4],nap[4],tot=0,n,xcarta,xseme; Carta c1; for (int i=0;i<4;i++) { acc[i]=0; nap[i]=0; } for (int i=1; i<=10; i++) { c1 = mazzo[i]; //xcarta = c1.numeroCarta(); xseme = c1.semeCarta(); xcarta = c1.numero; xseme = c1.seme; if (xcarta <= 3) { acc[xcarta] = acc[xcarta] + 1; nap[xseme] = nap[xseme] + 1; } } for (int i=1;i<=3;i++) // controllo 3-4 Assi/Due/Tre { if (acc[i]>=3) { tot=tot+acc[i]; cout<<" "<
0) cout << " TOTALE ACCUSO "<
> scelta; switch (scelta) { case 1: mazzo.visualizzaMazzo(); break; case 2: mazzo.mischiaMazzo(); break; case 3: for(int g=1;g<=4;g++) { gio[g].nomealGiocatore(nomeGiocatore[g]); for(int i=1;i<=10;i++) { c1 = mazzo.estraeCarta((g-1)*10+i); gio[g].cartaalGiocatore(i,c1); } gio[g].visualizzaGiocatore(); } break; case 4: for(int g=1;g<=4;g++) { gio[g].accusoGiocatore(); } break; case 0: break; default: cout << "\n scelta non prevista \n"; } } while (scelta != 0); return 0; }