Programando em C/C++ – parte 6

Como prometido no último post, hoje começaremos a criar um pequeno jogo de adivinhação. Trata-se de um jogo que eu criei quando eu comecei a estudar programação, e que engloba vários dos aspectos de um programa comum. Então, vamos começar!

ESTE É UM POST ANTIGO

Este post foi importado do antigo blog e o seu conteúdo não foi revisado. O conteúdo deve estar desatualizado e a formatação pode apresentar problemas.

Objetivo

Criar um jogo de adivinhação, onde o programa escolhe um número aleatório entre 1 e 5000 e o usuário tenta adivinhar. O programa deve informar se o palpite foi alto ou baixo demais. O jogador pode abandonar o jogo a qualquer momento se digitar 0 como tentativa. Ao final, deve ser perguntado ao usuário se ele deseja jogar novamente.

Vamos programar!

Primeiro crie um arquivo chamado adivinha.c (você pode chamar como quiser, mas eu vou utilizar esse nome aqui no blog). Vamos começar incluindo as bibliotecas que contém as funções que vamos utilizar:

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

int main(void) {
    int num;            // o número aleatório
    int tentativa;      // o número digitado pelo usuário
    int cont;           // um contador de tentativas
    char opcao;         // para verificar se o jogador quer continuar jogando

    srand(time(NULL));  // definimos uma semente para o número aleatório

    for (;;) {          // isso é um loop infinito, só acaba manualmente

        cont = 1;                   // inicia o contador
        num = (rand() % 5000) + 1;  // escolhemos um número aleatório

        // exibimos um título e regras básicas
        printf("ttJogo de Adivinhaçãonn");
        printf("tO número a ser adivinhado está entre 1 e 5000n");

        // ainda tem mais código ....
    }
}

Bem, temos nosso protótipo inicial. Alguns detalhes importantes:

  • incluímos a biblioteca time.h que é necessária para gerar os números aleatórios (na verdade não é necessária, mas sem utilizá-la os números seriam iguais todas as vezes que o programa fosse aberto);
  • utilizamos srand(time(NULL)); para definir a semente, ou seja, o número a partir do qual é calculado o número “aleatório”;
  • a função para gerar um número aleatório é rand(). Utilizamos o % 5000 para limitar o número gerado de 0 até 4999. E por fim, adicionamos +1 para que o valor fique na faixa de 1 a 5000;
  • no printf utilizamos os caracteres t e n, por quê? São sequências de escape, que possuem características especiais dentro de uma string. Veja a tabela abaixo:

Sequência de escapeResultadoANSI
caractere nuloNULL
acampainhaBELL
bretrocessoBS
falimentação de formulárioFF
nnova linhaLF
ttabulação horizontalHT
vtabulação verticalVT
\barra invertida
aspa simples
aspa dupla

OK, até agora não fizemos nada funcionar. Então é melhor pensarmos nisso. Como descrito no objetivo: “O jogador pode abandonar o jogo a qualquer momento se digitar 0 como tentativa”. Minha sugestão é utilizar o do…while:

// essa é a continuação do código anterior, *dentro* do loop for
do {
    // lemos a tentiva do usuário
    printf("nTentativa %d: ", cont);
    scanf("%d", &tentativa);

    if (tentativa == 0) {
        // se o jogador digitar zero ele quer sair
        break;
    } else if (tentativa > num) {
        // se foi muito alto
        printf("tEscolha um número mais baixo!n");
    } else if (tentativa < num) {
        // se foi muito baixo
        printf("tEscolha um número mais alto!n");
    } else {
        // se acertou
        printf("tAcertou em %d tentativas!n", cont);
    }

    cont++;

} while (tentativa != num);
// vem mais pela frente...

Pronto. Com isso já verificamos todas as possibilidades que o usuário pode digitar: 0 (zero) para sair, um número maior do que o que ele deve adivinhar, um número menor e o número correto!

Agora só nos resta a última parte: “Ao final, deve ser perguntado ao usuário se ele deseja jogar novamente”. Para isso temos centenas (ou até milhares) de maneiras diferentes de fazer. Vamos optar pelo mais simples possível (e que com certeza não é a melhor opção):

// sim, continuação de novo...
        printf("Deseja jogar novamente? (S/N): ");
        getchar();          // limpa o buffer
        opcao = getchar();

        // se ele não quiser continuar jogando, sai
        if (toupper(opcao) != 'S') {
            break;
        }

    } // fim do for

    return 0;

} // fim do main

Agora compile, execute e divirta-se e até a próxima! 😀

Terminal
$ gcc adivinha.c -o adivinha
$ ./adivinha

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *