Jump to content
  • 0
Thost

Jogo da Forca criação

Question

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--;
        }
    }
}

 

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

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;
}

 

  • +1 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By lotthaus
      Alguém poderia fazer essa atividade para eu ajudar um amigo ?

    • By theuz bergles
      QUERO CRIAR UM GAME, MAS NÃO TENHO CONHECIMENTO PARA TAL.
       
      Olá! A minha ideia é criar um jogo de terror, que tenha realmente uma pegada de medo no psicológico do jogador. Mas como eu disse no título, não possuo conhecimento para tal criação e estou buscando profissionais (podem ser amadores também) que queiram trabalhar nisso comigo. A seguir, estará a apresentação da minha ideia inicial: 
       
       
      •O jogo seria em uma igreja abandonada, onde seriam feitas perguntas, uma de cada vez, em alguma parte (porta, janela, parede, chão, teto...) de um cômodo aleatório do ambiente escolhido. Obs: Perguntas  Sempre vai ter um ponto de interrogação (“?”) ao final de cada pergunta feita pelo demônio. Obs: Respostas  no cômodo estaria escrito “A RESPOSTA É...” e as respostas estariam apresentadas em alternativas: “A), B), C) e D)” e a resposta certa deverá ser falada em voz alta, através do microfone ligado ao seu computador: “A RESPOSTA É A ALTERNATIVA D)”, por exemplo. Obs: As perguntas e respostas sempre vão seguir os padrões grifados com as aspas (“ ”). •Para que tenhamos mais interatividade, o jogador terá que dizer em voz alta, através do microfone conectado ao seu computador, as perguntas escritas pelo demônio, pois assim, o jogo irá entender que você visualizou a pergunta feita, irá processar e, em seguida, escrever a resposta da forma citada acima. E com a resposta (uma das alternativas apresentadas), você também terá que dizer em voz alta através do microfone conectado ao seu computador. •Lembrando que, como o personagem principal tem conhecimento em Latim, as perguntas podem aparecer no respectivo idioma. Porém, se isso acontecer, o demônio irá traduzir a pergunta para o seu idioma, falando em voz alta. (E isso está incluído como fenômeno paranormal) •O jogo terá um sistema de sanidade mental, que funcionaria como uma espécie de vida para o personagem, iniciando com 100%, e diminuindo ao longo do tempo. Caso você presencie alguma atividade paranormal, fique na escuridão por algum tempo, tenha alguma manifestação do tabuleiro Ouija ou responda alguma pergunta de forma incorreta, a perda de sanidade será maior, e se chegar a 0%, o demônio matará o personagem instatâneamente. •Quanto menos sanidade, mais fenômenos irão acontecer e, consequentemente, mais rápido chegará a 0. Para retardar essa ocorrência, estaremos implementando pílulas, que funcionarão como remédios para aumentar parte da sanidade, e diminuir, temporariamente, a perda precoce da mesma. Ainda assim, mesmo com esse retardo, teremos crucifixo e água benta, que vão ajudar no mantimento temporário da sanidade atual, mesmo que ocorram fenômenos naturais. Depois de algum tempo, o crucifixo quebrará e se tornará inútil, e a água benta terá efeito imediato, porém durará apenas algum tempo. •No início da Gameplay, o personagem começará com uma vela acesa (uma das velas que foram usadas no uso do tabuleiro Ouija) e terá que tomar cuidado para a vela não apagar, seja por causa da tempestade fora da Igreja, seja por causa dos fenômenos paranormais. •Caso a vela seja apagada, por quaisquer dos motivos acima, não se preocupe! Nós fornecemos um isqueiro e uma lanterna, que estão pela Igreja. Mas tome cuidado! Como o isqueiro funciona com gás e a cada uso parte do gás é consumido, o isqueiro tem a quantidade de usos limitado. E a lanterna, como funciona a pilhas, caso acabe as que já estão nela, você pode encontrar outras pelo caminho. Se não conseguir encontrar, bom, você já sabe o que lhe aguarda... •As luzes dos cômodos podem ser acesas, ou apagadas caso o demônio intervenha ou caso a tempestade rompa os cabos de energia. (Caso as luzes sejam religadas sozinhas ou caso você as consiga ligar, logo depois que elas foram desligadas, com certeza foi o demônio. Ou seja, pode ser considerado um fenômeno paranormal.) •Caso as perguntas sejam respondidas da maneira correta, mais um efeito será adicionado na trilha sonora, deixando-a mais apavorante e, consequentemente, deixando o jogador com mais medo. •Um sistema de “Conquistas” será adicionado, para que o jogador sempre jogue buscando obter todas elas. •Se o jogador responder até 3 perguntas de forma incorreta, ele perderá uma quantidade aleatória de sanidade a cada resposta errada, podendo chegar a 0 instantâneamente, até a terceira resposta dada, e, consequentemente, morrendo por este motivo. •Caso o jogador consiga se manter vivo até o final (se ele não morrer imediatamente no primeiro, segundo ou terceiro erro) ou responda de forma correta todas as perguntas feitas, o exorcismo no demônio é feito e ele consegue salvar seu amigo. •Em algumas perguntas específicas, você pode interagir com o tabuleiro Ouija para obter a resposta. Obs: Mas lembre-se que você perderá sanidade ao fazer isso. •Ao ver as perguntas e respostas escritas, sua sanidade também cairá, já que, se não é você quem está escrevendo-as, quem será? (considerado fenômeno sobrenatural.) •Não necessariamente, se você ouvir algum ruído do ambiente, significa que seja algum fenômeno. Pode ser consequência da tempestade no ambiente externo. (Portas fechando, janelas batendo, sino tocando, trovões.) Obs: Gritos, soluços, risadas, choros, batidas na porta, portas trancadas (não tem como uma igreja abandonada ter portas trancadas) são considerados fenômenos.
    • By Geralt96
      Bom dia. Alguém pode me dá uma ajuda pra desenvolver essa questão, por gentileza?

      Aqui está ela: https://projecteuler.net/problem=6

      A soma dos quadrados dos primeiros dez números naturais é: 1² + 2² + ... 10² = 385...
      O quadrado da soma dos dez primeiros números naturais é: (1+2+ ... 10)² = 55² = 3025...
      Portanto, a diferença entre a soma dos quadrados dos primeiros dez números naturais e o quadrado da soma é: 3025 - 385 = 2640.
      Encontre a diferença entre a soma dos quadrados dos primeiros cem números naturais e o quadrado da soma.
    • By Flaviaac
      Boa tarde pessoal,
      gostaria de pedir uma ajuda para criar um evento em um formulário HTML.
       

      Eu tenho um formulário em HTML e PHP,  e nele tem um campo do tipo select e um campo do tipo text(desabilitado).
      Gostaria que ao clicar no campo select e escolher qualquer opção da lista, automaticamente em seguida aparecesse dentro do campo text um valor respectivo a opção escolhida anteriormente.
       
      Exemplo:
      Tenho um campo select com tipos diferentes de materiais (vidro, papel, alumínio, etc.) e no campo text(desabilitado) terei a quantidade de anos que cada material demora a se decompor na natureza. O campo text inicialmente estará vazio, mas quando selecionar o material, aparecerá dentro deste text a quantidade de anos.
       
      obs.: Os valores do campo select e do campo text estão ambos na mesma tabela do banco de dados(MySQL), o campo select com valores string e o campo text com valores inteiros.
       
      Não sei se consegui explicar direito, mas acredito que terei que utilizar javascript para este evento, mas ainda não sei como.
      Alguém tem ideia de como eu poderia fazer isso ou alguma dica?
       
       
      Muito obrigada!!

       
    • By leonardorafaeldev
      Boa noite pessoal estou com um problema que o icone do meu site não aparece no mobile segue uma foto do problema o meu codigo esta assim
       
      <!-- icones -->   <link href="icones/favicon.ico" rel="icon">   <link href="icones/favicon.ico" rel="shortcut icon">    <link rel="apple-touch-icon" sizes="57x57" href="icones/apple-icon-57x57.png">   <link rel="apple-touch-icon" sizes="60x60" href="icones/apple-icon-60x60.png">   <link rel="apple-touch-icon" sizes="72x72" href="icones/apple-icon-72x72.png">   <link rel="apple-touch-icon" sizes="76x76" href="icones/apple-icon-76x76.png">   <link rel="apple-touch-icon" sizes="114x114" href="icones/apple-icon-114x114.png">   <link rel="apple-touch-icon" sizes="120x120" href="icones/apple-icon-120x120.png">   <link rel="apple-touch-icon" sizes="144x144" href="icones/apple-icon-144x144.png">   <link rel="apple-touch-icon" sizes="152x152" href="icones/apple-icon-152x152.png">   <link rel="apple-touch-icon" sizes="180x180" href="icones/apple-icon-180x180.png">   <link rel="icon" type="image/png" sizes="192x192"  href="icones/android-icon-192x192.png" >   <link rel="icon" type="image/png" sizes="36x36" href="icones/android-icon-36x36.png">   <link rel="icon" type="image/png" sizes="48x48" href="icones/android-icon-48x48.png">   <link rel="icon" type="image/png" sizes="96x96" href="icones/android-icon-96x96.png">   <link rel="icon" type="image/png" sizes="144x144" href="icones/android-icon-144x144.png">   <link rel="icon" type="image/png" sizes="72x72" href="icones/android-icon-72x72.png">   <link rel="icon" type="image/png" sizes="32x32" href="icones/favicon-32x32.png">   <link rel="icon" type="image/png" sizes="96x96" href="icones/favicon-96x96.png">   <link rel="icon" type="image/png" sizes="16x16" href="icones/favicon-16x16.png">   <link rel="manifest" href="icones/manifest.json">   <meta name="msapplication-TileColor" content="#ffffff">   <meta name="msapplication-TileImage" content="icones/ms-icon-144x144.png">   <meta name="theme-color" content="#ffffff">   <meta charset="utf-8">   <meta content="width=device-width, initial-scale=1.0" name="viewport">
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.