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:
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' );
}
}
}
}
}
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]
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