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