codice:
	#include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef enum
    {
       denari,
       bastoni,
       spade,
       coppe
    }Semi_nap;
    struct carta
    {
       int valore;
       Semi_nap seme;
    };
    typedef carta Carta;
    void mischia_carte(Carta mazzo[],int n_carte,int qvmix);
    void scambiare_carte(Carta mazzo[],int i, int j);
    int main()
    {
       int iniz,i,j,puntiprimogiocatore=0,puntisecondogiocatore=0,k=0,puntitotali,qvmix,n_carte=40;
       char giocatoreuno[20], giocatoredue[20];
       Carta mazzo[40]={
          {1,denari},{2,denari},{3,denari},{4,denari},{5,denari},{6,denari},{7,denari},{8,denari},{9,denari},{10,denari},
          {1,bastoni},{2,bastoni},{3,bastoni},{4,bastoni},{5,bastoni},{6,bastoni},{7,bastoni},{8,bastoni},{9,bastoni},{10,bastoni},
          {1,spade},{2,spade},{3,spade},{4,spade},{5,spade},{6,spade},{7,spade},{8,spade},{9,spade},{10,spade},
          {1,coppe},{2,coppe},{3,coppe},{4,coppe},{5,coppe},{6,coppe},{7,coppe},{8,coppe},{9,coppe},{10,coppe}};
       printf("Inserire il nome del primo giocatore/n");
       gets(giocatoreuno);
       printf("Inserire il nome del secondo giocatore/n");
       gets(giocatoredue);
       iniz = rand()%2;
       if(iniz==0)
       {
          printf("Il primo a giocare sarà %s/n",giocatoreuno);
       }
       else
       {
          printf("Il primo giocatore sarà %s/n",giocatoredue);
       }
       printf("Quante volte vuoi mischiare il mazzo?");
       scanf("%d",&qvmix);
       mischia_carte(mazzo,n_carte,qvmix);
       do
       {
          printf("le posizioni delle carte ancora coperte");
          for(k=0;k<=39;k++)
          {
             if(mazzo[k].valore==0)
             {
                continue;
             }
             else
             {
                printf("%d",k);
             }
          }
          if(iniz==0)
          {
             printf("%s scegli la posizione della prima carta/n",giocatoreuno);
             scanf("%d",&i);
             if(mazzo[i].valore==0)
             {
                printf("la carta è gia stata scelta/n");
                                                                                         
             }
             else
             {
                printf("La carta scelta è %d, %s/n",mazzo[i].valore,mazzo[i].seme);
             }
             printf("%s scegli la posizione dell seconda carta/n",giocatoreuno);
             scanf("%d",&j);
             if(mazzo[j].valore==0)
             {
                printf("la carta è gia stata scelta/n");
                continue;
             }
             else
             {
                printf("La carta scelta è %d, %s/n",mazzo[i].valore,mazzo[i].seme);
             }
          }
          else
          {
             printf("%s scegli la posizione della prima carta/n",giocatoredue);
             scanf("%d",&i);
             if(mazzo[i].valore==0)
             {
                printf("la carta è gia stata scelta/n");
                continue;
             }
             else
             {
                printf("La carta scelta è %d, %s/n",mazzo[i].valore,mazzo[i].seme);
             }
             printf("%s scegli la posizione seconda carta/n",giocatoredue);
             scanf("%d",&j);
             if(mazzo[j].valore==0)
             {
                printf("la carta è gia stata scelta/n");
                continue;
             }
             else
             {
                printf("La carta scelta è %d, %s/n",mazzo[j].valore,mazzo[j].seme);
             }
             if(mazzo[i].valore==mazzo[j].valore)
             {
                printf("Giusto le due carte sono uguali! ricevi un punto/n");
                if(iniz==0)
                {
                   puntiprimogiocatore++;
                }
                else
                {
                   puntisecondogiocatore++;
                   mazzo[i].valore=0;
                   mazzo[j].valore=0;
                }
             }
             else
             {
                printf("Le due carte non sono uguali! Il tuo turno è finito.");
             }
             if(iniz==0)
             {
                iniz=1;
             }
             else
             {
                iniz=0;
             }
          }
          puntitotali=puntiprimogiocatore+puntisecondogiocatore;
       }while(puntitotali<20);
       system("PAUSE");   
       return 0;
    }
    void mischia_carte(Carta mazzo[],int n_carte,int qvmix)
    {
         int i,j,k;
         for(k=1;k<=qvmix*n_carte;k++)
         {
                                      i=rand()%n_carte;
                                      j=rand()%n_carte;
                                      scambiare_carte(mazzo,i,j);
                                      }
                                      }
                                     
                                     
                                     
                                     
                                     
    void scambiare_carte(Carta mazzo[],int i,int j)
    {
         
        Carta temp;
         temp=mazzo[i];
         mazzo[i]=mazzo[j];
         mazzo[j]=mazzo[i];
         }