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

    • By FineMustache
      Fiz um programa que calcula o reajuste de salário de 5 funcionários armazenando seus nomes e salários em vetores, porém o salário já reajustado aparece com o mesmo valor do salário original.
      /* Armazenar o nome e o salário de 5 funcionários. Após o cadastro destas informações, deverá ser digitado o índice de reajuste salarial para todos os funcionários. O programa deverá calcular o novo salário e exibir todos os dados na tela */ #include <iostream> #include <locale.h> #include <string> #include <string> #include <stdlib.h> #include <cstdlib> using namespace std; int main() { setlocale(0, "Portuguese"); system("color 0a"); system("MODE CON COLS=150 LINES=40"); string nomefunc[5]; double slfunc[5], slnovo[5]; int reaj, i; cout << "\n\tArmazenar o nome e o salário de 5 funcionários. Após o cadastro destas informações, deverá ser digitado o índice de reajuste salarial para todos os funcionários. O programa deverá calcular o novo salário e exibir todos os dados na tela"; cout << "\n\n\tDigite a porcentagem do reajuste (sem o sinal %): "; cin >> reaj; for (i=0; i<5; i++){ cout << "\n\n\tDigite o nome do funcionário: "; cin >> nomefunc[i]; cout << "\n\n\tDigite o salário de " << nomefunc[i] <<": "; cin >> slfunc[i]; slnovo[i] = slfunc[i] - slfunc[i] * (reaj / 100); } cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[0] << ") era de R$" << slfunc[0] << " e passará a ser de R$" << slnovo[0] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do segundo funcionário (" << nomefunc[1] << ") era de R$" << slfunc[1] << " e passará a ser de R$" << slnovo[1] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[2] << ") era de R$" << slfunc[2] << " e passará a ser de R$" << slnovo[2] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[3] << ") era de R$" << slfunc[3] << " e passará a ser de R$" << slnovo[3] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[4] << ") era de R$" << slfunc[4] << " e passará a ser de R$" << slnovo[4] << " com o reajuste de " << reaj << "%."; system ("PAUSE>NULL"); }  
    • By WillChapuis
      Bom, eu preciso fazer uma tabela hash de 100 elementos como mostrado no esquema:

       
      Essa tabela (vetor) de 100 elementos … cada um deles possuem números chamados de “chaves” e um ponteiro apontando para o a próxima chave (lista encadeada).
      A regra que deve ser seguida para as inserções no vetor, é que o ultimo digito da chave é seu “endereço”, e esse endereço indica qual posição do vetor eu devo inserir.

      Ex: Inserir a chave 487
      (chave) 487 % (tamanho do vetor) 100 = 7
      Então devo inserir a chave 487 na posição 87 do vetor:   v[87] = 487
       
      Porém eu estou tendo problemas com os ponteiros para chamar as funções e utiliza-los... Eu sei fazer uma lista encadeada, porém não sei como fazer um vetor disso...
      Esse é um pouco do que eu fiz quando era só uma lista encadeada...
      struct dados { int chave; struct dados *prox; }; typedef struct dados Lista; void Cria(Lista **L) { *L = NULL; } void Inserir(Lista **L, int v) { Lista *p, *q; p = (Lista*)calloc(1, sizeof(Lista)); p->chave = v; p->prox = NULL; if(*L == NULL) { *L = p; } else { q = *L; while(q->prox != NULL) { q = q->prox; }; q->prox = p; } } Eu conversei com um amigo e ele me indicou fazer a declaração da struct dessa forma:
      struct dados { int chave; struct dados * prox; } tabela[100]; typedef struct dados Elemento; Entretanto eu não tenho ideia de como eu vou chamar isso na função... Porque o vetor vai estar na main()... e eu só vou chamar a função "Inserir" com o vetor e o valor para inserir
       
      Como eu chamaria essa função ? Inserir(???,int chave)
       
      Se alguém puder me dar uma luz, eu agradeço demais ... Preciso fazer varias coisas alem da inserção, mas não consigo porque eu não sei de que forma eu vou chamar esse vetor/variável de controle das listas
    • By Josues
      Bom dia!
      Gostaria de uma auxilio sobre concatenação de números inteiros em uma matriz bidimensional,
      estou fazendo um trabalho da faculdade e me deparei com essa barreira.
      No programa deve conter duas matrizes de entrada e uma de matriz que vai receber os valores concatenados das duas.
      A matriz é 1 por 2
      L = 1 e C = 2
      no resultado que será mostrado é ex:
      matriz 1 [0][0]: 1
      matriz 1 [0][1]: 1
      Matriz 2 [0][0]: 1
      Matriz 2 [0][1]: 0
       
      Matriz Resultado:
      11            10
      11            10
       
      tem como fazer essa com catenação com inteiros? estou no segundo semestre da faculdade é e uma atividade avaliativa..
       
       
×

Important Information

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