Programmi C / C++ - prof. Claudio Maccherani - Perugia - 2008
Uso di VETTORI, MATRICI e ARRAY a 3 dimensioni
nel «TRESSETTE
»
(
ACCUSO)
/* Tressette - distribuzione carte e verifica dell'eventuale "accuso" (con uso di Vettori, Matrici e Array a 3 dimensioni) Dev-C++ - prof. Claudio Maccherani - Perugia - 2008/09 */ #include
#include
#include
#include
using namespace std; string carta[10] = {"Asse","Due","Tre","Quattro","Cinque","Sei","Sette","Fante","Cavallo","Re"}; string seme[4] = {"Denari","Coppe","Spadi","Bastoni"}; string cartaccuso[3] = {"Assi","Due","Tre"}; int mazzo[10][4]; // mazzo di carte: 10 righe (carte) e 4 colonne (semi) int gio[10][4][4]; // giocatori: 10 carte, 4 semi, 4 giocatori int acc[4][3]; // totali 'accusi': giocatori (righe), assi-due-tre (col.) int nap[4][4]; // totali 'nalopetane': giocatori (righe), semi (colonne) int c,s,g; // indici degli array ('c'=carta, 's'=seme, 'g'=giocatore) int gotoxy(int r, int c) { // posizionamento cursore a riga 'r' e colonna 'c' HANDLE Hout; CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo; Hout = GetStdHandle(STD_OUTPUT_HANDLE); ConsoleInfo.dwCursorPosition.Y = r; ConsoleInfo.dwCursorPosition.X = c; SetConsoleCursorPosition(Hout,ConsoleInfo.dwCursorPosition); } void inizializza() { // inizializzazione strutture for( c = 0; c < 10; c++ ) { // ciclo sulle carte for( s = 0; s < 4; s++ ) { // ciclo sui semi mazzo[c][s] = 1; // 1 - carta presente for( g = 0; g < 4; g++ ) // ciclo sui giocatori gio[c][s][g] = 0; } // 0 - carta assente } for( g = 0; g < 4; g++ ) { // ciclo sui giocatori for( int i = 0; i < 4; i++ ) { // ciclo sui semi (e su assi-due-tre) nap[g][i] = 0; if ( i < 3 ) acc[g][i] = 0; } } } void distribuisci() { // distribuzione casuale carte srand(time(0)); // setta il numero iniziale del generatore numeri casuali for( g = 0; g < 4; g++ ) { // per ognuno dei quattro giocatori for ( int i = 1; i <= 10; i++ ){ // vengono distribuite dieci carte do { c = rand() % 10; // numero casuale da 0 a 9 - carta s = rand() % 4 ; // numero casuale da 0 a 3 - seme } while (mazzo[c][s] == 0); // se carta non disponibile, ritenta mazzo[c][s] = 0; // la toglie dal mazzo gio[c][s][g] = 1; // la assegna al giocatore corrente } } } void visualizza() { // visualizza carte dei giocatori e controlla 'accuso' int col,row; for( g = 0; g < 4; g++ ) { // ciclo sui giocatori row = 2; col = g * 20 + 1; gotoxy(row,col); cout << "GIOCATORE " << g+1; for ( c = 0; c < 10 ; c++) { // ciclo sulle carte for ( s = 0; s < 4; s++) { // ciclo sui semi if (gio[c][s][g] == 1) { row = row + 1; gotoxy(row,col); cout<
= 3) { t = t + acc[g][c]; row = row + 1; gotoxy(row,col); cout<
= 3) { t = t + nap[g][s]; row = row + 1; gotoxy(row,col); cout<<"Napoletana "<
0) // totale accuso cout<<"ACCUSO "<
\n\n"); inizializza(); // inizializza gl array distribuisci(); // distribuisce le carte ai giocatori visualizza(); // visualizza le carte distriuite ai giocatori accuso(); // dichiarazione degli eventuali 'accusi' dei giocatori gotoxy(20,1); cout << "Ancora (s/n) ? "; cin >> Cont; } while (Cont=='s'); return 0; }