Jump to content
Fórum Script Brasil
  • 0

Jogo da forca


bortolotto11
 Share

Question

Bom galera, estou com um problema para resolver com esse jogo.

Quando digito a opcao um para jogar, ele corre direto para a parte de adivinhar as palavras o que eu posso fazer pra corrigir? e quando peco para voltar apos este erro ele tambem não volta.

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
int main ()
{
char tam_palavra,palavra[25],letra[25],lacuna[25]="_";
int vida=6,letra_errada,i,letras_acertadas=0;
int op;
char resp;
do
{
system("cls");
printf("\n\t\t\t\tJOGO DA FORCA\n\n\n\n\n\n\n");
printf("\n1-JOGAR");
printf("\n2-INSTRUCOES");
printf("\n3-AUTORES");
printf("\n4-SAIR \n\n\n\n");
printf("\nDIGITE UMA OPCAO\n");
scanf ("%d", &op);
if (op==1)
{
do
{system ("cls");
printf("\n Voce vai comecar a jogar");
printf("\n\nDigite a palavra para ser usada na forca:\n\n");
gets(palavra);
system("cls");
for(i=0;i<strlen(palavra);i++)
lacuna='-';
tam_palavra=strlen(palavra);
while(vida>0)
{
letra_errada=0;
printf("\n %s \n",lacuna);
printf("\n Digite uma Letra: ");
gets(letra);
for(i=0;i<strlen(palavra);i++)
{
if(letra[0]==palavra)
{
lacuna=palavra;
letras_acertadas++;
letra_errada++;
}
}
if(letra_errada==0) {
vida=vida-1;
if(vida==0) {
printf("\n\n GAME OVER!!!! VOCE FOI ENFORCADO!");
printf("\n A PALAVRA CORRETA ERA: %s",palavra);
break;
}
else
printf("\n ERROOOOU! RESTAM %d VIDA(S)",vida); }
else{
if(letras_acertadas==tam_palavra) {
printf("\n\n ACERTOOOU! VOCE GANHOU!");
printf("\n A PALAVRA CORRETA E: %s",palavra);
break;}
else {
printf("\n VOCE ACERTOU UMA LETRA!");
}
}
}
printf("\n\n");
system("pause");
printf ("\n Deseja voltar (s/n) ?");
scanf (" %s", &resp);
}while (resp=='n');
}
if (op==2)
{
do
{system ("cls");
printf("\n\t\t\t\tJOGO DA FORCA\n\n\n");
printf("O objetivo deste jogo e descobrir uma palavra adivinhando as letras que ela possui. A cada rodada, os jogadores");
printf(" irao simultaneamente escolher uma letra que suspeitem fazer parte da palavra. Caso a palavra contenha esta letra,");
printf(" sera mostrado em que posicao o posicoes ela esta. Entretanto, caso esta letra não exista na palavra, sera desenhada uma");
printf(" parte do corpo do boneco do jogador. Se todas as 6 partes corpo do boneco estiverem desenhadas, o jogador");
printf(" estara fora da partida\n\n\n");
printf ("\n Deseja voltar? (s/n)");
scanf (" %s", &resp);
}while (resp=='n');}
if (op==3)
{do
{
system ("cls");
printf("\n\t\t\t\tJxxxx\n\n");
printf("\n-xxxxxx\n");
printf("\n-Axxxx\n");
printf("\n-xxxxxx\n");
printf("\n-xxxxxxx\n");
printf("\n-xxxxxx\n");
printf("\n-16/06/2015\n");
printf("\n-xxxxxx\n");
printf("\n-xxxxxx\n");
printf("\n-xxxxx\n");
printf("\n-xxxx\n\n\n");
printf ("\n Deseja voltar? (s/n)");
scanf (" %s", &resp);
}while (resp=='n');}
}while(op==0);
return 0;
}
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Olá. Vou direto no ponto: Do modo como está seu código fica difícil alguém se animar a ajudar. 

Em C é altamente recomendável fazer o correto uso das chaves, para que seu código fique mais claro para quem olha p ele e tbém mais fácil de se entender.

Então, vou responder a sua 1ª pergunta, depois, se quiser q eu prossiga te ajudando poste novamente seu código, mas usando do modo adequado as chaves, ok?

É o seguinte. O motivo do 1º erro é q está sendo passado valores "sujos" para o comando de entrar com uma palavra.

Para resolver isso faz assim: Crie um ponteiro do tipo char desse modo no início do código:

char *limparBuffer;

Depois, faz assim:

printf("\nDIGITE UMA OPCAO\n");
scanf ("%d", &op);
scanf("%c", &limparBuffer); // essa linha é ignorada pelo compilador, serve para limpar o q chamamos de buffer de entrada

Depois, faz o mesmo nessa parte do código: ( não recomendo o uso do gets() para se ler uma String, já que o mesmo é considerado um comando perigoso e nem está mais sendo aceito nos compiladores atuais, use o fgets() ou mesmo o scanf() )

Dessa forma:

printf("\n\nDigite a palavra para ser usada na forca: ");
scanf("%s" palavra);
scanf("%c" &limparBuffer); // aqui novamente o nosso comando para limpar o buffer de estrada

Feito isso, se puder e quiser ajuda poste novamente seu código, mas dessa vez fazendo um bom uso das chaves, ok?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...