Ir para conteúdo
Henrique Ferreira Silva

Como avisar para o usuário que ele já jogou o mesmo número

Recommended Posts

// incluindo as bibliotecas
#include <stdio.h>
#include <locale.h> // biblioteca para definição de configurações locais
#include <stdlib.h>
#include <time.h>
// definindo as constantes
#define NUMERO_DE_TENTATIVAS 3
#define FACIL 20
#define MEDIO 15
#define DIFICIL 6
#define PONTOS_INICIAL 1000
int main() {
    volta:
    setlocale(LC_ALL, "Portuguese"); // Definição para uso de configurações em português; Usei por causa da acentuação no compilador
    //imprimi cabeçalho bonito do jogo
    printf("\n\n");
    printf("          P  /_\\  P                              \n");
    printf("         /_\\_|_|_/_\\                            \n");
    printf("     n_n | ||. .|| | n_n         Bem vindo ao     \n");
    printf("     |_|_|nnnn nnnn|_|_|     Jogo de Adivinhação! \n");
    printf("    |\" \"  |  |_|  |\"  \" |                     \n");
    printf("    |_____| ' _ ' |_____|                         \n");
    printf("          \\__|_|__/                              \n");
    printf("\n\n");
    
    // declarando variaveis que serão usadas mais a frente
    int chute;
    int acertou;
    int nivel;
    int totaldetentativas;
    int limite;
    int voltar;
    
    // difinindo a quantidade de pontos inicial
    double pontos = 1000;
    
    //gerando um número secreto aleatório
    printf("Escolha o limite: ");
    scanf("%d", &limite);
    
    srand(time(0));
    int numerosecreto = rand() % limite;
    
    // escolhendo o nivel de dificuldade
    printf("Qual o nível de dificuldade?\n");
    printf("(1) Fácil (2) Médio (3) Difícil\n\n");
    printf("Escolha: ");
    
    scanf("%d", &nivel);
    
    switch(nivel) {
        case 1:
            totaldetentativas = 20;
            break;
        case 2:
            totaldetentativas = 15;
            break;
        default:
            totaldetentativas = 6;
            break;
    }
    
    // loop principal do jogo
    for(int i = 1; i <= totaldetentativas; i++) {
        
        printf("-> Tentativa %d de %d\n", i, totaldetentativas);
        
        printf("Chute um número: ");
        scanf("%d", &chute);
        
        // tratando chute de número negativo
        if(chute < 0) {
                printf("Você não pode chutar números negativos\n");
                i--;
                continue;
        }
        
        // verifica se acertou, foi maior ou menor
        acertou = chute == numerosecreto;
    
        if(acertou) {
                break;
        } else if(chute > numerosecreto){
                printf("\nSeu chute foi maior do que o número secreto!\n\n");
        } else {
                printf("\nSeu chute foi menor do que o número secreto!\n\n");
        }
        
        // calcula a quantidade de pontos
        double pontosperdidos = abs(chute - numerosecreto) / 2.0;
        pontos = pontos - pontosperdidos;
    }
    
    // imprrimindo mensagem de vitória ou derrota
    printf("\n");
    if(acertou) {
            printf("             OOOOOOOOOOO               \n");
            printf("         OOOOOOOOOOOOOOOOOOO           \n");
            printf("      OOOOOO  OOOOOOOOO  OOOOOO        \n");
            printf("    OOOOOO      OOOOO      OOOOOO      \n");
            printf("  OOOOOOOO  #   OOOOO  #   OOOOOOOO    \n");
            printf(" OOOOOOOOOO    OOOOOOO    OOOOOOOOOO   \n");
            printf("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO  \n");
            printf("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO  \n");
            printf("OOOO  OOOOOOOOOOOOOOOOOOOOOOOOO  OOOO  \n");
            printf(" OOOO  OOOOOOOOOOOOOOOOOOOOOOO  OOOO   \n");
            printf("  OOOO   OOOOOOOOOOOOOOOOOOOO  OOOO    \n");
            printf("    OOOOO   OOOOOOOOOOOOOOO   OOOO     \n");
            printf("      OOOOOO   OOOOOOOOO   OOOOOO      \n");
            printf("         OOOOOO         OOOOOO         \n");
            printf("             OOOOOOOOOOOO              \n");
            printf("\nParabéns! Você acertou!\n");
            printf("Você fez %.2f pontos. Até a próxima!\n\n", pontos);
    } else {
        printf("       \\|/ ____ \\|/    \n");   
        printf("        @~/ ,. \\~@      \n");   
        printf("       /_( \\__/ )_\\    \n");   
        printf("          \\__U_/        \n");
        
            printf("\nVocê perdeu! Tente novamente!\n\n");
    }
    
    while(voltar = 1) {
    printf("Digite 1 para voltar.\n");
    printf("Você quer jogar novamente? ");
    scanf("%d", &voltar);
    
    goto volta;
    }
    
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma lista com as jogadas não repetidas já feitas e a cada nova jogada procure se o número está lá.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 27/10/2017 at 18:02, _Isis_ disse:

Crie uma lista com as jogadas não repetidas já feitas e a cada nova jogada procure se o número está lá.

Exatamente. Como o número máximo de jogadas será 20 então dá para fazer o vetor de jogadas com 20 posições. Cada vez que joga um número não-repetido armazena nele para depois comparar.

 

Adiciona na função main o novo vetor de jogadas e as novas variáveis de controle:

int vetor_de_jogadas[20],jogadas_armazenadas=0,j;

e depois adiciona essas linhas após ler a tentativa do jogador:

if (i==1){
  vetor_de_jogadas[0]=chute;
  jogadas_armazenadas++;
}
else{
  for(j=0;j<jogadas_armazenadas;j++)
    if(chute==vetor_de_jogadas[j]){
      printf("tentativa ja realizada");
      break;
    }
  if(j==jogadas_armazenadas){
    vetor_de_jogadas[j]=chute;
    jogadas_armazenadas++;
  }
}

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

  • Conteúdo Similar

    • Por Xinitrc
      Estou fazendo ainda em design uma calculadora de decimo terceiro salário em QT Creator com linguagem C com GTK.
       
      Tem 3 TextEdit
      Tem 3 Labels
      Tem 3 Buttons
       
      Botão Calcular
      Botão Apagar
      Botão Sair
       
      O botão calcular deve calcular da seguinte maneira
       
      TextEdit3=TextEdit1 * TextEdit2/12, que vai dar o decimo terceiro salário,a logica está certa,mas não está funcionando meu programa no QT Creator.
       
      Alguém pode me ajudar?
    • Por JoaoV-26
      olá,
       
      Eu preciso fazer uma matriz 7x7 que imprima caractere 'x' e 'o' porém o x precisar ser nas duas diagonais, fazer a matriz e imprimir o x em uma diagonal eu consegui porém não estou conseguindo de jeito nenhum imprimir na outra diagonal, a matriz precisa sair assim: 
       
      x o o o o o x
      o x o o o x o
      o o x o x o o 
      o o o x o o o
      o o x o x o o
      o x o o o x o
      x o o o o o x
       
      a minha está saindo assim (foto em anexo)
       
      Meu código:

       
      #include<stdio.h> int main(){          int i, j;     char str[2]="x", str1[2]="o";                for(i=1; i<=7; i++){         for(j=1;j<=7; j++)              if(i+j == 7+1){                      printf("%s", str);                      }else                      printf("%s", str1);                      printf("\n");          }      } Alguém pode me ajudar, como faço para outra diagonal sair 'x' também ?????

    • Por llucaahenri
      Bom dia!
      Sou iniciante nessa área de programação, estou aprendendo sobre vetores e matrizes e gostaria de saber como faço para calcular elementos de um vetor e de uma matriz, eu tentei fazer usando laço For, mas não consegui.
      Esse exercício que estou tentando fazer.  
      Leia um vetor de 12 posições e em seguida ler também dois valores X e Y quaisquer correspondentes a duas posições no vetor. Ao final seu programa deverá escrever a soma dos valores encontrados nas respectivas posições X e Y.
      Meu código!
       
      #include <stdio.h> #include <stdlib.h> #include <locale.h> int main() {     setlocale(LC_ALL, "Portuguese");     int VetorX[12], VetorY[12];     int Result, X, Y, i, j;     for(i = 1; i < 13; i++){ // Ler os Valores;         printf("[%d] Digite um número do Vetor X. \n", i);         scanf("%d", &X);     }     for(i = 1; j < 13; j++){ // Ler os Valores;         printf("[%d] Digite um número do Vetor Y. \n", j);         scanf("%d", &Y);     }         for(i = 0; i < 13; i++){             Result =+ VetorX;             printf("O resultado é%d", Result);         }     return 0; }
       
    • Por thisis_paulo
      Olá pessoal, sou iniciante tanto aqui no fórum tanto na linguagem c++.
      Estou tentando resolver o seguinte algoritmo:
       
      Calcule as médias das notas escolares de um aluno (media 1º bimestre, media 2º bimestre, media final) sendo que:
      As notas das provas parciais 1 e 2 equivalem a 30% da nota total do bimestre 1 e 2;
      As notas das provas oficiais 1 e 2 equivalem a 70% da nota total do bimestre 1 e 2;
      A nota total do bimestre 1 equivale a 40% da nota final do semestre;
      A nota total do bimestre 2 equivale a 60% da nota final do semestre;
       
      Utilize structs para armazenar a notas e medias e referencie cada elemento por ponteiros no main.
       
      Segue abaixo, a minha tentativa.
      Não estou conseguindo guardar as notas pedidas no main no vetor de notas dentro da struct, estou usando cin para fazer isso, uma solução mais adequada para realizar este procedimento?
       
      - Biblioteca
      typedef struct notas { float parcial[2], *p1, *p2; float oficial[2], *of1, *of2; float exame, *ex; } NotasProvas; void NotaBim1 (NotasProvas &notas, float *p1, float *of1); void NotaBim2 (NotasProvas &notas, float *p2, float *of2); void NotaExame (NotasProvas &notas, float *ex); typedef struct medias { float mediaB1, mediaB2, *m1, *m2; float notaFinal, *nf; float notaTotal, *nt; } MediasNotas; void MediaBim1 (MediasNotas &medias, float *m1); void MediaBim2 (MediasNotas &medias, float *m2); void MediaFinal (MediasNotas &medias, float *m1, float *m2); void MediaTotal (MediasNotas &medias, float *nf, float *ex);  
      - Procedimentos 
      #include "notas.h" void NotaBim1 (NotasProvas &notas, float *p1, *of1) { *p1 = &NotasProvas.parcial[1]; *of1= &NotasProvas.oficial[1]; MediasNotas.mediaB1 = (p1 * 0.3) + (of1 * 0.7); } void NotaBim2 (NotasProvas &notas, float *p2, *of2) { *p2 = &NotasProvas.parcial[2]; *of2 = &NotasProvas.oficial[2]; MediasNotas.mediaB2 = (p2 * 0.3) + (of2 * 0.7); } void MediaFinal (MediasNotas &medias, float *m1, *m2) { *m1 = &MediasNotas.mediaB1; *m2 = &MediasNotas.mediaB2; MediasNotas.notaFinal = (m1 * 0.4) + (m2 * 0.6); } void MediaTotal (MediasNotas &medias, float *nf, *ex) { *nf = &MediasNotas.notaFinal; *ex = &NotasProvas.exame; MediasNotas.notaTotal = (nf + ex) / 2; } - Função Main
      #include <iostream> #include "notas.h" using namespace std; int main() { cout << "\t\t CALCULANDO NOTAS " << endl; cout << endl; cout << "Qual a sua nota da Prova Parcial 01? " << endl; cin >> NotasProvas.p1; cout << "Qual a sua notas da Prova Oficial 01? " << endl; cin >> NotasProvas.of1; cout << "Nota do 1º bimestre: " << MediasNotas.m1 << endl; cout << "\t\t Segundo Bimestre" << endl; cout << endl; cout << "Qual a sua nota na Prova Parcial 02? " << endl; cin >> NotasProvas.p2; cout << "Qual a sua nota na Prova Oficial 02? " << endl; cin >> NotasProvas.of2; cout << "Nota do 2º bimestre: " << MediasNotas.m2 << endl; cout << "Media Final: " << MediasNotas.nf << endl; system("PAUSE"); return 0; } Desde já, agradeço pelas ajudas!
       
       
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.