este programa esta dando erro de execuçao e nao sei o motivo segue abaixo o codigo comentado.
Código:
#include <stdio.h>#include <stdlib.h>
#include <time.h>
#define n 10
void geracor(char senha[4]);//funçao que gera as cores aleatorias.
int verifica(char **matriz,char vetor[4],int *cont);//funçao que recebe as cores inseridas pelo usuario, verifica se esta correto e imprime o resultado.
int main()
{
int opcao=0,i,cont=0,resul;
char **matriz, senha[4];
matriz=(char**) calloc(10,sizeof(char*));
for(i=1;i<10;i++)
{
matriz[i]=(char*) calloc(5,sizeof(char));
}
while(opcao!=1)//verifica se o usuario quer começar a jogar.
{
printf("jogar digite 1\n encerrar digite0\n ajuda digite 3\n");
scanf("%d", &opcao);
if(opcao==3)
printf("Senha é um famoso jogo de tabuleiro, inventado em '1971', em que o objetivo é descobrir a combinação secreta dos pinos coloridos.'1.' No início 'do' jogo, há combinação secreta de '4' pinos selecionados de um conjunto de '6' pinos de cores diferentes, exceto preto e branco; '2.' Uma jogada consiste em tentar adivinhar a combinação secreta,selecionando '4' pinos de cores diferentes e inserindo-os em uma das linhasde buracos 'do' tabuleiro;'3.' A cada jogada, são dadas dicas sobre a composição da combinação secreta;'4.' Se, dentro 'do' limite de '10' tentativas o jogador acertar a combinação, ojogo acaba com um vencedor;'5.' Caso contrário, o jogo termina com um perdedor e a combinação secreta érevelada.\n");
else if(opcao==0)
return 0;
}
geracor(senha);
for(i=0;i<4;i++)
printf("%c\n", senha[i]);
printf("Para a cor verde digite: v';'\n Para a cor roxa digite: r; \n");
for(i=0; i<n; i++)
{
printf("insira a senha separada por espaços.\n");
scanf("%c %c %c %c", &matriz[cont][0], &matriz[cont][1], &matriz[cont][2], &matriz[cont][3]);
scanf("%*c");
resul=verifica(matriz,senha,&cont);
cont++;
if(resul==1)
{
printf("voce venceu.\n");
return 0;
}
}
printf("voce perdeu.\n");//quando o usuario faz 10 tentativas o jogo e encerrado anunciando a derrota do usuario.
for(i=0;i<10;i++)
{
if(matriz[i]!=NULL)
free(matriz[i]);
}
if(matriz!=NULL)
free(matriz);
return 0;
}
void geracor(char *senha)
{
srand(time(NULL));
int aux=-1,i,j,cont;
senha[0]=(rand()%6);
for(i=0;i<4;i++)
{
cont=0;
aux=(rand()%6);
for(j=0;j<i;j++)
{
if(senha[j]==aux)
cont+=1;
}
if(cont==0)
senha[i]=aux;
else
i--;
}
for(i=0; i<4; i++)
{
switch(senha[i])
{
case 0: senha[i]='a';
break;
case 1: senha[i]='l';
break;
case 2: senha[i]='r';
break;
case 3: senha[i]='v';
break;
case 4: senha[i]='m';
break;
case 5: senha[i]='c';
break;
}
}
}
int verifica(char **matriz,char vetor[4],int *cont)
{
int i,j,x=0;
char vpb[4];
for (i=0;i<4;i++)
printf("%c", matriz[*cont][i]);
for(i=0;i<4;i++)//laço que verifica se o usuario acertou a cor e sua determinada posicao.
{
if(matriz[*cont][i]==vetor[i-1])
vpb[i]='p';
else
vpb[i]=' ';
}
for(i=0;i<4;i++)//laço que verifica se o usuario acertou a cor e nao a posiçao.
{
for(j=0;j<4;j++)
{
if(matriz[*cont][i]==vetor[j]&&vpb[i]==' ')
{
vpb[i]='b';
}
}
}
for(i=0;i<4;i++)
{
printf("%c", vpb[i]);
}
for(i=0;i<4;i++)
{
if(vpb[i]=='p')
x++;
}
if(x==4)
return 1;
return 2;
}