Ciao a tutti questa è la prima volta che scrivo in questo forum.![]()
Sto studiando i puntatori, in particolare sono arrivato a dover capire un programma di distribuzione delle carte da poker.
Vi posto il codice:
Il mio problema è che non risco a capire l'if contenuto dalla funzione deal, perchè cerca la carta corrente? non basterebbe scorrere il deck cella per cella? per esempio: deck[0][0], deck[0][1], deck[0][2]codice:#include <stdio.h> #include <stdlib.h> #include <time.h> // prototipi void shuffle( int wDeck[][13] ); void deal( int wDeck[][13], const char *wFace[], const char *wSuit[] ); int main() { // inizializza il vettore dei semi const char *suit[4] = {"Cuori", "Quadri", "Fiori", "Picche"}; // inizializza il vettore delle facce const char *face[13] = {"Asso", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto", "Nove", "Dieci", "Jack", "Regina", "Re"}; // inizializza il vettore del mazzo di carte int deck[4][13] = {{0}}; srand( time(NULL) ); /* specifica il seme per per il generatore di numeri casuali */ shuffle( deck ); deal( deck, face, suit ); return 0; } //mescola le carte nel mazzo void shuffle( int wDeck[][13] ) { int row; // numero di riga int column; // numero di colonna int card; // contatore // per ognuna delle 52 carte, sceglie a caso una casella del mazzo for( card = 1; card <= 52; card++ ) { /* sceglie a caso una nuova locazione finchè non trova una casella libera */ do { row = rand() % 4; column = rand() % 13; }while(wDeck[row][column] != 0); /* memorizza il numero della carta nella casella del mazzo scelta */ wDeck[row][column] = card; } } // distribuisce le carte nel mazzo void deal( int wDeck[][13], const char *wFace[], const char *wSuit[] ) { int card; // contatore delle carte int row; // contatore delle righe int column; // contatore delle colonne // distribuisce ognuna delle 52 carte for ( card = 1; card <= 52; card++ ) { // itera scorrendo le righe di wDeck for ( row = 0; row <= 3; row++ ) { /* itera scorrendo le colonne di wDeck relative alla riga corrente */ for ( column = 0; column <= 12; column++ ) { /* se la casella contiene la carta corrente, la visualizza */ if ( wDeck[row][column] == card ) { printf( "%5s di %-8s%c", wFace[column], wSuit[row], card % 2 == 0 ? '\n' : '\t' ); } } } } }
Spero in una vostra illuminazione![]()
in ogni caso l'esempio (Figura 7.24) lo trovate anche quì(forse si capisce meglio in quanto non riesco a formattare bene il testo):
http://books.google.it/books?id=Jz9z...0gioco&f=false

Rispondi quotando