Galera, esse é um script de um jogo da forca com dois jogadores na linguagem C. Porém eu estou com um pequeno problema: o Jogador 2 tem 5 chances para acertar a palavra proposta pelo Jogador 1, porém o programa só está rodando 4 chances. Gostaria de saber se alguém pode identificar o erro e, se possível, me indicar uma solução. Desde já agradeço <3
int main(){
char palavra[50], jogador1[50], jogador2[50], espaco[50]="-", erros[50]=" ", tamanho, tamanho2, letra[50], tentativa[50];
int chances=5, caractere, caractere2=0, acertos=0, retorna;
printf("Antes de começarmos, pedimos para que, caso não tenha lido as\n"
"instruções na seção 'Como jogar', feche o programa, leia-as e,\n"
"em seguida, volte para modo multiplayer. Caso já tenha lido, de-\n"
"sejamos um bom jogo aos jogadores!\n\n"
"Tecle 'v' para continuar...");
while(getchar() != 'v');
system("clear");
printf("Digite o seu nome, Jogador 1: ");
scanf("%s",&jogador1);
printf("Digite o seu nome, Jogador 2: ");
scanf("%s",&jogador2);
system("clear");
printf("Sejam bem vindos ao Jogo da Forca, %s e %s!!\n"
"\nTecle 'v' para continuar...",jogador1, jogador2);
while(getchar() != 'v');
system("clear");
printf("%s, digite a palavra para o/a %s acertar: ",jogador1, jogador2);
scanf("%s",&palavra);
system("clear");
///----------------------------------------------------------------------------------------------------------------------------------------------------
///----------A PARTIR DAQUI COMEÇA O CÓDIGO LÓGICO. OS CÓDIGOS ACIMA ERAM APENAS AS APRESENTAÇÕES E AS PRIMEIRAS ENTRADAS---------------------------------------------
///----------------------------------------------------------------------------------------------------------------------------------------------
///----------------------------------------------------------------------------------------------------------------------------------------------
///A FUNÇÃO STRLEN() É A RESPONSÁVEL PELOS TESTES PARA VER SE A LETRA DIGITADA PELO JOGADOR 2 ESTÁ NO VETOR 'PALAVRA'.
///CRIAMOS UMA VARIÁVEL 'TAMANHO' E IGUALAMOS ELA AO STRLEN(PALAVRA), ASSIM, OS TESTES SÓ IRÃO TERMINAR QUANDO A ÚLTIMA
///LETRA FOR TESTADA E ENQUANTO TODAS NÃO FOREM ACERTADAS
///-----------------------------------------------------------------------------------------------------------------------------------------------------
///AQUI COMEÇAMOS O LAÇO WHILE QUE VAI ATÉ O FINAL DO PROGRAMA. NO CASO, ELE É CONTROLADO PELO NÚMERO DE CHANCES QUE O JOGADOR 2
///AINDA TEM PARA ACERTAR A PALAVRA
///O PRIMEIRO PRINTF IMPRIME O VETOR 'ESPACO', CORRESPONDENTE AO NÚMERO DE LETRAS DIGITADAS PELO JOGADOR 1
///O SEGUNDO PRINTF PEDE PARA QUE O JOGADOR 2 DIGITE UMA LETRA, QUE POR SUA VEZ SERÁ TRABALHADA DENTRO DO LAÇO WHILE
///O TERCEIRO PRINTF É UMA ESPÉCIE DE VETOR, QUE POR SUA VEZ GUARDA E IMPRIME AS LETRAS INCORRETAS DIGITADAS PELO JOGADOR 2
///------------------------------------------------------------------------------------------------------------------------------------------------------
///ASSIM COMO NO PRIMEIRO FOR, NESTE ESTAMOS COMPARANDO A LETRA DIGITADA PELO JOGADOR 2 COM AS LETRAS PRESENTES NO VETOR PALAVRA, PORÉM
///CASO A LETRA ESTEJA DENTRO DO VETOR 'PALAVRA', ELA IRÁ SE ENCAIXAR NO VETOR 'ESPACO'.
///FIZEMOS COM QUE A VARIAVEL 'RETORNA' AUMENTE PARA QUE ASSIM, ELA não DIMINUA NO PROXIMO LAÇO
///-------------------------------------------------------------------------------------------------------------------------------------------------------
///--------------------------O IF A SEGUIR SO SERA REALIZADO CASO O PLAYER 2 ERRE A LETRA--------------------------------------------------------
///NESTE CASO, CASO O JOGADOR 1 ERRE A LETRA, A VARIAVEL 'CHANCES' IRÁ DIMINUIR E, CASO AINDA TENHA CHANCES, A LETRA DIGITADA
///VAI PARA O VETOR 'ERROS', CASO CONTRÁRIO ELE AINDA TERÁ UMA ÚLTIMA CHANCE DE ACERTAR A PALAVRA POR COMPLETO
if(retorna==0 || (chances==5 || chances==4 || chances==3 || chances==2 || chances==1)){
chances--;
if(chances==0){
printf("\n%s, suas chances acabaram, mas agora você tem a chance\n"
"de acertar a palavra por completo, digite-a aqui: ",jogador2);
scanf("%s",&tentativa);
tamanho2 = strlen(tentativa);///AQUI CRIAMOS A VARIÁVEL 'TAMANHO2' PARA FAZER UM PONTE COM A PALAVRA ESCOLHIDA E A
///TENTATIVA DE ACERTO POR PARTE DO JOGADOR 2
if(tamanho2==tamanho){
printf("\n%s, VOCÊ ACERTOU A PALAVRA!! VOCÊ VENCEU A RODADA!!!\n",jogador2);
printf("\nA palavra era: %s\n",palavra);
break;
}
else{
printf("\n\n%s, você errou a palavra. %s, VOCÊ VENCEU A RODADA!!!\n",jogador2, jogador1);
printf("\nA palavra correta era: %s\n",palavra);
break;
}
}
///---------------------O IF ABAIXO FOI FEITO PARA GUARDAR AS LETRAS JÁ DIGITADAS PELO JOGADOR 2--------------------------------------------------
///NO CASO ABAIXO, CASO AS LETRAS DIGITADAS E ACERTADAS FOREM DO MESMO TAMANHO QUE A VARIAVEL 'TAMANHO', IGUALADA À STRING 'PALAVRA'
///DIGITADA PELO JOGADOR 1, O PROGRAMA ACABA E IMPRIME O PRINTF ABAIXO
if(acertos==tamanho){
printf("PARABÉNS, %s, VOCÊ ACERTOU A PALAVRA. VOCÊ VENCEU A RODADA!!!\n", jogador2);
printf("\nA palavra era: %s\n",palavra);
break;
}
system("clear");
}
///----------------------------------------------AQUI ACABA O LAÇO WHILE-------------------------------------------------------------------------------------
Pergunta
jpivieira
Galera, esse é um script de um jogo da forca com dois jogadores na linguagem C. Porém eu estou com um pequeno problema: o Jogador 2 tem 5 chances para acertar a palavra proposta pelo Jogador 1, porém o programa só está rodando 4 chances. Gostaria de saber se alguém pode identificar o erro e, se possível, me indicar uma solução. Desde já agradeço <3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(){
char palavra[50], jogador1[50], jogador2[50], espaco[50]="-", erros[50]=" ", tamanho, tamanho2, letra[50], tentativa[50];
int chances=5, caractere, caractere2=0, acertos=0, retorna;
printf("Antes de começarmos, pedimos para que, caso não tenha lido as\n"
"instruções na seção 'Como jogar', feche o programa, leia-as e,\n"
"em seguida, volte para modo multiplayer. Caso já tenha lido, de-\n"
"sejamos um bom jogo aos jogadores!\n\n"
"Tecle 'v' para continuar...");
while(getchar() != 'v');
system("clear");
printf("Digite o seu nome, Jogador 1: ");
scanf("%s",&jogador1);
printf("Digite o seu nome, Jogador 2: ");
scanf("%s",&jogador2);
system("clear");
printf("Sejam bem vindos ao Jogo da Forca, %s e %s!!\n"
"\nTecle 'v' para continuar...",jogador1, jogador2);
while(getchar() != 'v');
system("clear");
printf("%s, digite a palavra para o/a %s acertar: ",jogador1, jogador2);
scanf("%s",&palavra);
system("clear");
///----------------------------------------------------------------------------------------------------------------------------------------------------
///----------A PARTIR DAQUI COMEÇA O CÓDIGO LÓGICO. OS CÓDIGOS ACIMA ERAM APENAS AS APRESENTAÇÕES E AS PRIMEIRAS ENTRADAS---------------------------------------------
///----------------------------------------------------------------------------------------------------------------------------------------------
///----------------------------------------------------------------------------------------------------------------------------------------------
///A FUNÇÃO STRLEN() É A RESPONSÁVEL PELOS TESTES PARA VER SE A LETRA DIGITADA PELO JOGADOR 2 ESTÁ NO VETOR 'PALAVRA'.
///CRIAMOS UMA VARIÁVEL 'TAMANHO' E IGUALAMOS ELA AO STRLEN(PALAVRA), ASSIM, OS TESTES SÓ IRÃO TERMINAR QUANDO A ÚLTIMA
///LETRA FOR TESTADA E ENQUANTO TODAS NÃO FOREM ACERTADAS
for(caractere=0; caractere<strlen(palavra); caractere++)
espaco[caractere] = '-';
tamanho = strlen(palavra);
///-----------------------------------------------------------------------------------------------------------------------------------------------------
///AQUI COMEÇAMOS O LAÇO WHILE QUE VAI ATÉ O FINAL DO PROGRAMA. NO CASO, ELE É CONTROLADO PELO NÚMERO DE CHANCES QUE O JOGADOR 2
///AINDA TEM PARA ACERTAR A PALAVRA
///O PRIMEIRO PRINTF IMPRIME O VETOR 'ESPACO', CORRESPONDENTE AO NÚMERO DE LETRAS DIGITADAS PELO JOGADOR 1
///O SEGUNDO PRINTF PEDE PARA QUE O JOGADOR 2 DIGITE UMA LETRA, QUE POR SUA VEZ SERÁ TRABALHADA DENTRO DO LAÇO WHILE
///O TERCEIRO PRINTF É UMA ESPÉCIE DE VETOR, QUE POR SUA VEZ GUARDA E IMPRIME AS LETRAS INCORRETAS DIGITADAS PELO JOGADOR 2
while(chances>0){
retorna=0;
printf("\n\tAinda restam: %d chances",chances);
if(chances<0){
system("clear");
printf("\n\tSuas chances acabaram");
}
printf("\n\tLetras digitadas: %s\n",erros);
printf("\n%s\n",espaco);
printf("%s, digite uma letra: ",jogador2);
scanf("%s",&letra);
///------------------------------------------------------------------------------------------------------------------------------------------------------
///ASSIM COMO NO PRIMEIRO FOR, NESTE ESTAMOS COMPARANDO A LETRA DIGITADA PELO JOGADOR 2 COM AS LETRAS PRESENTES NO VETOR PALAVRA, PORÉM
///CASO A LETRA ESTEJA DENTRO DO VETOR 'PALAVRA', ELA IRÁ SE ENCAIXAR NO VETOR 'ESPACO'.
///FIZEMOS COM QUE A VARIAVEL 'RETORNA' AUMENTE PARA QUE ASSIM, ELA não DIMINUA NO PROXIMO LAÇO
for(caractere=0; caractere<strlen(palavra); caractere++){
if(letra[0]==palavra[caractere]){
espaco[caractere] = palavra[caractere];
retorna++;
acertos++;
}
}
///-------------------------------------------------------------------------------------------------------------------------------------------------------
///--------------------------O IF A SEGUIR SO SERA REALIZADO CASO O PLAYER 2 ERRE A LETRA--------------------------------------------------------
///NESTE CASO, CASO O JOGADOR 1 ERRE A LETRA, A VARIAVEL 'CHANCES' IRÁ DIMINUIR E, CASO AINDA TENHA CHANCES, A LETRA DIGITADA
///VAI PARA O VETOR 'ERROS', CASO CONTRÁRIO ELE AINDA TERÁ UMA ÚLTIMA CHANCE DE ACERTAR A PALAVRA POR COMPLETO
if(retorna==0 || (chances==5 || chances==4 || chances==3 || chances==2 || chances==1)){
chances--;
if(chances==0){
printf("\n%s, suas chances acabaram, mas agora você tem a chance\n"
"de acertar a palavra por completo, digite-a aqui: ",jogador2);
scanf("%s",&tentativa);
tamanho2 = strlen(tentativa);///AQUI CRIAMOS A VARIÁVEL 'TAMANHO2' PARA FAZER UM PONTE COM A PALAVRA ESCOLHIDA E A
///TENTATIVA DE ACERTO POR PARTE DO JOGADOR 2
if(tamanho2==tamanho){
printf("\n%s, VOCÊ ACERTOU A PALAVRA!! VOCÊ VENCEU A RODADA!!!\n",jogador2);
printf("\nA palavra era: %s\n",palavra);
break;
}
else{
printf("\n\n%s, você errou a palavra. %s, VOCÊ VENCEU A RODADA!!!\n",jogador2, jogador1);
printf("\nA palavra correta era: %s\n",palavra);
break;
}
}
///---------------------O IF ABAIXO FOI FEITO PARA GUARDAR AS LETRAS JÁ DIGITADAS PELO JOGADOR 2--------------------------------------------------
else{
erros[caractere2] = letra[0];
caractere2++;
}
}
///NO CASO ABAIXO, CASO AS LETRAS DIGITADAS E ACERTADAS FOREM DO MESMO TAMANHO QUE A VARIAVEL 'TAMANHO', IGUALADA À STRING 'PALAVRA'
///DIGITADA PELO JOGADOR 1, O PROGRAMA ACABA E IMPRIME O PRINTF ABAIXO
if(acertos==tamanho){
printf("PARABÉNS, %s, VOCÊ ACERTOU A PALAVRA. VOCÊ VENCEU A RODADA!!!\n", jogador2);
printf("\nA palavra era: %s\n",palavra);
break;
}
system("clear");
}
///----------------------------------------------AQUI ACABA O LAÇO WHILE-------------------------------------------------------------------------------------
return (0);
Editado por jpivieira}
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.