1
resposta

[Dúvida] Não está dando certo

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <fstream>
#include <ctime>
#include <cstdlib>

using namespace std; 

string palavra_secreta = "MELANCIA";
map < char, bool> chutou;
vector<char>  chutes_errados; 

bool letra_existe(char chute){
  for(int i = 0; i < palavra_secreta.size(); i++){
if(chute == palavra_secreta[i]){
  return true;
    }
  }
  return false;
}

bool nao_acertou(){

  for(char letra : palavra_secreta) {
    if(!chutou[letra]){
      return true;
    }
  }
  return false;
} 
bool nao_enforcou(){
  return chutes_errados.size() < 5;

}

void imprime_cabecalho(){

  cout << "***************" << endl;
  cout << "*** Jogo da Forca ***" << endl;
  cout << "***************" << endl;
  cout << endl;

}

void imprime_erros(){

   cout << "chutes_errados: ";
   for(char letras : chutes_errados){
   cout << letras << " ";
   }

  cout << endl;

}

void imprime_palavras(){
for(char letra : palavra_secreta){
   if(chutou [letra]){
    cout << letra << " ";
   }else{
     cout << "_ ";
   }

   }

    cout << endl;
}

void chuta(){

  char chute;
    cin >> chute;

    chutou[chute] = true;

  if(letra_existe(chute)){
    cout << "Voce acertou! Seu chute esta na palavra." << endl;

  } else {

    cout << "Voce errou! Seu chute nao esta na palavra." << endl;
     chutes_errados.push_back(chute); 
  }


}

vector<string> le_arquivo(){
ifstream arquivo;
  arquivo.open("palavras.txt");

  int quantidade_palavras;
  arquivo >> quantidade_palavras;

  cout << "O arquivo possui " << quantidade_palavras << " palavras " << endl;

  vector<string> palavras_do_arquivo;

  for(int i = 0; i < quantidade_palavras; i++){
    string palavra_lida;
    arquivo >> palavra_lida;
    cout << "Na linha " << i << " : " << palavra_lida << endl;
    palavras_do_arquivo.push_back(palavra_lida);
  }
  return palavras_do_arquivo;
}

void sorteia_palavra(){

vector<string> palavras = le_arquivo();

 srand(time(NULL));
  int indice_sorteado = rand() % palavras.size();

  palavra_secreta = palavras[indice_sorteado];
}

int main() {

imprime_cabecalho();

  le_arquivo();

  while(nao_acertou() && nao_enforcou()){

    imprime_erros();

    imprime_palavras();

    chuta();

  }
  cout << "Fim de jogo" << endl;
  cout << "A palavra secreta era: " << palavra_secreta << endl;
  if(nao_acertou()){
    cout << "Voce perdeu! Tente novamente!" << endl;
  }
  else {

  cout << "Parabens! Voce acertou a palavra secreta" << endl;

  }
}
Esse é meu código e eu criei o arquivo txt com as frutas, mas continua sendo melancia independente no número de tentativas
1 resposta

Olá Henrique, tudo bem?

Pelo que entendi, você está tendo problemas para sortear uma palavra aleatória do arquivo "palavras.txt" que você criou. No seu código, você está lendo o arquivo corretamente e armazenando as palavras em um vetor, mas não está utilizando esse vetor para sortear uma nova palavra secreta.

Para resolver esse problema, você pode modificar a função "sorteia_palavra()" para utilizar o vetor de palavras lidas do arquivo. Veja como ficaria:

void sorteia_palavra(){
  vector<string> palavras = le_arquivo();

  srand(time(NULL));
  int indice_sorteado = rand() % palavras.size();

  palavra_secreta = palavras[indice_sorteado];
}

Dessa forma, a função "sorteia_palavra()" irá ler o arquivo, armazenar as palavras em um vetor e sortear um índice aleatório desse vetor para definir a nova palavra secreta.

Espero ter ajudado e bons estudos!