Ir para conteúdo
  • 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

  • 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por MateusOFCZ
      Olá, estou desenvolvendo um BOT utilizando java, javascript e node.js, gostaria de saber se tem como eu fazer um painel em java (arquivo executável) onde tem um campo de texto (Que é digitado um tema, exemplo "Brasil"), uma lista com 3 itens (Quem é, O que é e A história do(a), você iria selecionar, por exemplo no campo de texto você digitou "Brasil" e na lista você selecionaria "A história do(a)"...) como faço pra quando clicar no botão "Enviar" ele iria executar um comando em node.js adicionando as informações (Tema e Opção).

       


      Caso não tenha entendido posso tentar explicar de uma forma mais clara!
    • Por gustavopc123
      Meu site diyjogos fiz com html e css, e acho parece que está faltando alguma coisa, alguém poderia me auxiliar, minha dúvida é se da pra fazer um formulário de contato com html e css e que realmente funcione (Obs: Não tenho hospedagem é tudo com codigos, sem php)
       
      Alguem poderia me ajudar ?
       
      Da uma olhada no site por favor.
    • Por darkskull10
      Numa cidade as crianças costumam brincar com um jogo (de dois jogadores) onde:
      um jogador A define uma sequência de 10 letras usando: G, R e B (exemplo: G – G – G – R – B – R – B – B – B – R)
      um jogador B pode ler a sequência quantas vezes quiser
      o jogador B também pode dizer uma das letras e obter em quais posições a letra dada se encontra na sequência
      o jogador B também pode dar uma posição e saber qual letra ocupa a posição na sequência
      para finalizar, o jogador B deve dizer a sequência de letras, obtendo um ponto para cada acerto.
       
      Só consegui pensar nisso por enquanto.
       
      //identificar que letra ocupa esta posição na sequência:
      do{
      scanf(“%d”,&Posicao);
      Posicao=Posicao-1;}
      while ((Posicao<0)||(Posicao>9));
      printf(“%c”,Sequencia[Posicao]);
       
      //exibir sequencia
      for (Cont=0; Cont<=9; Cont++)
      printf(“%c”,Sequencia[Cont]);
       
      //exibir posições
      for (Cont=0; Cont<=9; Cont++)
      printf(“%d%c”,Cont+1,Sequencia[Cont]);
    • Por CelsoHyperion
      Pessoal boa tarde preciso de ajuda! Tenho dois arquivos 1 formulario e outro para envio para o email. já estou com site hospedado!
      Só que não envia o formulario pro email me ajudem pf
       
      1 - Arquivo (formulario)
       
       
      <?php if (!defined('FLUX_ROOT')) exit; ?>
      <div>
              <p style="color: black" font-weight: bold>
              <h3>DOAÇÕES:</h3>
                  <p>
      Doando você poderá adquirir o "VIP" e Cash para comprar visuais e itens para lher ajudar no Servidor e para isso, basta efetuar a doação com o metodo de <br>pagamento escolhido e depois
      confirmar os dados do pagamento no formulário de confirmação abaixo.<br />
          </p>
          <p>
          <b>Como funciona?</b>
          </p>
          <p>
      A cada R$ 1,00 você recebe o 1.000 ROP's (1k) para ser utilizado dentro da Loja de ROP's do jogo. 
      Exemplo: Se doar R$ 30,00 você receberá 30.000 ROP's (30k)
          </p>
          <p>
              <b>Como acessar a Loja de ROP's?</b>
          </p>
          <p>
      Para acessar a loja basta clicar no botão Loja ROP's que fica ao lado do Mini-Mapa. Lá você terá acesso a todos os itens que poderá adquirir, dentro da loja você<br> pode consultar seu saldo de ROP's no canto inferior esquerdo da tela. Boas compras!
          </p>
      <p>
          <center><h2>Confirmação de Doação</h2></center>
      <form action="?module=main&action=envio_form" method="post" name="form">
      <table width="500" heigth="500" border="1">
          <div>
              <label for="nick">Conta do Jogo(Login):</label>
              <input type="text" id="nick" name="usuario_nick" />
          </div>
          <p></p>
          <div>
              <label for="date">Data da Doação:</label>
              <input type="date" id="usuario_date" name="usuario_date" />
          </div>
          <p></p>
          <div>
              <label for="celular">Celular:</label>
              <input type="tel" id="usuario_celular" name="usuario_celular">
          </div>
          <p></p>
          <div>
              <label for="valor">Valor Doado:</label>
                 <input type="text" id="usuario_valor" name="usuario_valor"/>
          </div>
          <p></p>
          <div>
              <label for="metodo">Método de Pagamento:</label>
              <select id="usuario_metodo" name="usuario_metodo"> 
                  <option value="PayPal">PayPal</option>
                  <option value="Deposito">Depósito Bancário</option>
                  <option value="Transferencia">Transferencia Bancária</option>
              </select>
          </div>
          <p></p>
          <div>
              <label for="dadospag">Dados do Pagamento:<br></label>
              <textarea id="usuario_dadospag" rows="15" cols="70" name="usuario_dadospag"></textarea>
          </div>
          <p></p>
          <div><p>
          <b>PayPal:</b> Informar o nome da conta do Paypal e o e-mail que foi utilizado no pagamento.<br>
          <b>Depósito em Caixa Eletrônico/Atendente:</b> Informar o número do envelope/documento.<br>
          <b>Transferência:</b>Informar agência, número da conta e nome do titular.
          </div>
          <div class="button">
              <a href="/?module=main&amp;action=envio_form"></a>
              <button type="submit">Confirmar Doação</button>
          </div>
      </table>
      </form>
       
      </p>
        </p>
      </div>
       
      2 Envio para email:
       
      <?
       
      $destinatario = "eprorag@gmail.com";
      $usuario_nick = $_REQUEST['usuario_nick'];
      $usuario_date = $_REQUEST['usuario_date'];
      $usuario_celular = $_REQUEST['usuario_celular'];
      $usuario_valor = $_REQUEST['usuario_valor'];
      $usuario_metodo = $_REQUEST['usuario_metodo'];
      $usuario_dadospag = $_REQUEST['usuario_dadospag'];
       
      $body = "===================================" . "\n";
      $body = $body . "===================================" . "\n\n";
      $body = $body . "Nick: " . $usuario_nick . "\n";
      $body = $body . "Data Pagamento: " . $usuario_date . "\n";
      $body = $body . "Celular: " . $usuario_celular . "\n\n";
      $body = $body . "Valor Pago: " . $usuario_valor . "\n\n";
      $body = $body . "Metodo de Pagamento: " . $usuario_metodo . "\n\n";
      $body = $body . "Dados do Pagamento: " . $usuario_dadospag . "\n\n";
      $body = $body . "===================================" . "\n";

      mail($destinatario, $usuario_nick , $body, "From: $destinario\r\n");

      header("location:/?module=main&action=doa");
      ?>
       
    • Por MateusOFCZ
      Olá, estou desenvolvendo um sistema de publicidade para meu site, e quando entra em uma página, vamos chama-la de "Publicidade" ele mostra uma publicidade e depois de 10 segundos ele redireciona (OBS.: Essa página já está funcionando 100%), e temos outra página que vamos chama-la de "Início", bom... Quando você entrar na página "Início" ele irá na verdade, redirecionar o usuário para a página de Publicidade, porém, como faço para a pessoa não poder pular essa publicidade, como se fosse um camuflador de página, ou seja, se o usuário acessar a página ele irá para a página "imasters.com.br/publicidade", porém se ele alterar o link para "imasters.com.br/inicio" ele irá obrigar o usuário a ver a publicidade primeiro para depois leva-lo a página de "Inicio", caso isso seja complexo de fazer, teria alguma forma de esconder o nome da página (a parte do "/inicio" por exemplo), e deixar apenas o link, por exemplo, se eu ir para a página de publicidade irá aparecer apenas o link, neste caso "imasters.com.br", e não "imasters.com.br/publicidade", caso tenha alguma dúvida sobre o meu pedido pode perguntar, não mordo rs.

      Deis de já agradeço!
×

Informação importante

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