Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro de compilação.

#include #include #include using namespace std;

string palavraSecreta = "MELANCIA"; vector chutes; vectorchutesErrados;

bool letraExiste(char chute); bool jaChutouLetra(char letra); void mostraJutesFeitos(); bool nao_acertou(bool acertou);

int main() { setlocale(LC_ALL, ""); // ativa o uso de acentos

char chute = ' ';
bool acertou = false, enforcou = false;

cout << "*********************************\n";
cout << "***BEM-VINDO AO JOGO DA FORCA!***\n";
cout << "*********************************\n";


do {

    mostraJutesFeitos();

    // mostra a palavra com letras acertadas ou "_"
    for (char letra : palavraSecreta) {
        if (jaChutouLetra(letra)) {
            cout << letra << " ";
        }
        else {
            cout << "_ ";
        }
    }

    cout << "\nInforme uma letra, sempre use letras maiúsculas: ";
    cin >> chute;
    cout << "\n";

    chutes.push_back(chute); // adiciona o chute ao histórico

    if (letraExiste(chute)) {
        cout << "Você acertou! Seu chute está na palavra.\n";
    }
    else {
        cout << "Você errou! Seu chute não está na palavra.\n";
        chutesErrados.push_back(chute);
    }

    // condição de vitória
    nao_acertou(acertou);


} while (!acertou && !enforcou);

if (acertou) {
    cout << "Parabéns! Você acertou a palavra secreta: " << palavraSecreta << "\n";
}

}

bool letraExiste(char chute) { for (char letra : palavraSecreta) { if (chute == letra) { return true; } } return false; }

bool jaChutouLetra(char letra) { for (char chute : chutes) { if (chute == letra) { return true; } } return false; }

void mostraJutesFeitos() { cout << "ESSES FORAM OS CHUTES ERRADOS JÁ FEITOS: "; for (char letra : chutesErrados) { cout << letra << " "; // Exibe cada letra chutada separada por um espaço } cout << "\n"; }

bool nao_acertou(bool acertou) { acertou = true; for (char letra : palavraSecreta) { if (!jaChutouLetra(letra)) { acertou = false; break; } } }

Eu meramente extraí a parte do código que verifica se há letras a serem chutadas e não acusou nenhum erro. Mas não compila.

1 resposta
solução!

Oi Pedro! Tudo joia?

Parece que o problema está relacionado à lógica de verificação de vitória e derrota no seu jogo da forca. Vamos dar uma olhada em alguns pontos que podem estar causando o erro de compilação e no comportamento do jogo.

  1. Função nao_acertou: a função nao_acertou que você definiu não retorna nenhum valor, mas deveria retornar um bool. No seu código, ela apenas recebe um parâmetro acertou e o modifica, mas isso não tem efeito fora da função. Você precisa que a função retorne true ou false dependendo se todas as letras foram acertadas ou não.

    Aqui está uma possível correção:

    bool nao_acertou() {
        for (char letra : palavraSecreta) {
            if (!jaChutouLetra(letra)) {
                return true; // Ainda não acertou todas as letras
            }
        }
        return false; // Acertou todas as letras
    }
    
  2. Condição de Vitória e Derrota: no loop do-while, você está usando a variável acertou, mas ela não é atualizada corretamente. Com a correção da função nao_acertou, você pode simplificar o loop assim:

    do {
        // ... seu código existente ...
    
    } while (nao_acertou() && !enforcou);
    
  3. Variável enforcou: você precisa definir uma lógica para a variável enforcou para determinar quando o jogador perdeu. Isso geralmente é feito contando o número de chutes errados. Por exemplo:

    enforcou = chutesErrados.size() >= 5; // Supondo que o limite de erros seja 5
    
  4. Função mostraJutesFeitos: parece que há um pequeno erro de digitação no nome da função. O correto séria mostraChutesFeitos. Certifique-se de que o nome da função seja consistente em todo o código.

Com essas alterações, seu código deve compilar e funcionar corretamente.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.