Ajude nosso projeto a se manter online.

Jogo em C++: Adivinhe o número sorteado

Neste tutorial, vamos resolver um exercício de nossa lista de funções.

Game em C++: Adivinhe o número sorteado

Crie um jogo onde o  computador sorteie um número de 1 até 100. A cada vez que você chutar um número, ele deve dizer se você chutou abaixo do valor real, acima ou se acertou. Ao final, diz o número de tentativas que você teve e se bateu o record ou não. Ah, ao final de cada rodada, o programa pergunta se você quer jogar novamente ou não, exibindo o record atual.

Código comentado do jogo em C++

Bem, vamos lá, vamos com calma e cuidado, que hoje vamos passar das 100 linhas de código.
Mas não se assuste, um grande programa nada mais é que vários pequenos programinhas divididos, entre outras coisas, entre funções que fazem coisas específicas.

Inicialmente, declaramos a variável record, que vai armazenar o número record de tentativas que o usuário acertou em uma rodada. Ela inicia em 0. Já já você vai entender o motivo.

Em seguida, criamos a função limpa(), que vai limpar a tela a cada rodada.

A função gerar() faz com que o computador gere um número aleatório, de 1 até 100, e retorna ele.

A função palpite() vai servir para receber o palpite do usuário. Ela recebe um inteiro, o número de tentativas que o usuário já realizou, pra exibir: "tentativa 1", "tentativa 2", "tentativa 3"...

A função checa() vai comparar o número que você chutou com o número gerado pelo computador.
Se você acertar, ele retorna 1, se errar retorna 0.

A função dica() vai receber o seu palpite e o número gerado, e vai te dar a dica, se o seu palpite foi maior, menor ou igual ao gerado pelo computador.

A função encerra() exibe as informações finais do jogo.
Ela pega o número de tentativas que você realizou, e diz se você bateu o record ou não. Inicialmente, se a variável record for igual 0, essa variável vai pegar o número de tentativas que você levou pra acertar, no seu primeiro jogo. Depois, ela avalia se suas tentativas foram menores que o valor de 'record', se for, ela diz que você bateu o record e esse é o novo valor da variável record. Se não, mostra o record.

Por fim, a função continuar() pergunta se você deseja jogar de novo ou não.

Funções explicadas, vamos pra lógica do jogo, na main().
Inicialmente, declaramos 3 variáveis, a que vai armazenar o número de tentativas em cada rodada, a que vai armazenar o número gerado em cada rodada e a que vai armazenar os palpites do usuário.

No primeiro DO WHILE, vamos controlar as rodadas que serão jogadas. Ao fim de cada iteração, chamamos a função continuar() dentro do WHILE, pra saber se devemos começar outra rodada ou não.

Dentro de cada rodada, primeiro limpamos a tela.
Em seguida, zeramos o número de tentativas, afinal, é uma nova rodada.

Exibimos o record atual, através da variável 'record'. E aviamos que geramos o número a ser adivinhado.

Agora, vamos ficar em um looping: pergunta um chute, diz se errou ou acertou, dá a dica...pede outro chute, avisa se acertou ou não, dá dica...pede outro número...até a pessoa acertar.

Para isso, vamos usar outro laço DO WHILE. Esse vai rodar sempre que a pessoa errar. Errou? Roda de novo. Quem controla isso é a função checa(). 

Dentro desse DO WHILE interno, primeiro incrementamos o número de tentativas.
Pegamos o palpite do usuário, então damos a dica (que também avisa quando ganha).

Por fim, vai pra função checa(), que retorna 1 se a pessoa acerta (termina o looping) ou 0 se ela erra (roda de novo).

Encerrado esse looping interno, chamamos a função encerra(), que vai dizer em quantas tentativas você acertou, se bateu o record ou não.

Depois disso, vai no while externo, que vai perguntar se você deseja jogar de novo ou não.
Simples, não?

Código do Jogo em C++

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int record=0;

void limpa();       // Limpa a tela
int gerar();        // Gera o número aleatório
int palpite(int);   // Pega o palpite do usuário
int checa(int, int);// Checa se errou ou ganhou
void dica(int, int);// Da a dica se é maior ou menor
void encerra(int);  // Exibe informações da partida
int continuar();    // Pergunta se quer jogar de novo

int main()
{
    int tentativas,
        gerado,
        palp;

    do{
        limpa();
        tentativas=0;
        cout<<"Record até o momento: "<< record <<" tentativas!"<<endl;
        gerado = gerar();
        cout<<"\nNúmero sorteado! "<<endl;

        do{
            tentativas++;
            palp = palpite(tentativas);
            dica(gerado, palp);
        }while(checa(gerado, palp) != 1);

        encerra(tentativas);
    }while( continuar() );
    return 0;
}
void limpa()
{
    if(system("CLS")) system("clear");
    //int n;
    //for(n=1 ; n<10 ; n++)
      //  cout<<endl;
}
int gerar()
{
    unsigned seed = time(0);
    srand(seed);

    return 1+rand()%100;
}

int palpite(int tent)
{
    int palp;
    cout<<"\nTente adivinhar o número de 1 até 100."<<endl;
    cout<<"Tentativa "<<tent<<":"<<endl;
    cin >> palp;

    if(palp>0 && palp<=100)
        return palp;
    else
        cout<<"Só vale números de 1 até 100"<<endl;
}

int checa(int gerado, int palp)
{
    if(gerado == palp)
        return 1;
    else
        return 0;
}

void dica(int gerado, int palp)
{
    if(palp<gerado)
        cout<<"ERROU! Seu palpite foi MENOR que o número sorteado!"<<endl;
    else
        if(palp>gerado)
            cout<<"ERROU! Seu palpite foi MAIOR que o número sorteado!"<<endl;
        else
            cout<<"Ahhhhh muleeeeque!"<<endl;
}

void encerra(int tent)
{
    cout<<"\nVocê acertou em "<<tent<<" tentativa(s)!"<<endl;

    if(record==0)
        record = tent;

    if(tent<=record){
        cout<<"Parabéns! O record é seu!"<<endl;
        record = tent;
    }
    else
        cout<<"O record ainda é de "<<record<<" tentativa(s)"<<endl;
}

int continuar()
{
    int cont=1;

    cout<<"\nJogar de novo?"<<endl;
    cout<<"0. Sair"<<endl;
    cout<<"1. De novo!"<<endl;
    cin >> cont;

    return cont;
}

Nenhum comentário:

Postar um comentário