Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] Programma per la distribuzione delle carte da poker

    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

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Credo sia solo un esempio didattico senza utilità pratica e senza grande logica nel codice
    Tecnologia

  3. #3
    Che non ha utilità pratica non posso essere che d'accordo con te.
    Per quanto riguarda la logica, un minimo deve esserci in quanto gli esercizi successivi mi chiederanno di modificare il programma per aggiungere nuove funzioni e renderlo più efficiente, quindi prima di andare avanti volevo chiarirmi ogni dubbio.

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Pone i numeri da 1 a 52 (le carte) a caso in una matrice 4x13, quindi cerca ad uno ad uno i numeri delle carte e basandosi sulla posizione: riga e colonna stampa il seme (corrispondente alla riga) e il numero della carta(corrispondente alla colonna) con due array ausiliari.
    Essendo i numeri stati inseriti "a caso" nel cercarli in ordine si troveranno in una riga e colonna casuale, facendo risultare il mazzo mescolato.
    L'algoritmo di inserimento potrebbe potenzialmente andare avanti all'infinito...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.