Ir ao conteúdo

Posts recomendados

Postado

Jogo é simples, dando exemplo... você tem que adivinhar um número que seja de 0 a 1000, tendo 15 tentativas, a pessoa diz 800, o programa diz 'numero esta entre 0 e 800', mas digamos que a pessoa sabendo disso ainda sim ela vai e bota 801 mesmo sabendo que o programa disse que esta entre 0 e 800, dai quero colocar uma mensagem do tipo 'numero invalido' e assim não consumir a tentativa que a pessoa tem mesmo ela sendo 'burra' e digitando um numero que é certo não ter. Segue o codigo.

https://onlinegdb.com/Ig6JSY0cH

 

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

int main(){
    
    setlocale(LC_ALL,"Portuguese");
	int nivel, tamanho, numeroTentativas = 0, numeroAleatorio;
	
	printf("------------------------------------------------------------------------------\n");
	printf("\t\t\t         FOI GERADO UM NÚMERO\n");
	printf("\t\t\t            TENTE A SORTE\n");
	printf("\t\t\t SERA QUE ELA ESTA AO SEU FAVOR? VEREMOS\n");
	printf("------------------------------------------------------------------------------\n");
	
	printf("(1) Nivel fácil! (5 Tentativas e o numero é de 0 ate 10)\n");
	printf("(2) Nivel intermediario! (10 Tentativas e o numero é de 0 ate 100)\n");
	printf("(3) Nivel difícil! (15 Tentativas e o numero é de 0 ate 1000)\n");
	printf("(4) Nivel insano! (3 Tentativas e o numero é de 0 ate 1000)\n");
	printf("(5) Nivel impossível! (1 Tentativa e o numero é de 0 ate 1000)\n");
	printf("Escolha o nivel que deseja jogar: ");
    scanf("%d", &nivel);
    switch (nivel){
        case 1 :
    		tamanho = 10;
    		numeroTentativas = 5;
    		break;
    		
		case 2 :
			tamanho=100;
			numeroTentativas = 10;
			break;
			
		case 3 :
			tamanho = 1000;
			numeroTentativas = 15;
			break;
			
		case 4 :
			tamanho = 1000;
			numeroTentativas = 3;
			break;
			
		case 5 :
			tamanho = 1000;
			numeroTentativas = 1;
			break;	
        
        default : //Caso não corresponda à nenhum nível
            printf ("\nOpção inválida!\n");
            printf ("\nPressione enter para continuar...\n");
            while(getchar() != '\n');
            getchar();
            return 0;
    }
    
	srand(time(NULL));
	numeroAleatorio = rand() % tamanho + 1;
	int numero, minimo = 0, maximo = tamanho, jogadas = 0, cont=0;
	 
	do{
		printf("Digite o número: ");
		scanf("%d", &numero);
		jogadas++;
		
		if(numero > numeroAleatorio){
			if (numero < maximo) maximo = numero;
			printf("O número está entre %d e %d\n", minimo, maximo);
			printf("Você têm %d jogadas restantes...\n", numeroTentativas-jogadas);
	} else if (numero < numeroAleatorio){
			if (minimo < numero) minimo = numero;
			printf("O número está entre %d e %d\n",  minimo, maximo);
			printf("Você têm %d jogadas restantes...\n", numeroTentativas-jogadas);
		} else{ 
			printf("\nParabéns! você acertou com %d jogadas!\n", jogadas);
			cont = numeroTentativas; //Encerra o loop
		}
			
	    cont++;	
	}while (cont < numeroTentativas); //Limite de jogadas
    
    if(jogadas == numeroTentativas && cont <= numeroTentativas){
        printf("\nVocê errou todas as jogadas! Você perdeu!");
      	printf("\nO número sorteado era: %d\n", numeroAleatorio);
    }
    else{
        printf("\nVocê errou %d jogadas!\n", jogadas-1);
    }
	
	return 0;
}

 

  • Curtir 1
Postado

@devair1010 mensagem é de boa, questão é tipo, 0 a 1000, ai tu digita 800, logo o programa fala para digitar numero de 0 a 800, dai a pessoa digita 801 mesmo sabendo que o numero é entre 0 a 800, e com isso não vai contar a jogada saca? Junto com uma mensagem de 'erro' pedindo para digitar numero novamente.

 

  • Obrigado 1
Postado

@Ricardo José Você só precisa checar se o numero está na faixa definida.

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

#define T_BUFFER 256

const char *NOME_NIVIEL[] = {
    "fácil",
    "intermediario",
    "difícil",
    "insano",
    "impossível"
};

const char *FACES_TENTATIVAS[] = {
    "(╯° o °)╯︵ ┻━┻",
    "ಠ_ಠ",
    "⊙ ﹏ ⊙",
    "(´・ _ ・ `)",
    "◔_◔",
    "( ˇ෴ˇ )",
    "@_@"
};

const char QUANTIDADE_FACES = 7;

enum niveis_jogo {
    JOGO_FACIL = 0,
    JOGO_INTERMEDIARIO,
    JOGO_DIFICIO,
    JOGO_INSANO,
    JOGO_HELL,
    JOGO_QUANTIDADE_NIVIES
};

struct faixa_tentativa
{
    int inicio, fim;
};

struct conteinder_tentativa
{
    struct faixa_tentativa faixa;
    int quantidade;
    int numero;
};

struct conteinder_tentativa NIVEIS[] = {
    {0, 10, 5, 0},
    {0, 100, 10,0},
    {0, 1000, 15,0},
    {0, 1000, 3,0},
    {0, 1000, 1,0}
};

void
pausa_msg(char *msg)
{
    char buff[256];
    if (msg != NULL) {
        printf("%s\n", msg);
    }
    printf("Pressione enter para continuar.\n");
    fgets(buff, T_BUFFER, stdin);
}

int main(void)
{
    struct conteinder_tentativa tentativa;
    char buffer[T_BUFFER];
    int opcao;
    int vitoria = 0;
    do {
        printf("------------------------------------------------------------------------------\n");
	    printf("\t\t\t         FOI GERADO UM NÚMERO\n");
	    printf("\t\t\t            TENTE A SORTE\n");
	    printf("\t\t\t SERA QUE ELA ESTA AO SEU FAVOR? VEREMOS\n");
	    printf("------------------------------------------------------------------------------\n");
	
	    printf("(1) Nivel fácil! (5 Tentativas e o numero é de 0 ate 10)\n");
	    printf("(2) Nivel intermediario! (10 Tentativas e o numero é de 0 ate 100)\n");
	    printf("(3) Nivel difícil! (15 Tentativas e o numero é de 0 ate 1000)\n");
	    printf("(4) Nivel insano! (3 Tentativas e o numero é de 0 ate 1000)\n");
	    printf("(5) Nivel impossível! (1 Tentativa e o numero é de 0 ate 1000)\n");
	    printf("Escolha o nivel que deseja jogar: ");
	    fgets(buffer, T_BUFFER, stdin);
	    sscanf(buffer, "%i", &opcao);
	    if (opcao-1 < 0 || opcao-1 > JOGO_QUANTIDADE_NIVIES) {
	        pausa_msg("Opcao invalida!");
	    }
    } while (opcao-1 < 0 || opcao-1 > JOGO_QUANTIDADE_NIVIES);
    tentativa = NIVEIS[opcao-1];
    srand(time(NULL));
    tentativa.numero = rand()%tentativa.faixa.fim;
    do {
        int numero = 0;
        printf("Tentativas restantes:%i\n", tentativa.quantidade);
        if (tentativa.quantidade < QUANTIDADE_FACES) {
            printf("%s\n", FACES_TENTATIVAS[tentativa.quantidade-1]);
        } else {
            printf("%s\n", FACES_TENTATIVAS[QUANTIDADE_FACES-1]);
        }
        do {
            printf("Digite o número: ");
            fgets(buffer, T_BUFFER, stdin);
            sscanf(buffer, "%i", &numero);
        } while (*buffer == '\n');
        /* Verifica se está na faixa */
        if (numero < tentativa.faixa.inicio || numero > tentativa.faixa.fim) {
            pausa_msg("O numero esta fora da faixa!");
        } else if (numero == tentativa.numero) {
            pausa_msg("Parabens voce ganhou!");
            vitoria = 1;
        } else if (numero > tentativa.numero) {
            pausa_msg("Chute um numero mais baixo da proxima vez ;)");
            tentativa.quantidade--;
        } else {
            pausa_msg("Chute um numero mais alto da proxima vez ;)");
            tentativa.quantidade--;
        }
    } while (tentativa.quantidade > 0 && vitoria != 1);
    if (vitoria) {
        printf("Parabens voce acaba de ganhar o jogo no niviel %s\n", NOME_NIVIEL[opcao-1]);
        pausa_msg(NULL);
    } else {
        pausa_msg("Que pena voce perdeu, mais sorte da proxima vez!");
    }
    return(0);
}

Deve fica bem esquisito no windows :)

Versão online!

  • Obrigado 1
Postado

@kgin Ficou bem estranho sim kkkkkkkkkkk mas deu para entender, verificação da faixa funciona uma vez só, mas se eu isistir em colocar numero fora da faixa novamente ainda conta a jogada. Estava pensando em algo que mesmo se o cara digitar 2000x fora da caixa ainda não contasse a jogada saca?

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!