maikonsx

JogoMemoria

Dec 10th, 2016
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.36 KB | None | 0 0
  1. //Jogo da Memória
  2. //Desenvolvido por: Maicon Fuck, Jean Severino, Gabriel Moreschi, Douglas Kelczeski e Diego Nóbrega
  3. //Versão Final
  4. //Programação Estruturada - IFSC-Instituto Federal de Santa Catarina
  5.  
  6. //Declaração das bibliotecas utilizadas:
  7. #include <stdio.h>
  8. #include <time.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <sys/time.h>
  12.  
  13. void mostrarcampo(int l, int c, int matriz[][6]);
  14. void startgame(int l, int c, int matriz[][6], int matriz2[][6]);
  15. void opcoesusuario(int matriz[][6], int matriz2[][6], int l, int c);
  16. void ajuda();
  17.  
  18. //Função principal do Jogo
  19. void main() {
  20.  
  21.     system("clear");
  22.  
  23.     int i, l, c, opcao;
  24.     int matriz[6][6];
  25.     int matriz2[6][6];
  26.  
  27.     puts("+--------------------------------------------------+");
  28.     puts("|                __                                |");
  29.     puts("|                 | _  _  _   _| _                 |");
  30.     puts("|               __|(_)(_)(_) (_)(_|                |");
  31.     puts("|                      _|                          |");
  32.     puts("|           ___    ___                             |");
  33.     puts("|          | _ |  | _,|   |//| _  _  _  _ º _      |");
  34.     puts("|          ||_||  |(_)|   |  |(/_|||(_)|  |(_|     |");
  35.     puts("|          |___|  |___|                            |");
  36.     puts("|         ___    ___                               |");
  37.     puts("|        | _,|  | _ |                              |");
  38.     puts("|        |(_)|  ||_||                              |");
  39.     puts("|        |___|  |___|                              |");
  40.     puts("|                                                  |");
  41.     puts("+--------------------------------------------------+");
  42.  
  43.     //Laço de repetição para o menu do jogo
  44.     do {
  45.         puts("+--------------------------------------------------+");
  46.         puts("|          JOGO DA MEMÓRIA                         |");
  47.         puts("|         Digite uma opção:                        |");
  48.         puts("|         1) Iniciar o Jogo:                       |");
  49.         puts("|         2) Ajuda                                 |");
  50.         puts("|         3) Sair                                  |");
  51.         puts("+--------------------------------------------------+");
  52.         scanf("%i", & opcao);
  53.  
  54.  
  55.         switch (opcao) {
  56.             case 1:{
  57.                 mostrarcampo(l, c, matriz);
  58.                 puts("+--------------------------------------------------+");    
  59.               printf("|Você tem 30 segundos para memorizar os valores!   |\n");
  60.                 puts("+--------------------------------------------------+");
  61.  
  62.                 sleep(30);  //o campo de valores ficará por 30 segundos na tela, para o jogador gravar alguns numeros.
  63.  
  64.                 startgame(l, c, matriz, matriz2);
  65.                 opcoesusuario(matriz, matriz2, l, c);
  66.                 break;
  67.             }
  68.             case 2:{
  69.                 ajuda();
  70.                 break;
  71.             }
  72.             case 3:{
  73.                 puts("+-------------------------------------+");
  74.               printf("|           GAME OVER!                |\n");
  75.                 puts("+-------------------------------------+");
  76.                 break;
  77.             }
  78.         }
  79.     } while (opcao < 3); //O laço termina aqui
  80. }
  81. void mostrarcampo(int l, int c, int matriz[][6]) {
  82.  
  83.     int valores[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, //Declaração de um vetor com números de 1 a 18, para preenchimento do sorteio da matriz
  84.                       65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82 };
  85.  
  86.     int quantidade = 36;
  87.     int sorteado;
  88.  
  89.     srand(time(NULL)); // seed para gerar numeros aleatórios diferentes toda vez que o jogo é executado
  90.     for (l = 0; l < 6; l++) {
  91.         for (c = 0; c < 6; c++) {
  92.  
  93.             sorteado = rand() % quantidade;
  94.             matriz[l][c] = valores[sorteado];
  95.  
  96.             valores[sorteado] = valores[quantidade - 1];
  97.             --quantidade;
  98.         }
  99.     }
  100.     puts("Tabuleiro do Jogo:");
  101.     puts("+--------------------------------------------------+");
  102.     for (l = 0; l < 6; l++) {
  103.         for (c = 0; c < 6; c++){
  104.             if(c == 0){
  105.                 printf("|");
  106.             }
  107.             printf("%3i\t", matriz[l][c]);
  108.             if(c == 5){
  109.                 printf("   | ");
  110.             }
  111.         }
  112.         puts("");
  113.     }
  114.     puts("+--------------------------------------------------+");
  115. }
  116. void startgame(int l, int c, int matriz[][6], int matriz2[][6]) {
  117.  
  118.     int cont = 0, armaz, armaz2, erros, acertos = 0, linha, linha2, conta;
  119.  
  120.    for(conta = 0; conta < 100; conta++){
  121.    system("clear");//Diversas vezes será limpada a tela, para evitar consulta na matriz de numeros.
  122.    }
  123.  
  124.     //Matriz preenchida com numeros de 0 a 35 para ser mostrada para o usuário
  125.     puts("+--------------------------------------------------+");
  126.     for (l = 0; l < 6; l++) {
  127.         for (c = 0; c < 6; c++){
  128.             matriz2[l][c] = cont;
  129.             cont = cont+1;
  130.             if(c == 0){
  131.                 printf("|");
  132.             }
  133.                 printf("%3i\t", matriz2[l][c]);
  134.                     if(c == 5){
  135.                         printf("   | ");
  136.                     }
  137.         }  
  138.         puts("");
  139.     }
  140.     puts("+--------------------------------------------------+");
  141. }
  142. void opcoesusuario(int matriz[][6], int matriz2[][6], int l, int c){
  143.  
  144.    
  145.     int cont = 0, armaz, armaz2, erros = 0, acertos = 0, linha = 100, linha2 = 100, trava = 0, trava2 = 0, minutos, segundos;
  146.  
  147.     struct timeval inicio, final;
  148.     int tmili;
  149.     gettimeofday(&inicio, NULL);
  150.  
  151. do {
  152.  
  153.         do{
  154.             printf("Digite o 1º valor que deseja revelar: \n");
  155.                 scanf("%i", &linha);
  156.                 do{
  157.                     printf("Digite o 2º valor que deseja revelar: \n");
  158.                     scanf("%i", &linha2);
  159.                 }while(linha2 == linha && linha2 == linha2);
  160.         }while(linha == trava && linha2 == trava2);
  161.        
  162.         for(l=0; l<6;l++){//Matriz para encontrar a posição da 1ª escolha do jogador.
  163.             for(c=0; c<6; c++){
  164.                 if(linha == matriz2[l][c]){
  165.                     armaz = matriz[l][c];
  166.                     //printf("%i\n", matriz[l][c]);
  167.                 }
  168.             }
  169.         }  
  170.           puts("+----------------------+");    
  171.         printf("|Primeiro Valor: %i    |\n", armaz);
  172.           puts("+----------------------+");
  173.  
  174.         for (l = 0; l < 6; l++) {//Matriz para encontrar a posição da 2ª escolha do jogador.
  175.             for (c = 0; c < 6; c++) {
  176.                 if(linha2 == matriz2[l][c]){
  177.                     armaz2 = matriz[l][c];
  178.                     //printf("%i\n", matriz[l][c]);
  179.                 }
  180.             }
  181.         }
  182.  
  183.           puts("+----------------------+");    
  184.         printf("|Segundo Valor: %i     |\n", armaz2);
  185.           puts("+----------------------+");
  186.  
  187.  
  188.         if (armaz == armaz2) {//compara se os valores são iguais, se sim imprime acerto e adiciona +1 na contagem, se não imprime erro e adiciona +1 na contagem.
  189.             puts("+-----------------------------+");
  190.             puts("|Acertou! Continue Assim!!    |");
  191.             puts("+-----------------------------+");
  192.             acertos = acertos + 1;
  193.  
  194.             for(l=0; l<6; l++){//Matrizes para substituir os valores escolhidos pelos numeros da matriz principal
  195.                 for(c=0; c<6; c++){
  196.                     if(linha == matriz2[l][c]){
  197.                         matriz2[l][c] = matriz[l][c];
  198.                     }
  199.                 }
  200.             }
  201.             for(l=0; l<6; l++){
  202.                 for(c=0; c<6; c++){
  203.                     if(linha2 == matriz2[l][c]){
  204.                         matriz2[l][c] = matriz[l][c];
  205.                     }
  206.                 }
  207.             }
  208.  
  209.             puts("+--------------------------------------------------+"); //Exibição da matriz com os numeros que o jogador acertou.
  210.             for (l = 0; l < 6; l++) {
  211.                 for (c = 0; c < 6; c++) {
  212.                     if(c == 0){
  213.                         printf("|");
  214.                     }
  215.                     printf("%3i\t", matriz2[l][c]);
  216.                     if(c == 5){
  217.                         printf("   |  ");
  218.                     }
  219.                 }
  220.                 puts("");
  221.             }
  222.             puts("+--------------------------------------------------+");
  223.  
  224.          trava = linha;
  225.          trava2 = linha2;
  226.  
  227.         } else {
  228.  
  229.             puts("+-----------------------------+");
  230.             puts("|  Errou, tente novamente!    |");
  231.             puts("+-----------------------------+");
  232.             puts("+--------------------------------------------------+"); //Exibição da matriz com os numeros acertados pelo usuários, se não acertou nenhum ainda permanece como estava.
  233.             for (l = 0; l < 6; l++) {
  234.                 for (c = 0; c < 6; c++) {
  235.                     printf("%3i\t", matriz2[l][c]);
  236.                 }
  237.                 puts("");
  238.             }
  239.             puts("+--------------------------------------------------+");
  240.             erros = erros + 1;
  241.         }
  242.        
  243.          puts("+---------------------+");    
  244.        printf("|Acertos:%i            |\n", acertos);
  245.          puts("+---------------------+");
  246.  
  247.           puts("+---------------------+");    
  248.         printf("|Erros:%i              |\n", erros);
  249.           puts("+---------------------+");
  250.        
  251.     } while (acertos < 18);
  252.  
  253.     gettimeofday( & final, NULL);
  254.     tmili = (int)(1000 * (final.tv_sec - inicio.tv_sec) + (final.tv_usec - inicio.tv_usec) / 1000);
  255.  
  256.     minutos = tmili / 60000; //minuto em milisegundos!
  257.     segundos = (tmili-(minutos*60000))/1000;
  258.  
  259.     printf("O tempo foi de %i minutos e %i segundos!\n", minutos, segundos);
  260.  
  261. }
  262. void ajuda(){
  263.  
  264.      puts("+--------------------------------------------------+");
  265.      puts("|          AJUDA SOBRE o JOGO!                     |");
  266.      puts("| O jogo consiste em conseguir encontrar os pares  |");
  267.      puts("| de valores iguais. Portanto, você deve escolher  |");
  268.      puts("| os valores que deseja revelar na matriz com      |");
  269.      puts("| números de 0 a 35, se os números forem iguais    |");
  270.      puts("| você acerta um par, ao contrário terá que tentar |");
  271.      puts("| novamente. O jogo só é finalizado quando todos   |");
  272.      puts("| os pares de números forem revelados!             |");
  273.      puts("+--------------------------------------------------+");
  274.  
  275. }
Advertisement
Add Comment
Please, Sign In to add comment