Jump to content
Marcosdev

(Duvidas) Jogo da Forca em C++

Recommended Posts

Estou começando na programação e tenho algumas dúvidas sobre esse código do jogo da forca:

 

#include <iostream>
#include <stdlib.h>

using namespace std;

 

int main() {
    char entrada[21]; //Palavra secreta
    char letra[1]; //Letra que a pessoa digitou
    char letras[30]; //Letras
    char secreta[21]; //A letra certa e sua posição
    int tam; //O tamanho da palavra vai ser igual a ENTRADA
    int i; //(indice) Necessario pq vai usar array
    int chances; // Quando acabar elas acaba o jogo
    int acertos; // O numero de acertos equivale ao TAM
    bool verificacao; // Verifica se a pessoa digitou uma letra certa ou errada
    string dica;

    chances=6;
    tam=0;
    i=0;
    verificacao=false;
    acertos=0;


    cout << "O que seu adversario vai adivinhar? " << "\n";
    cin >> entrada;
//comando limpar tela
    system("cls");


    cout << "Dica: ";
    cout << dica;
    cin >> dica;

// O indice vai percorrer ENTRADA até o /0 (enter) pra verificar se tá certo e a posição
//Char de arrays devem sempre terminar em /0
    while(entrada != '\0') {
        i++; // O i vai percorrer a "entrada" de um por um,e que ainda não é o /0
        tam++; // Cada palavra certa vai adicionar +1 em TAM, desde que i não seja o enter
    }

//Vou preencher a "entrada" com asteristicos e cada palavra certa vai ser -1 asteristico
    for(i=0 ; i<21 ; i++) {
         //Enquanto i for menor que 21, i de secreta vai aparecer com *
    }

//Enquanto o jogador tiver chances e acertos diferente de tam, irá aparecer as chances e palavras acertadas na tela
inicio:
    while((chances > 0)&&(acertos < tam)){
        cout << "Chances Restantes: " << chances << "\n";
        cout << "Palavra Secreta: ";
        for(i=0 ; i<tam ; i++) {
            cout << secreta;
        }
//O jogador vai digitar
        cout << "\n\n" << "Digite uma letra: ";
        cin >> letra[0]; //Armazenar na posição 0

        // Se já tiver usado a letra, goto volta pro o inico
        for(i=0 ; i<tam ; i++){
            if(letras == letra[0]) {
                system("cls");
                cout << "\nLetra ja usada! \n";
                goto inicio;
            } else {
                letras=letra[0];
            }
        }

        for(i=0 ; i<tam ; i++) {
            if(entrada==letra[0]) {
                verificacao=true;
                // A letra dá posição vai ser copiada para secreta se for certa
                secreta=entrada;
                acertos++; // incrementa o total de acertos
            }
        }
//Se acerto for igual a falso "not acerto = !acerto" diminui o numero de chances
        if(!verificacao) {
            chances--;
        }
        verificacao=false;
        system("cls");

        if(verificacao=false) {
            system("cls");
            cout << letra[0];
        }
    }
    
    if(acertos==tam) {
        cout << "O jogador ganhou! ";
    } else {
        cout << "O jogador perdeu! ";
    }

    system("pause");
    return 0;
}

Share this post


Link to post
Share on other sites

1. Por que é necessário criar dois vetores para a palavra que vai ser adivinhada (entrada, secreta )?

2. Tentei remover for(i=0 ; i<21 ; i++), e tentei criar só um "for" assim:

 for(i=0 ; i<tam ; i++) {
        secreta='*'
        cout << secreta;  }

mas dessa forma quando acerta uma letra ele não troca o asterisco pela letra que acertou, por que?

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 flipmartinz13
      Alguém pode me ajudar nessa questão de C++? não estou conseguindo construir o algorítmo corretamente.

      5.92)    Faça um algoritmo que leia a matrícula, nome, sexo e três notas dos alunos de uma escola e obtenha os seguintes resultados:
      a) A matrícula da aluna que obteve a maior média.
      b) A matrícula do aluno que obteve a menor média.
      c) O percentual de mulheres na turma.
      d) Quantos alunos foram aprovados, independente do sexo.
      e) O percentual de alunas aprovadas.
      Obs.: o flag é uma matrícula igual a 0 (zero).
    • By flipmartinz13
      Estou tentando fazer esse exercício de introdução a programação em C++, e estou tendo dificuldades para criar os algoritmos. Alguém poderia me ajudar?


      Uma agência de turismo quer fazer um levantamento das praias da cidade para um programação turística de verão, sabendo-se que cada praia tem um nome e uma distância (em Km) do hotel. Criar um algoritmo que forneça os seguintes dados:
      18

       Porcentagem de turistas nas praias próprias do hotel
       A praia mais adiante
       Nome e distancia das praias não-próprias com distancia do hotel maior que 10 km.
      O algoritmo acaba quando se digita @ para nome da praia.
    • By thekingowl
      Mala Vermelha
       
      Depois de quase dois anos de desenvolvimento, tive o prazer de ter meu jogo finalmente lançado na Play Store. Ele foi desenvolvido em uma plataforma para jogos browser, chamada Twine. Com algumas linhas de código em Java para adequar ao Mobile e convertido através do PhoneGap, consegui fazer a versão mobile para Android.
       
      Em "Mala Vermelha" você viverá a história da Policial Muriel. Entendiada na cidade pequena, Muriel tem sua vida alterada quando uma mala vermelha aparece na meio da cidade. É o início da aventura de Muriel, tentando capturar um assassino, antes que ele termine seu plano. Você tomará as decisões durante a investigação, levando Muriel aos mais diversos locais da cidade, em busca de pistas para desvendar o padrão do assassino. Enfrente não só o assassino, mas como os cidadãos da cidade.
       
      Totalmente em português, "Mala Vermelha" faz com que cada detalhe apresentado na história, possa ser utilizado para desvendar o enigma do assassino. Cada decisão a levará a um destino diferente. Com múltiplos finais, "Mala Vermelha" fará com que você escolha qual o melhor desfecho para o seu estilo de jogo. Não existe certo ou errado. Você decide.
       
      Mala Vermelha na Play Store: https://bit.ly/2XSfImx
      Blog: https://thekingowlgames.blogspot.com/2020/04/mala-vermelha_20.html
    • By danisj
      #include<iostream>
      using namespace std;
      int BuscaBin (int lista[], int baixo, int alto, int chave)
      {
          int central;
          int valorcentral;
          while (baixo <= alto)
          {
              central = (baixo + alto)/2;
              valorcentral = lista[central];
              if (chave == valorcentral)
                  return central;
              else if (chave < valorcentral)
                  alto = central -1;
              else
                  baixo = central + 1;
          }
      }
      int main()
      {
          int a[10];
          int chave, pos;
          cout << "Introduza uma lista de 10 inteiros:";
          for (pos = 0; pos < 10; pos++)
              cin >> a[pos];
          cout << "Introduza chave a buscar:";
          cin >> chave;
          pos = 0;
          while ((pos = BuscaBin(a, 0, 9, chave))!= -1)
          {
              pos++;
          }
          cout << chave << " está na lista "  << " vezes na lista " << endl;
      }
          
      O objetivo é inserir uma lista e resultar  numa busca binária e ele retornar a chave, não posso alterar a função BuscaBin
    • By Matex5
      Sua tarefa é implementar uma árvore de busca binária que armazene strings. A ordem de inserção deverá ser alfabética crescente, ou seja, se o valor do elemento da raiz for “iguana”, então a palavra “beterraba” deverá ser inserida na subárvore da esquerda, enquanto a palavra “pagode” deverá ser inserida na subárvore da direita.
      Devem ser declaradas a struct e implementadas as seguintes funções da árvore:
      • criar(): inicialização da árvore.
      • buscar(): busca de um elemento na árvore.
      • inserir(): inserção de um elemento na árvore.
      • remover(): remove um elemento da lista.
      • estaVazia(): retorna um booleano indicando se a árvore está vazia.
      • ehEstritamenteBinaria(): retorna um booleano indicando se a árvore é estritamente binária.
      • ehQuaseCompleta(): retorna um booleano indicando se a árvore é quase completa.
      • ehCompletaCheia(): retorna um booleano indicando se a árvore é completa (cheia).
      • preOrdem(): visita e imprime os elementos da árvore em PRÉ-ORDEM (“RED”).
      • emOrdem(): visita e imprime os elementos da árvore EM-ORDEM (“ERD”).
      • posOrdem(): visita e imprime os elementos da árvore em PÓS-ORDEM (“EDR”). Após implementar a estrutura de dados, escreva um programa em C/C++ que permita ao usuário executar as funções acima

×

Important Information

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