Ragazzi secondo la traccia:
Sviluppare un algoritmo per la simulazione del gioco delle coppie di carte tra due
giocatori identificati dai loro nomi. Inizialmente “mischiare” un mazzo di carte
napoletane. L’algoritmo per mischiare le carte si basa sull’idea di scambiare
effettivamente a coppie le carte del mazzo; una variabile in input permette di indicare
quante volte si devono effettuare gli scambi.Viene scelto casualmente quale dei due giocatori deve iniziare il gioco. Vengono“scoperte” due carte la quale posizione è indicata dal primo giocatore. Se le due carte hanno lo stesso valore il giocatore si aggiudica un punto e le due carte vengono scoperte. Il giocatore continua finchè non sbaglia (non trova due carte uguali) e il turno passa all’altro giocatore. Ad ogni turno il giocatore ha a disposizione l’elenco delle carte coperte e quellescoperte. Il gioco termina quando si scoprono tutte le carte. Il giocatore che ha
totalizzato più punti vince la partita. Implementare il programma ed effettuare almeno 3 test.
Usare la function rand(), il cui prototipo è in <stdlib.h>, per generare a ogni
passo gli indici delle due carte da scambiare. Nei test, partire sempre dal mazzo
“ordinato” e poi visualizzare il mazzo “mischiato”.
Si ricorda che, se numero_casuale è dichiarata di tipo int, allora la chiamata
numero_casuale=rand()%(n+1); genera un numero casuale intero
(distribuzione uniforme) nell’insieme (0,1,2,..n).
Ho sviluppato il programma e me lo compila pure soltanto che quando lo eseguo, quando mi chiede di mischiare le carte si blocca,sapreste trovarmi l'errore???
#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?\n");
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);
while(mazzo[i].valore==0)
{
printf("la carta è gia stata scelta\n");
scanf("%d",&i);
}
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);
while(mazzo[j].valore==0)
{
printf("la carta è gia stata scelta\n");
scanf("%d",&j);
}
}
else
{
printf("%s scegli la posizione della prima carta\n",giocatoredue);
scanf("%d",&i);
while(mazzo[i].valore==0)
{
printf("la carta è gia stata scelta\n");
scanf("%d",&i);
}
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);
while(mazzo[j].valore==0)
{
printf("la carta è gia stata scelta\n");
scanf("%d",&j);
}
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];
}