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!

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("\t\tJogo de Adivinhação\n\n");
        printf("\tO número a ser adivinhado está entre 1 e 5000\n");

        // 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 escape Resultado ANSI
\0 caractere nulo NULL
\a campainha BELL
\b retrocesso BS
\f alimentação de formulário FF
\n nova linha LF
\t tabulação horizontal HT
\v tabulação vertical VT
\\ 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! :D

Terminal
$ gcc adivinha.c -o adivinha
$ ./adivinha
Com as tags → 
Plataforma Wordpress Latest (GPLv2)
Tema PageLines Lite Improved (GPLv3)
Hospedado por OpenShift by RedHat
Domínio registrado pela Neep Host
Creative Commons Attribution-ShareAlike License
Copyleft © 2016 Eduardo Weiland
Utilize um leitor de QR Code para acessar o blog no seu celular:
21
%d blogueiros gostam disto: