[c] gioco delle coppie di carte

di il
8 risposte

[c] gioco delle coppie di carte

Salve a tutti è da un po che ho iniziato a studiare c e arrivato a questo esercizio mi sono bloccato non riesco ad andare avanti
#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 struct 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()%1;
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;
                                  scambia_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];
     }
     
probabilmente gli errori saranno macroscopici lo so.

questi gli errori:

In function `main':
145 syntax error before "void"
72 confused by earlier errors, bailing out

8 Risposte

  • Re: [c] gioco delle coppie di carte

    Codice corretto.
    
    #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;
    }
    
    Fai attenzione ai controlli dentro gli if. Avevi messo troppe volte if(variabile = qualcosa) invece che if(variabile == qualcosa).
  • Re: [c] gioco delle coppie di carte

    Bene lo ho corretto solo che ora mi va il programma in crash qualuno saprebbe dirmi il perche?

    http://www.mediafire.com/?71vd98dc621ahr questo è il link del file c
  • Re: [c] gioco delle coppie di carte

    Cosa ti dice il debugger?
  • Re: [c] gioco delle coppie di carte

    Nulla il programma parte normalmente inserisco il nome dei due giocatori quando arriva il momento di mischiare le carte mi si chiude tutto e mi da errore
  • Re: [c] gioco delle coppie di carte

    Lancia il programma da dentro lo strumento di sviluppo (visual studio, dev c++ o che ne so) quando si pianta il debugger ti dice dove e perche si è fermato.
  • Re: [c] gioco delle coppie di carte

    Ora mi sento veramente ignorante...in pratica devo fare il debug (f8) e dirti cosa mi esce?
    se è cosi mi dice il programma ha causato una violazione di accesso(errore di segmentazione)
  • Re: [c] gioco delle coppie di carte

    Bravo e dove? che ti devo dare una monettina per ogni frase che metti . Ti dice anche il posto dove si è fermato. se invece impari a fare il debug passo x passo riesci a capirlo tu dov'è che si ferma.
  • Re: [c] gioco delle coppie di carte

    Ahahah okok se ho capito bene il problema è nella function che mischia le carte perche arrivato a quel punto scelgo quante volte mischiare e mi si blocca tutto

    secondo te son fate bene le function?
    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];
         }
         
    
    cioe forse son sbagliate visto che sono delle procedure magari dovevo usare puntatori e anche il parametro di output non so
Devi accedere o registrarti per scrivere nel forum
8 risposte