Que tal agora fazer um jogo em C usando todos os conhecimentos que adquiriu até agora, em nossa apostila online de C?
Embora seja um game simples, você ver que a sensação de criar o próprio game com suas mãos, linha-a-linha irá lhe propiciar uma sensação única.
O curso online e gratuito de C, C Progressivo garante que este será o melhor game que você já jogou!
- Baixar nossa apostila: Apostila de C
Como criar um jogo simples em C
O jogador deve tentar acertar o número sorteado.
Se ele errar, o programa deve dizer se o número sorteado é maior ou menor que o número que o jogador tentou.
Ao acertar o número sorteado, o programa deverá dizer em quantas tentativas o usuário acertou.
Você consegue pensar na melhor estratégia para ganhar esse jogo?
Para criar esse jogo, precisaremos dos conhecimentos de:
Teste condicional IF ELSE
Laço DO WHILE
Funções com uso de parâmetros e argumentos
Protótipo de funções
Funções com return
Números aleatórios em C
Vamos usar um laço DO WHILE para controlar se o jogo deve começar novamente, ou não.
A condição será a variável 'continuar'. Se o jogador não quiser mais jogar, ele digita 0 ou digita qualquer outro número para continuar a jogar (0 é falso e qualquer outro número é true).
Pois bem, decidido que ele vai jogar, precisamos sortear um número, e isso é feito dentro da função 'random()', que não recebe nenhum argumento, apenas retorna um inteiro entre 1 e mil.
Vamos armazenar o número sorteado na variável 'password', será a nossa senha.
Fazemos com que a variável 'attempt' receba valor 0, pois é ela que vai contar quantas tentativas o jogador fez até acertar a senha.
Ele tentará adivinhar o número, e essa entrada que ele der será armazenada na variável 'number'.
Após tentar acertar, vamos checar as dicas.
Mandamos as variáveis 'number', 'password' e 'attemp' para a função 'dicas()'.
Se o número 'number' que fornecemos for maior que a senha, a dica diz que nosso número está maior.
Se o 'number' for menor que a senha, a dica nos mostra que nossa tentativa foi abaixo do número correto.
Ora, se não for maior nem menor, é porque acertamos a senha, e a dica nos parabenizará e mostrará em quantas tentativas acertamos.
Quando a rodada acaba? Ora, quando o jogador acertar a senha!
Enquanto ele não acertar, ele ficará preso dentro do looping, que no caso é um novo laço DO WHILE, onde a condição para sair é acertar a senha.
Enquanto não acertar, a condição 'number != password' será verdadeira.
Assim, o código completo de nosso primeiro jogo em C fica:
#include <stdio.h> #include <time.h> int random(); void dicas(int number, int password, int attempt); int main() { int continuar=1, password, attempt, number; do { system("cls || clear"); printf("Sorteando numero entre 1 e 1000...\n"); password = random(); printf("Comecou! Tente adivinhar o numero!\n\n"); attempt = 0; do { attempt++; printf("Tentativa %d: ", attempt); scanf("%d", &number); dicas(number,password,attempt); } while( number != password); printf("Digite 0 para sair, ou qualquer outro numero para continuar: "); scanf("%d", &continuar); } while(continuar); } int random() { srand( (unsigned)time(NULL) ); return (1 + rand()%1000); } void dicas(int number, int password, int attempt) { if(number > password) printf("O numero sorteado e menor que %d\n\n", number); else if(number < password) printf("O numero sorteado e maior que %d\n\n", number); else printf("Parabens! Voce acertou o numero em %d tentativas!\n\n", attempt); }
A estratégia para acertar é sempre ir na metade. Primeiro tente o número 500.
Assim, você eliminará metade das possibilidades, pois já sabe que vai estar entre 1 e 499, ou entre 501 e 1000.
Se for maior que 500, tente 750. Se for menor, tente 250.
A explicação disso é eliminar metade (250), dos 500 possíveis números...depois 125, depois 62, depois 31, depois 15, depois 8, depois 4, depois 2 e por fim, 1. Ou seja, sempre se acerta, em no máximo 9 tentativas.
Gostou? Coloque seu nome
"Desenvolvido por Joãozinho - Curso C Progressivo: www.cprogressivo.net"
e envie para seus amigos.
19 comentários:
Meu código ficou assim :
#include
#include
#include
#include
int random_x ();
int finding_random_x(int random_x);
int main(int randomx)
{
int
randomxx,
tentativas = 0;
do
{
finding_random_x();
}while ( randomxx != randomx );
}
int random_x()
{
int
random_num;
srand((unsigned) time(NULL));
random_num = rand()%1001;
finding_random_x(random_num);
main(random_num);
return (random_num);
}
int finding_random_x(int random_x)
{
int
randomxx,
tentativas = 0;
printf("Advinhe o número!\n\n");
scanf(" %d",&randomxx);
if ( randomxx == random_x)
{
printf("Parabéns você encontrou o número!\n\n");
printf("O numéro de tentativas para você acertar foi de : %d",tentativas);
}
if ( randomxx > random_x )
{
printf("Esse valor é maior que o número!\n\n");
}
if ( randomxx < random_x )
{
printf("Esse valor é menor que o número!\n\n");
}
tentativas++;
return 0;
}
Tá suja ta feio,e não ta pegando.
Eu fiz ele da primeira,não consegui ,refiz e não deu também,mas eu tentei! :)
Se alguém puder me dar uma força,ficarei grato.
Abraços e os tutos desse site são demais!!!
O meu deu certo. Obrigado pelo curso e segue o codico com poucas alterações, apenas para imprimir de forma mais limpo no console.
#include
#include
int random();
void dicas(int number, int password, int attempt);
void main()
{
int continuar = 1, password, attempt, number;
do
{
printf("*************** Sorteando numero entre 1 e 1000...\n\n");
password = random();
printf("*************** Comecou, tente adivinhar o numero e boa sorte!...\n\n");
attempt = 0;
do
{
attempt++;
printf("Tentativa %d\n", attempt);
scanf("%d", &number);
dicas(number, password, attempt);
}
while(number != password);
printf("Digite 0 para sair. ");
scanf("%d", &continuar);
}
while(continuar);
}
int random()
{
srand((unsigned) time(NULL));
return (1 + rand()% 1000);
}
void dicas(int number, int password, int attempt)
{
if(number > password)
printf("O numero sorteado e menor que %d\n\n", number);
else
if (number < password)
printf("O numero sorteado e maior que %d\n\n", number);
else
printf("Parabens! Vc acertou o numero em %d tentativas.\n\n", attempt);
}
O MEU FUNCIONOU PERFEITAMENTE !! VLW ;)
#include
#include
#include
void menu(){
int escolha= 0;
printf("====== TENTE ACERTAR UM NUMERO DE 1 A 1000 ====== \n\n");
printf(" ===== FUNCIONA ASSIM: ===== \n A CADA TENTATIVA VAMOS TE DAR UMA DICA DE QUANTO ARRISCAR APROXIMADAMENTE! \n\n");
printf(" PARA COMECAR O JOGO PRESSIONE 1. PARA SAIR PRESSIONE 0 : \n\n");
}
int teste_para_entrada (int a){
if (a == 1)
{
printf(" VAMOS COMECAR! \n\n");
}else if (a != 0 && a != 1 ){
while(a != 0 || a != 1){
printf("ERROR: ESCOLHA SO ENTRE 0 OU 1 \n\n\n");
tente_novamente();
}
}else if (a == 0){
printf("Saindo.. \n");
}
return a;
}
void tente_novamente(void){
int contador=0, numero=0, escolha= 0;
menu();
scanf ("%d", &escolha);
teste_para_entrada(escolha);
}
int jogo(int a){
srand(time(NULL));
a = 1 + (rand() % 1000);
return a;
}
int processamento(int a, int b){
int contador= 2, num_tenta= 0;
while ( a != b){
if (a > b ) {
printf("%d TENTATIVA..\nDica - O Numero Sorteado, E Menor QE %d : ", contador,a);
contador++;
} else if (a < b){
printf("%d TENTATIVA..\nDica - O Numero Sorteado, E Maior QE %d : ", contador,a);
contador++; }
scanf("%d", &a);
printf("\n\n");
}
num_tenta = contador - 1;
if (a == b){
printf("PARABENS ACERTOU EM %d TENTATIVAS !! \n\n", num_tenta);
printf("FIM DO JOGO.. \n\n");
}
}
int main() {
int retorno=0, teste= 0, contador=2, numero=0, escolha= 0;
menu();
scanf ("%d", &escolha); printf("\n");
teste= teste_para_entrada(escolha);
retorno= jogo(retorno);
if (teste == 1) {
printf("\n\nDIGITE UM NUMERO : ");
scanf("%d", &numero);
printf("\n\n");
processamento(numero, retorno);
}
return 0;
}
Gostaria de saber porque meu código não da as dicas. Eu já olhei muitas vezes e não consegui achar o erro.
Alguém poderia me ajudar? Obrigado.
# include
# include
# include
int aleatorio ()
{
srand( (unsigned)time(NULL) );
return (1+rand()%1000);
}
void dicas (int num, int pass, int tent)
{
if (numpass)
{
printf ("\nDica: O numero e menor que %d!",num);
}
else
{
system ("clear || cls");
printf("\n\nParabéns! Voce acertou!\n\nO numero sorteado foi %d\n\nNumero de tentativas: %d\n", pass, tent);
}
}
}
int main ()
{
int num, pass, tent;
pass=aleatorio();
tent=1;
printf ("Prepare-se para o desafio!\n\n");
do
{
printf ("\n\nTente adivinhar o numero sorteado entre 0 e 1000: ");
scanf("%d", &num);
if (num<1 || num>1000)
{
printf ("Opcao invalida!\nDigite um valor entre 0 e 1000!");
}
else
{
void dicas (num,pass,tent);
}
printf ("\nTentativas: %d", tent++);
} while (num!=pass);
getch ();
}
#include
#include
#include
void jogar (void);
void dica (int x, int num);
int calc_x (void);
int main(void)
{
int opcao, op = 1;
printf(" ----- Bem vindo ao QUAL EH O NUMERO versao 1.0 ----- \n\n");
printf("Voce deseja: \n1. Jogar\n2. Sair\n\n");
printf("Opcao: \n");
scanf("%d", &opcao);
do {
switch (opcao){
case 1:
jogar ();
break;
case 2:
break;
}
printf("\n\nJogar novamente?\nSim: Digite qualquer numero\nNao: Digite 0 \n");
scanf("%d", &op);
} while (op);
printf("\nSaindo...\nDesenvolvido por Fernando Barbosa\n");
return 0;
}
void jogar (void){
int i, num, x;
printf("\n --- Sorteando número entre 1 e 1000... --- \n\n");
x = calc_x();
printf("Comecou!!! Tente adivinhar o numero!!!\n\n");
do {
for(i = 1; i < 100; i++){
printf("Tentativa %d: ", i);
scanf("%d", &num);
dica(x, num);
if (x == num){
break;
}
}
} while (num =! x);
printf("\nParabens!!! Voce acertou o numero em %d tentativas\n", i);
}
int calc_x (void){
int valor_x;
srand( (unsigned)time(NULL) );
valor_x = 1 + (rand() % 10);
return valor_x;
}
void dica(int x, int num){
if (x > num){
printf("O numero sorteado eh maior que %d\n", num);
}
if (x < num){
printf("O numero sorteado eh menor que %d\n", num);
}
}
Eu fiz um com dificuldade selecionada pelo usuário. Eu coloquei os códigos aqui no Pastebin.
Eu consegui nesse:
#include
#include
#include
int main (){
system("color 09");
int pass , attempt, certo ,
count = 1;
srand((unsigned)time(NULL));
pass = 1 + (rand() % 1000);
printf("ACERTE O NUMERO : ");
scanf("%d",&attempt);
count++;
do{
count++;
if (attempt > pass){
printf("Tente um numero mais baixo...");
scanf("%d",&attempt);
}
if (attempt < pass){
printf("Tente um numero maior ...");
scanf("%d",&attempt);
}
if (attempt == pass){
printf("PARABENS VOCE ACERTOU EM %d TENTATIVAS \n" , count);
break;
}
}
while(attempt);
}
#include
#include
#include
#include
#include
int main()
{
setlocale(LC_ALL,"");
int count=0,x,xrand,decisao;
printf("--------------------------------JOGO DO ETEVALDO--------------------------------\n");
srand((unsigned)time(NULL));
xrand= rand()%1001;
printf("Advinhe o número que estou pensando!\nDigite um número de 0 a 1000\n");
while(x!=xrand)
{
count++;
scanf("%d",&x);
if(x==xrand)
{
printf("\n\nAté que enfim acertou!!!\nDepois de %d tentativas fica fácil né terráqueo?\n",count);
printf("Bora jogar mais uma?\n");
printf("1.Bora\n2.Nem?\n");
scanf("%d",&decisao);
switch(decisao)
{
case 1:
system("cls");
main();
break;
default:
system("cls");
printf("Também nem queria,bye!");
getche();
break;
}}
else
printf("Errooou!\n-------------------------------------------------\n");
if(x<xrand)
printf("Que tal tentar um número maior que o seu?\n");
else
printf("Que tal tentar um número menor que o seu?\n");
}
}
Eu acho que existe um erro no enunciado do problema. A parte onde diz: "o programa deverá dizer em quantas tentativas o usuário acertou.", pelo modo como a variável "attempt" é incrementada deveria ser: "o programa deverá dizer em quantas tentativas o usuário REALIZOU.". Porque é isso que o jogo está fazendo.
#include
#include
#include
int sortear()
{
srand((unsigned)time(NULL));
return(1 + (rand() % 1000));
}
main(void)
{
int control, sort, num;
sort = sortear();
printf("\tTente acertar qual eh o numero aleatorio\n");
for(control=1;; control++)
{
scanf("%d", &num);
if(num < sort)
{
printf("O numero sorteado eh maior que %d\n", num);
}
else if(num > sort)
{
printf("O numero sorteado eh menor que %d\n", num);
}
else
{
printf("\n\tParabens, voce acertou!!\n\to numero eh %d\n\t e voce acertou na %d vez\n", num, control);
break;
}
}
return 0;
}
Eu tentei, e acho q ficou legal !!!
#include stdio. h
#include time. h
int sortear()
{
srand((unsigned)time(NULL));
return(1 + (rand() % 1000));
}
main(void)
{
int control, sort, num;
sort = sortear();
printf("\tTente acertar qual eh o numero aleatorio\n\t\t\tEntre 1 e 100\n");
for(control=1;; control++)
{
printf("[%d] tentativa: ", control);
scanf("%d", &num);
//verificar se os números são válidos
if(num > 0 && num < 1000)
{
if(num < sort) // testes
{
printf("O numero sorteado eh maior que %d\n\n", num);
}
else if(num > sort)
{
printf("O numero sorteado eh menor que %d\n\n", num);
}
else
{
printf("\n\tParabens, voce acertou!!\n\to numero eh %d\n\t e voce acertou na %d vez\n", num, control);
break;
}
}
else // caso o numero for menor que 0 e maior que 1000
{
printf("\n\tCaractere invalido\n\tVoltar apartir do inicio");
getch();
control = 0;
system("cls");
}
}
return 0;
}
Ta dando certo mas tem como melhorar?
#include
#include
#include
int GerarNum(void);
int Jogo(int valor);
void choice(int num,int valor,int tent);
int main()
{
int choice,resp;
do
{
resp=GerarNum();
choice=Jogo(resp);
}while(choice);
printf("\t \t \t FIM DE JOGO!!!\n");
}
int GerarNum(void)
{
int resp;
srand((unsigned)time(NULL));
resp=1+(rand()%1000);
return resp;
}
void choice(int num,int valor,int tent)
{
if(valor>num)
{
printf("Tentativa %d:Numero sorteado é maior que %d\n",tent,num);
printf("Digite novamente\n");
}
if(valor<num)
{
printf("Tentativa %d:Numero sorteado é menor que %d\n",tent,num);
printf("Digite novamente\n");
}
}
int Jogo(int valor)
{
int resp,num,tent=0;
int escolha;
printf("GAME ON\n");
printf("Digite o numero sorteado que esta entre 1 e 1000.\n");
do
{
scanf("%d",&num);
tent++;
choice(num,valor,tent);
}while(valor!=num);
printf("Parabens vc acertou o numero:%d em %d tentativa(s)\n",num,tent);
printf("Digite 0 para sair ou outro numero para continuar:");
scanf("%d",&escolha);
return escolha;
}
#include
#include
void introducao() {
printf("*********************\n"
"* Adivinhe o numero *\n"
"*********************\n"
"Bem vindo(a) ao jogo!\n"
"Informe um numero entre 1 e 1000.\n"
"Tente acertar com o menor numero de tentativas.\n\n");
}
int sorteio() {
srand((unsigned) time(NULL));
return (rand() % 1000) + 1;
}
void iniciar() {
int numero = sorteio();
int jogador;
int tentativas = 0;
do {
tentativas++;
printf("Tentativa %d\n"
"Informe um numero: ", tentativas);
scanf(" %d", &jogador);
if (jogador == numero) {
printf("\nParabens voce acertou.\n"
"Numero de tentativas %d\n\n", tentativas);
break;
}
if (jogador > numero) {
printf("Voce informou um numero maior.\n\n");
continue;
}
if (jogador < numero) {
printf("Voce informou um numero menor.\n\n");
continue;
}
} while (1);
}
int continuar() {
char continuar;
printf("Para jogar novamente digite N|n ou para sair S|s: ");
do {
scanf(" %c", &continuar);
if (continuar == 'N' || continuar == 'n') {
system("clear");
continuar = 1;
break;
}
if (continuar == 'S' || continuar == 's') {
continuar = 0;
break;
}
system("clear");
printf("Por favor informe N|n para jogar novamente ou S|s: para sair: ");
} while (1);
return continuar;
}
int main() {
int c;
do {
introducao();
iniciar();
c = continuar();
} while (c);
}
Nao li a resuluçao e fui direto tentar fazer, deu certo assim:
#include
#include
#include
int main(void)
{
int teste,
chute,
tentativa=0;
srand((unsigned)time(NULL));
teste=(rand()%999);
teste++;
printf("Chute um numero entre 1 e 1000... ");
do
{
scanf("%d", &chute);
fflush(stdin);
tentativa=tentativa+1;
printf("\n\n");
if(chute==teste)
{
printf("Voce acertou com apenas %d tentativa(s)!\n\n", tentativa);
break;
}
else
{
if(chute>teste)
{
printf("O seu chute eh muito alto.\n");
}
else
{
printf("O seu chute eh muito baixo.\n");
}
}
}
while(chute!=teste);
return 0;
}
#include
#include
#include
int ramdom (void);
int tentativa (int);
int main(void)
{
int ramdomOut, tentativa_out;
do
{
printf("Sorteando numero entre 1 e 1000... \n");
ramdomOut = ramdom();
printf("Comecou! Tente advinhar o numero! \n");
tentativa_out = tentativa(ramdomOut);
}while( tentativa_out != 0 );
}
int ramdom (void)
{
int ramdom;
srand( (unsigned)time(NULL) );
ramdom = 1 + rand()%1000;
printf(" Funcao ramdom - return ramdomOut = %d\n", ramdom );
return ramdom;
}
int tentativa (int tentativaInput)
{
int number, counter = 1;
//printf("Funcao Tentativa - Recebe ramdomOut = %d \n", tentativaInput);
do
{
printf("\n Tentativa %d: ", counter);
scanf("%d", &number);
if ( number < tentativaInput )
printf("\n O numero sorteado e maior que: %d", number);
else if ( number > tentativaInput )
printf("\n O numero sorteado e menor que: %d", number);
else
{
printf("\n Parabens! Voce acertou o numero em %d tentativas!", counter);
printf("\n Digite 0 para sair, ou qualquer numero para continuar");
scanf("%d", &number);
system("cls || clear");
if ( number == 0 )
{
return number;
break;
}
else
{
return number;
break;
}
}
counter++;
}while( tentativaInput != 0 );
}
Consegui fazer um simples:
#include
#include
#include
int main(void)
{
int num,
tent=1,
chute;
printf("Em que numero de 1 a 1000 eu estou pensando?...\n");
scanf("%d", &chute);
srand ((unsigned) time (NULL));
num = (rand()%999)+1;
for(; chute!=num; tent++)
{
if(chute>num)
printf("Numero muito alto!\n");
else
printf("Numero muito baixo!\n");
scanf("%d",&chute);
}
printf("Parabens, voce acertou em %d tentativas!\n\n",tent);
return 0;
}
O problema do seu codigo pode ser na função dicas
O problema pode ser na funçao dicas()
ae boy que aplicativo ses usa
Postar um comentário