3
respostas

[Dúvida] Jogo quebrou

Estava com um erro de ter incluindo algumas variaveis com cpp ao invés de hpp, mas agora meu jogo não funciona direito, eu coloco a letra correta e mesmo assim o chute dá como errado, alguém sabe o que pode ser?

3 respostas

Oi, Enzo! Tudo bem?

Precisamos que você envie o código completo no git hub, assim podemos fazer testes para te ajudar.

Ah, se quiser, dá uma olhadinha neste guia sobre como fazer uma boa pergunta no fórum — ele mostra exatamente o que precisamos saber pra conseguir te ajudar da melhor forma, e com mais agilidade.

Fico no aguardo. Abraços e bons estudos!

Olá Lorena, tudo certo e você?

Desculpe não sabia, eu criei o projeto lá no github, não sei se fiz da maneira certa porque não entendo nada dessa plataforma, qualquer coisa me avise!
https://github.com/oenzosantos/forca.git

Oi, Enzo.

Consegui acessar seu código, obrigada!

Você estava usando letras minúsculas? Pois quando testei seu código usando minúsculas, ele não funcionava. Mas se eu usava maiúscula funcionava certinho.

Isso acontece porque, para o computador, uma letra minúscula é completamente diferente de uma letra maiúscula. É muito comum passar por isso quando estamos aprendendo a lidar com textos!

Internamente, o C++ usa uma tabela numérica (chamada ASCII) para representar letras. Por exemplo:

  • A letra 'a' vale o número 97.
  • A letra 'A' vale o número 65.

Como as palavras no seu arquivo palavras.txt estão todas em maiúsculas (ex: "ABACAXI"), quando você digita 'a', o programa compara 97 com 65, vê que são diferentes e diz que você errou.

A solução:

Para corrigir isso, precisamos forçar o chute a virar maiúsculo assim que o usuário digita, antes de fazer qualquer verificação. Vamos usar a função toupper() (que significa to upper case - para caixa alta).

Seu código ajustado. Note que adicionei uma nova biblioteca e uma linha de comando:

#include <iostream>
#include <vector>
#include <map>
#include <cctype> // 1. Incluímos esta biblioteca para mexer com tipos de caracteres
#include "letra_existe.hpp"


extern std::map<char, bool> chutou;
extern std::vector<char> chutes_errados; 

void chuta(){
    std::cout << "Seu chute: ";
    char chute;
    std::cin >> chute;

    // 2. A Mágica acontece aqui:
    // Transformamos o chute em maiúsculo logo após ler
    chute = toupper(chute); 

    chutou[chute] = true;

    if(letra_existe(chute)){
        std::cout << "Você acertou! Seu chute está na palavra." << std::endl;
    }
    else{
        std::cout << "Você errou! Seu chute não está na palavra." << std::endl;
        chutes_errados.push_back(chute);
    }
    std::cout << std::endl;
}

O que mudou?

  1. #include <cctype>: Essa biblioteca contém ferramentas padrões do C++ para manipular caracteres.
  2. chute = toupper(chute);: Essa linha pega o que o usuário digitou e converte para maiúsculo.
  • Se você digitar 'a', vira 'A'.
  • Se você digitar 'A', continua 'A'.
  • Assim, o resto do seu código (como o letra_existe e o mapa chutou) sempre receberá a letra no formato correto para comparar com o seu arquivo de texto.

Ao testar tudo funciona:

teste funcionando

Espero ter ajudado.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!