Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
Thost

Jogo da Forca criação

Pergunta

Boa noite aos colegas programadores de plantão:

 

O professor desafiou a sala a fazer um jogo da forca e durante alguns dias programando cheguei a este formato abaixo, que ainda falta alguns detalhes a serem tratados como quando errar uma letra seja descontado da nVida que são 7 no total, ou quando acertar a palavra que o jogo mostre que foi acertado do tipo: Parabéns a palavra secreta era: --- uva! e pergunte se jogador deseja sair ou jogar novamente, caso seja jogar novamente que o jogo recomece. Não precisa ter o boneco ,apenas as palavras e caso esteja errado tire uma chance.

Outro erro que até o momento não consegui decifrar foi que após digitar dica, jogo começa e exibe as informações de vida,tamanho da palavra e dica, porém ao informar letra certa ou errada a dica não é mais exibida. Se alguém souber e puder ajudar serei grato!!

 

Linguagem C:


 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void MenuInfo (int tamanhoPalavra,char InfoDica[100],int nChances)
{
    printf("\n=======================================================================================================\n\n");
    printf("\t\tVAMOS COMECAR!!\n");
    printf("A palavra Secreta tem %d letras\n",tamanhoPalavra);
    printf("\n\nDica da Palavra Secreta: %s\n",InfoDica,strupr(InfoDica));//comando strupr transforma letras digitas em maiusculas, ao exibir dica
    printf("Numero de tentativas %d\n",nChances);
}
int main()
{
    int nVida=7,cont,tamPalavra; //variaveis inteiras que contam vida,tracos
    char palavra[15],dica[100],letra='0';//variaveis onde são guardados a palvra secreta dica e qntidade de letras para preencher as linhas
    printf("========================================== JOGO DA FORCA ================================================\n\n");
    printf("\n@ Digite a Palavra Secreta.\n");//informação ao usuário
    printf("@ A palavra deve conter, no maximo 15 caracteres.\n");
    printf("@ Somente serao aceitos caracteres minusculos\n\n");
    scanf("\n%s",&palavra);//variavel que recebe a palavra digitada pelo jogador
    fflush(stdin);//limpeza de memoria
    printf("\n\nDigite a Dica: ");
    fgets(dica,100,stdin);//ler dica com espacos
    fflush(stdin);//limpeza de memoria
    system("cls");//comando para limpar a tela
    tamPalavra=strlen(palavra); //quantidade caracteres que tem a palavra digitada atribuido ao tamPalavra
    MenuInfo (tamPalavra,dica,nVida);//menu void para retornar tamanho da palvra, dicas,numero de vidas
    char linha[tamPalavra+1];//variavel linha do tipo char para receber o numero de linhas com + 1
    for(cont=0; cont<tamPalavra; cont++)//laco de repetição para executar enqnto tracos menor que tamanho da palavra.
    {
        linha[cont]= '_';
        fflush(stdin);//limpeza de memoria
    }
    linha[tamPalavra+1] = '\0';//linha recebe tamanho da palavra e preenche com tracinhos até encontrar o \0 que marca o fim.
    printf("%s\n",linha);
    while (nVida!=0)//repete enqnto as chances forem diferentes de 0
    {
        int existe=0;// variavel que no laco for valida se letra existe na palavra
        printf("\nDigite uma letra: ");//informação ao usuario para informar a letra da palavra secreta
        fflush(stdin);//limpeza de memoria
        scanf("%s",&letra);//leitura da letra informada
        //system("cls");
        for(cont=0; cont<tamPalavra; cont++)//laco de repetição para executar enqnto tracos menor que tamanho da palavra.
        {
            if (palavra[cont]==letra)
            {
                linha[cont]=letra;//atribuição da qntidade de letras a linha//se letras (3) linha(3)
                existe=1;
            }
        }
        MenuInfo (tamPalavra,dica,nVida);//menu void para retornar tamanho da palvra, dicas,numero de vida
        printf("%s",linha);//tracos
        if (existe == 0 && letra != palavra)
        {
            nVida--;
        }
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

2 respostas a esta questão

Recommended Posts

Primeira coisa: não se usa fflush na entrada padrão.
 

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define TAMPALAVRA 15
#define TAMDICA 100

void MenuInfo (const int tamanhoPalavra, char * InfoDica, int nChances)
{
    printf("\n=======================================================================================================\n\n");
    printf("A palavra Secreta tem %d letras\n",tamanhoPalavra);
    printf("\n\nDica da Palavra Secreta: %s\n",InfoDica);
    printf("Numero de tentativas %d\n",nChances);
}


void mascararPalavra (char * palavra, const int tamanhoRealPalavra) {
    for(int i = 0; i<tamanhoRealPalavra; i++) {
        palavra[i] = '_';
    }
}

int verificarAcertos(char letra, char * mascaraPalavra, char * palavra, const int tamanhoRealPalavra) {
    int contagemAcertos = 0;
    for(int i = 0; i < tamanhoRealPalavra; i++) {
        if (tolower(palavra[i]) == tolower(letra)) {
            mascaraPalavra[i] = tolower(letra);
            contagemAcertos++;
        }
    }
    
    return contagemAcertos;
}

int acertouPalavra(char * mascaraPalavra, const int tamanhoRealPalavra) {
    int i;
    for(i=0; i<tamanhoRealPalavra && mascaraPalavra[i] != '_'; i++);
    return (i >= tamanhoRealPalavra);
}

int main()
{
    int nVida = 7;
    int cont;
    
    char palavra[TAMPALAVRA], dica[TAMDICA];
    char letra;
    
    printf("========================================== JOGO DA FORCA ================================================\n\n");
    printf("\n@ Digite a Palavra Secreta.\n");
    printf("@ A palavra deve conter, no maximo 15 caracteres.\n");
    printf("@ Somente serao aceitos caracteres minusculos\n\n");
    fgets(palavra, TAMPALAVRA, stdin);
    (*strchr(palavra, '\n')) = '\0';
    
    printf("\n\nDigite a Dica: ");
    fgets(dica, TAMDICA, stdin);
    
    
    const int tamanhoRealPalavra = strlen(palavra);
    char mascaraPalavra[tamanhoRealPalavra];
    int acertos;
    
    mascararPalavra(mascaraPalavra, tamanhoRealPalavra);
    
    while(nVida && !acertouPalavra(mascaraPalavra, tamanhoRealPalavra)) {
        MenuInfo(tamanhoRealPalavra, dica, nVida);
        for(int i=0; i < tamanhoRealPalavra; i++) {
            printf("%c%c", mascaraPalavra[i], (i < tamanhoRealPalavra - 1)? ' ' :'\n');
        }
        printf("Informe uma letra: ");
        scanf("%c%*c", &letra);
        acertos = verificarAcertos(letra, mascaraPalavra, palavra, tamanhoRealPalavra);
        if(acertos == 0) {
            printf("Não existe essa letra.\n");
            nVida--;
        }
    }
    
    if (!nVida) {
        puts("você perdeu");
    } else {
        printf("%s\n", palavra);
    }
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Descomplica Consultoria
      Oi Pessoal, preciso de ajuda com um portfolio academico
    • Por 4Unknow
      Bom dia comunidade Imasters.

      Venho aqui tratar de um problema dúvida que estou tendo com um layout que estou tentando usar o formulário php dele.
      Quando clico em enviar ele me enviar para um arquivo .php  (assets/vendor/simple-forms/sendmail.php)

      Ele não envia o e-mail, acredito que deveria aparecer uma mensagem que o contato foi enviado corretamente.
      Vou deixar os arquivos aqui em anexo quem puder me ajudar nessa, ficaria muito grato.
       
      Link Website (wetransfer.com)
    • Por Fernando Rafael
      Bom dia, alguém poderia me ajudar com esse problema? 
       
      Estou fazendo um aplicativo bem simples em que sua única função será criar uma pasta no celular (em local acessível pelo gerenciador de arquivos do usuário), e posteriormente copiar arquivos de outro local ou rede e colocar nesta pasta.
       
      Fiz algumas pesquisas, mas por incrível que pareça não encontrei algo que tenha funcionando. Também tenho dúvidas sobre qual seria o equivalente ao "C:/" do Android.
    • Por Dcdbbvb
      Faça um código que deverá ter uma matriz de qualquer tamanho(Você define o tamanho) no qual o usuário irá digitar os números que serão armazenados na matriz. Construa uma função que deverá somar todos os números digitados. No final o programa mostrará a matriz e o valor total da somatória.
       
      por favorrrr alguém me ajuda
    • Por lotthaus
      Alguém poderia fazer essa atividade para eu ajudar um amigo ?

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.