1
resposta

[Dúvida] Jogo de adivinhação

Olá,

Realizei o programa em c do jogo de adivinhação, e, para complementar, resolvi incrementar a solicitação do nome no código para interagir com o usuário. Mas, ao compilar, ele está executando todo o jogo e sugerindo o numero nas tentativas. Como corrigir?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Segue o código:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {{

    //imprime o cabeçalho do jogo
    printf("********************************\n");
    printf("Bem vindo ao jogo de adivinhacao\n");
    printf("********************************\n");
    printf("\n\n");
        
    //declarando variáveis
    
    int segundos = time(0);//passa o número de segundos do momento corrente. 
    srand(segundos);//srand(segundos), está definindo a “semente” (ou ponto de partida) para a geração dos números aleatórios.
    int numero = rand();


    int numerosecreto = numero % 100;
    int chute;
    int ganhou = 0;
    int tentativas = 1;
    double pontos = 1000;

    int nome;
    printf("Qual seu nome?: \n");
    scanf("%d", &nome);
    printf("Voce esta pronto para jogar %d\n", nome);

    int nivel;
    printf("Qual o nivel de dificuldade deseja jogar?\n");
    printf("\n[1] Facil [2] Medio [3] Dificil\n\n");
    printf("Escolha seu nivel: \n");
    scanf("%d", &nivel);

    int numerodetentativas;

    switch(nivel){
        case 1: numerodetentativas = 20;
        break;
        case 2: numerodetentativas = 10;
        break;
        default: numerodetentativas = 5;
        break;
    }

    
   for (int i = 1; i <= numerodetentativas; i++) {

            printf("Tentativa %d\n", tentativas);
            printf("Qual e o seu chute?");

            scanf("%d", &chute);
            printf("Seu chute foi %d\n", chute);

            if (chute < 0) {
                printf("Nao sao permitidos numeros negativos\n");
                continue;
            }
    
            //criação da variável acertou para resumir a condicional 

            int acertou = (chute == numerosecreto);
            int maior = (chute > numerosecreto);
    
            
            if (acertou) {
            printf("Parabens %d, voce acertou o numero secreto!!!\n", nome);
            
            break;

            } 
            else {
            //criação da variável maior para resumir a condicional
            //a variavel maior só existe dentro do else por conta do {
                
                if(maior) {
                printf("Seu chute foi maior que o numero secreto\n");
                printf("Tente novamente!\n");
                }
                else {
                printf("Seu chute foi menor que o numero secreto\n\n");
                printf("Tente novamente!\n");
                }
    }
                    tentativas++;

                    double pontosperdidos = (abs)(chute - numerosecreto) / 2.0;
                    pontos = pontos - pontosperdidos;
    }
    printf("Total de pontos nesta rodada: %.1f\n", pontos);
}
    printf("Fim de jogo!\n");
    system("pause");
    return 0;

}
1 resposta

Olá Jessica, tudo bem?

O problema que você está enfrentando ocorre porque você está usando um int para armazenar o nome do usuário, mas deveria ser uma string. Além disso, parece que o chute está sendo lido incorretamente, o que pode ser causado por um erro no tipo de dado ou na leitura do input.

Aqui está uma correção para o seu código:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {

    // imprime o cabeçalho do jogo
    printf("********************************\n");
    printf("Bem vindo ao jogo de adivinhacao\n");
    printf("********************************\n");
    printf("\n\n");

    // declarando variáveis
    int segundos = time(0);
    srand(segundos);
    int numero = rand();

    int numerosecreto = numero % 100;
    int chute;
    int ganhou = 0;
    int tentativas = 1;
    double pontos = 1000;

    char nome[50];
    printf("Qual seu nome?: \n");
    scanf("%s", nome);
    printf("Voce esta pronto para jogar %s\n", nome);

    int nivel;
    printf("Qual o nivel de dificuldade deseja jogar?\n");
    printf("\n[1] Facil [2] Medio [3] Dificil\n\n");
    printf("Escolha seu nivel: \n");
    scanf("%d", &nivel);

    int numerodetentativas;

    switch(nivel){
        case 1: numerodetentativas = 20;
        break;
        case 2: numerodetentativas = 10;
        break;
        default: numerodetentativas = 5;
        break;
    }

    for (int i = 1; i <= numerodetentativas; i++) {

        printf("Tentativa %d\n", tentativas);
        printf("Qual e o seu chute? ");
        scanf("%d", &chute);
        printf("Seu chute foi %d\n", chute);

        if (chute < 0) {
            printf("Nao sao permitidos numeros negativos\n");
            continue;
        }

        int acertou = (chute == numerosecreto);
        int maior = (chute > numerosecreto);

        if (acertou) {
            printf("Parabens %s, voce acertou o numero secreto!!!\n", nome);
            break;
        } else {
            if (maior) {
                printf("Seu chute foi maior que o numero secreto\n");
                printf("Tente novamente!\n");
            } else {
                printf("Seu chute foi menor que o numero secreto\n");
                printf("Tente novamente!\n");
            }
        }
        
        tentativas++;
        double pontosperdidos = abs(chute - numerosecreto) / 2.0;
        pontos = pontos - pontosperdidos;
    }
    
    printf("Total de pontos nesta rodada: %.1f\n", pontos);
    printf("Fim de jogo!\n");
    system("pause");
    return 0;
}

Principais mudanças:

  • Alterei a variável nome para um array de char para armazenar strings.
  • Corrigi a formatação de saída para o nome do usuário.

Espero ter ajudado e bons estudos!

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