Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Função dificuldade

Estava codando o que o professor solicitou e achei um problema: #include using namespace std;

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

const int numeroSecreto = 32;
int chute = 0, tentativas = 0, qtdTentativas, opcao;
bool maior = true, igual = true, acertou = false;
double pontosMarcados = 1000.00, pontosPerdidos = 0.00;


cout << "*************************************\n";
cout << "*Bem - vindo ao jogo da adivinhação*\n";
cout << "*************************************\n";
cout << "Informe a dificuldade que você quer jogar: \n";
cout << "Fácil (1)\n";
cout << "Médio (1)\n";
cout << "Difícil (3)\n";
cin >> opcao;
system("pause");
system("cls");

opcao == 1 ? qtdTentativas = 15 : opcao == 2 ? qtdTentativas = 10 : qtdTentativas = 5;


do {
    cout << "Você está na tentativa de número: " << tentativas << "\n";
    cout << "Informe um número: ";
    cin >> chute;
    tentativas++;

    maior = chute > numeroSecreto;
    igual = chute == numeroSecreto;

    if (igual) {
        cout << "Parabéns, você acertou o número secreto!\n";
        cout << "E precisou de: "<< tentativas << " tentativas para fazê-lo";
        cout.precision(2);
        cout << fixed;
        cout << "Você marcou: " << pontosMarcados << " pontos";
        acertou = true;
        break;
    }else if (maior) {
        cout << "Seu chute é maior que o número secreto!\n";
    }else{
        cout << "Seu chute é menor que o número secreto!\n";
    }

    pontosPerdidos = (chute - numeroSecreto) / 2.0;

    if (pontosPerdidos > 0) {
        pontosMarcados -= pontosPerdidos;
    }
    else {
        pontosMarcados += pontosPerdidos;
    }

   /* chute == numeroSecreto ? cout << "Parabéns, você acertou o número secreto!\n"  : 
        chute > numeroSecreto ? cout << "Seu chute é maior que o número secreto!\n" : 
        cout << "Seu chute é menor que o número secreto!\n";*/
    system("cls");
   
   
} while (!acertou && tentativas <= qtdTentativas);

//!acertou && tentativas == qtdTentativas
if (!acertou && tentativas <= qtdTentativas) {
    cout << "Você atingiu o número máximo de chutes possíveis! Tente novamente!";
}

cout << "Programa finalizado.\n";
return 0;

}

Fiz aquelas duas opções para aparecer a mensagem: "Você atingiu o número máximo de chutes possíveis! Tente novamente!, mas não consegui. O que posso fazer?

2 respostas
solução!

O problema no seu código está na condição do if que verifica se o jogador atingiu o número máximo de tentativas. O if atual verifica if (!acertou && tentativas <= qtdTentativas), o que significa que ele será verdadeiro enquanto o jogador não acertar e ainda tiver tentativas disponíveis. Isso não vai funcionar para mostrar a mensagem quando o jogador atinge o limite de tentativas.

Você deve mudar a condição do if para verificar se o número de tentativas é maior ou igual ao número máximo de tentativas somente após o loop, e apenas se o jogador não acertou. Além disso, a contagem de tentativas deve ser verificada apenas quando o loop termina.

#include <iostream>
#include <locale.h>

using namespace std;

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

    const int numeroSecreto = 32;
    int chute = 0, tentativas = 0, qtdTentativas, opcao;
    bool maior = true, igual = true, acertou = false;
    double pontosMarcados = 1000.00, pontosPerdidos = 0.00;

    cout << "*************************************\n";
    cout << "* Bem-vindo ao jogo da adivinhação *\n";
    cout << "*************************************\n";
    cout << "Informe a dificuldade que você quer jogar: \n";
    cout << "Fácil (1)\n";
    cout << "Médio (2)\n"; // Corrigi para 2 aqui
    cout << "Difícil (3)\n";
    cin >> opcao;

    // Definindo a quantidade de tentativas com base na opção
    if (opcao == 1) {
        qtdTentativas = 15;
    } else if (opcao == 2) {
        qtdTentativas = 10;
    } else {
        qtdTentativas = 5;
    }

    system("pause");
    system("cls");

    // Loop principal do jogo
    do {
        cout << "Você está na tentativa de número: " << (tentativas + 1) << " de " << qtdTentativas << "\n";
        cout << "Informe um número: ";
        cin >> chute;
        tentativas++;

        maior = chute > numeroSecreto;
        igual = chute == numeroSecreto;

        if (igual) {
            cout << "Parabéns, você acertou o número secreto!\n";
            cout << "E precisou de: " << tentativas << " tentativas para fazê-lo\n";
            cout.precision(2);
            cout << fixed;
            cout << "Você marcou: " << pontosMarcados << " pontos\n";
            acertou = true;
            break;
        } else if (maior) {
            cout << "Seu chute é maior que o número secreto!\n";
        } else {
            cout << "Seu chute é menor que o número secreto!\n";
        }

        pontosPerdidos = (chute - numeroSecreto) / 2.0;
        pontosMarcados -= (pontosPerdidos > 0) ? pontosPerdidos : 0;

        system("cls");

    } while (!acertou && tentativas < qtdTentativas); // Modificado para <

    // Mensagem quando o número máximo de tentativas é atingido
    if (!acertou) {
        cout << "Você atingiu o número máximo de chutes possíveis! Tente novamente!\n";
    }

    cout << "Programa finalizado.\n";
    return 0;
}

Alterações Realizadas

  1. Correção na opção de dificuldade: Corrigi a exibição para que a dificuldade "Médio" aparecesse como 2.
  2. Condição do loop: O loop agora continua enquanto o jogador não acertar e enquanto tentativas for menor que qtdTentativas. Isso garante que, quando o número máximo de tentativas for atingido, o loop terminará.
  3. Verificação após o loop: Após o loop, verificamos apenas se o jogador não acertou para exibir a mensagem de que ele atingiu o número máximo de chutes.

Entendi, muito obrigado!