Advertisement
Guest User

sudoku guilherme rangel

a guest
Jul 30th, 2015
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 26.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. //#include <windows.h>
  5.  
  6. #define M 9 //define o tamanho da matriz
  7. //cabeçalho
  8. void carregarjogo(int mat[M][M], int aux[M][M]);
  9. void salvarjogo(int mat[M][M], int aux[M][M]);
  10. void painel(int mat[M][M], int aux[M][M]);
  11. void gerador(int mat[M][M], int aux[M][M]);
  12. void carregarjogo(int mat[M][M], int aux[M][M]);
  13. void gerazero(int mat[M][M],int aux[M][M]);
  14. void jogadas (int mat[M][M], int aux[M][M]);
  15. void cronometro(int mat[M][M],int aux[M][M]);
  16. void nivel(int mat[M][M], int aux[M][M]);
  17. void gerazerofacil(int mat[M][M], int aux[M][M]);
  18. void gerazeromedio(int mat[M][M], int aux[M][M]);
  19. void gerazerodificil(int mat[M][M], int aux[M][M]);
  20.  
  21.  
  22. void nivel(int mat[M][M], int aux[M][M])
  23. {
  24.     int op,x=0;
  25. printf("\n\t\t\t  @@@@ @  @ @@@   @@@@ @  @ @  @\n\t\t\t  @    @  @ @  @  @  @ @ @  @  @\n\t\t\t  @@@@ @  @ @   @ @  @ @@   @  @\n\t\t\t     @ @  @ @  @  @  @ @ @  @  @\n\t\t\t  @@@@ @@@@ @@@   @@@@ @  @ @@@@\n\n \a");
  26.  
  27.     printf("\n\n\t\t\tSelecione o nivel de dificuldade\n\n\n\n");
  28.     printf("\t1-Facil \t 2-Medio \t 3-Dificil\t 4-Aleatorio\t\t\n\n");
  29.  
  30.     scanf("%d", &op);
  31. while(x==0){
  32.     fflush(stdin);
  33.  
  34.  
  35.  
  36.  
  37.     if(op == 1)
  38.     {
  39.         x=1;
  40.         gerazerofacil(mat,aux);
  41.  
  42.     }
  43.     else if(op == 2)
  44.     {
  45.     x=1;
  46.     gerazeromedio(mat,aux);
  47.     }
  48.     else if(op == 3)
  49.     {
  50.         x=1;
  51.     gerazerodificil(mat,aux);
  52.     }
  53.     else if(op == 4)
  54.     {
  55.     srand(time(NULL)); //semeando o rand
  56.     op=rand()%3+1; // x vai receber 1 numero aleatoria entre 1 e 9
  57.     x=0;
  58.     }
  59.  
  60.     }
  61.     system("cls");
  62. }
  63.  
  64. void carregarjogo(int mat[M][M], int aux[M][M])
  65. {
  66.     int i, j;
  67.     FILE *file;
  68.     file = fopen("sudoku.txt", "r");
  69.     if(file == NULL) // se o arquivo nao existir ele avisa o usuario e encerra
  70.     {
  71.         system("cls") || ("clear");
  72.         printf("O Arquivo nao pode ser aberto\n");
  73.         system("pause");
  74.         exit(0);
  75.  
  76.  
  77.     }else{
  78.  
  79.     for(i=0; i<9; i++)
  80.     {
  81.         for(j=0; j<9; j++) // se nao ele le o endereço de aux
  82.         {
  83.             fscanf(file, "%d" ,&aux[i][j]);
  84.  
  85.         }
  86.     }
  87.  
  88.     }
  89.  
  90.     file = fopen("resolucao.txt", "r");
  91.     if(file == NULL) // se o arquivo nao existir ele avisa o usuario e encerra
  92.     {
  93.         system("cls") || ("clear");
  94.         printf("O Arquivo nao pode ser aberto\n");
  95.         system("pause");
  96.         exit(0);
  97.  
  98.  
  99.     }else{
  100.  
  101.     for(i=0; i<9; i++)
  102.     {
  103.         for(j=0; j<9; j++) // se nao ele le o endereço de aux
  104.         {
  105.             fscanf(file, "%d" ,&mat[i][j]);
  106.  
  107.         }
  108.     }
  109.     fclose(file);
  110.     jogadas(mat,aux);
  111.  
  112.     }
  113. }
  114.  
  115.  
  116. void salvarjogo(int mat[M][M], int aux[M][M])
  117. {
  118.     int i, j;
  119.     FILE *file;
  120.     file = fopen("sudoku.txt", "w");
  121.     for(i=0; i<9; i++){
  122.         for(j=0; j<9; j++){
  123.                 fprintf(file,"%d ",aux[i][j]); // na aux é onde ta a matriz ja preenchida com os zeros
  124.  
  125.         }
  126.     }
  127.  
  128.  
  129.     file = fopen("resolucao.txt", "w");
  130.     for(i=0; i<9; i++){
  131.         for(j=0; j<9; j++){
  132.                 fprintf(file,"%d ",mat[i][j]); // na aux é onde ta a matriz ja preenchida com os zeros
  133.  
  134.         }
  135.     }
  136.  
  137.  
  138.     fclose(file); // fecha o arquivo
  139.     system("cls") || ("clear");
  140.     printf("   @ @@@@ @@@@ @@@@  @@@@  @@  @    @    @ @@@@  @@\n   @ @  @ @    @  @  @    @  @ @    @    @ @  @  @@\n   @ @  @ @ @@ @  @  @@@@ @@@@ @     @  @  @  @  @@\n   @ @  @ @  @ @  @     @ @  @ @     @  @  @  @    \n@@@  @@@@ @@@@ @@@@  @@@@ @  @ @@@@   @@   @@@@  @@\n                                                   \n                     @@@@@@                        \n                   @@      @@                      \n                  @   @  @   @                     \n                  @          @                     \n                  @  @    @  @                     \n                  @   @@@@   @                     \n                   @        @                      \n                    @@@@@@@@                       \n\n\n");
  141.     system("pause");
  142. jogadas(mat,aux);
  143. }
  144.  
  145.  
  146.  
  147. void painel(int mat[M][M], int aux[M][M])
  148. {
  149.     int op=0,sair=9;
  150.  
  151.     system("cls") || ("clear");
  152.     printf("\n\t\t@@@@ @  @ @@@   @@@@ @  @ @  @\n\t\t@    @  @ @  @  @  @ @ @  @  @\n\t\t@@@@ @  @ @   @ @  @ @@   @  @\n\t\t   @ @  @ @  @  @  @ @ @  @  @\n\t\t@@@@ @@@@ @@@   @@@@ @  @ @@@@\n\n\n\n\n \a");
  153.  
  154.     printf("\tDigite a opcao desejada\n\n");
  155.     printf("\t1 - Novo Jogo!\n");
  156.     printf("\t2 - Carregar jogo salvo!\n");
  157.     printf("\t3 - Regras do jogo e como jogar\n");
  158.     printf("\t4 - Sair\n");
  159.  
  160. while((op != 1) && (op != 2) && (op != 3) && (op != 4)) // aqui enquando nao for digitado uma dessas opções ele vai ficar lendo e dando comando invalido
  161. {
  162.  
  163.     scanf(" %d", &op);
  164. fflush(stdin); // isso limpa o buffer
  165.  
  166.  
  167.  
  168. }
  169.  
  170.     switch (op)
  171.     {
  172.     case 1:
  173.         // aqui chama o gerador
  174.         system("cls") || ("clear");
  175.         gerador(mat , aux);
  176.         break;
  177.  
  178.     case 2:
  179.         carregarjogo(mat,aux); // a matriz aux recebe os valores lidos da função evai para jogadas
  180.         system("cls") || ("clear");
  181.         jogadas(mat,aux);
  182.  
  183.  
  184.         break;
  185.  
  186.     case 3:
  187.         system("cls") || ("clear");
  188.         printf("\n\n");
  189.         printf("\t\t\t\tComo jogar Sudoku.\n\n\t O objetivo do Sudoku e preencher uma grade de 9x9 com numeros,\n\t de forma que cada linha, coluna e secao de 3x3 contenham os\n\t numeros de 1 a 9. No início do jogo, alguns quadrados  da \n\t grade de 9x9 estarao preenchidos. Sua tarefa e usar a logica\n\t para preencher os numeros que faltam e completar a grade.\n\n\n\n\n \t\t\t\tIMPORTANTE!!\n\n\n \t\tPara sair do jogo a qualquer momento\n\t\t digite 10 para salvar o jogo digite 99\n\t\t e para resolucao do sudoku digite 50. ");
  190.         printf("\n\n\n\n");
  191.         system("pause");
  192.         painel(mat,aux);
  193.  
  194.         system("cls") || ("clear");
  195.  
  196.         break;
  197.  
  198.     case 4:
  199.         system("cls") || ("clear");
  200.         printf("Deseja realmente sair?\n\n");
  201.         printf("Digite 1 para sim 2 para nao...\n");
  202.         while((sair != 1) && (sair != 2)) //enquanto nao for 1 ou 2 vai ficar rodando o programa
  203.         {
  204.             scanf("%d", &sair);
  205.             fflush(stdin); // isso limpa o buffer (windows)
  206.             //__fpurge(stdin); limpa o buffer se for linux
  207.             if(sair == 1)//se for digitado 1 sai do programa
  208.             {
  209.                 system("cls") || ("clear"); //limpa a tela
  210.                 printf("\n\n\n\n");
  211.                 printf("  @@@@@@    @@@   @@@@ @@@@@ @@@ @@@@@ @@@@@ @@@ @   @    @@@@@@  \n @@@@@@@@   @  @  @    @      @  @       @    @  @   @   @@@@@@@@ \n@  @@@@  @  @   @ @@@@ @      @  @       @    @  @   @  @  @@@@  @\n@@@@@@@@@@  @   @ @    @@@@@  @  @@@@@   @    @  @   @  @@@@@@@@@@\n   @@@@     @  @  @        @  @      @   @    @  @   @     @@@@   \n   ||||     @@@   @@@@ @@@@@ @@@ @@@@@   @   @@@ @@@@@     ||||   \n\n\n\n\n");
  212.  
  213.             }
  214.             else if (sair == 2) //se for 2 ele volta para o painel
  215.             {
  216.                 painel(mat,aux);
  217.             }
  218.             else if ((sair !=1) || (sair != 2)) //enqianto nao for digita 1 || 2 vai ficar dando essa msg
  219.             {
  220.  
  221.                 printf("comando invalido\n");
  222.             }
  223.         }
  224.  
  225.         break;
  226.  
  227.  
  228.  
  229.     }
  230. }
  231.  
  232.  
  233. void gerador(int mat[M][M], int aux[M][M]) // vem a matriz de referencia do main M = Define 9
  234. {
  235.     int i, j,k,x; //inicialização das variaveis locais
  236.     srand(time(NULL)); //semeando o rand
  237.  x=rand()%9+1; // x vai receber 1 numero aleatoria entre 1 e 9
  238.  mat[0][0]= x; // vai preencher a primeira posição do vetor pois essa nao precisa ser comparada
  239.  
  240.  for(i=0; i<9; i++){ //vai trabalhar so na primeira linha da matriz
  241.  
  242.     for(j=0; j<9; j++) // aqui a coluna começa em 1 pois a primeiro valor ja foi atribuido
  243.     {
  244.         x=rand()%9+1; // x vai receber 1 numero aleatoria entre 1 e 9
  245.         k=0;            // zero o k para controle de indice
  246.         while(k<j)  //enquanto k menor j sempre vai ser
  247.         {
  248.             if(x == mat[i][k])  // se o numero gerado e atruibuido para x for igual ao da posição que k se encontra FAÇA
  249.             {
  250.                 x = rand()%9 + 1; // se for igual x vai receber outro numero aleatorio
  251.                 k=0; // aqui ele zera o k para efetuar o teste dentro do while novamente
  252.             }
  253.             else // se ele passar por aqui é que o numero nao e igual
  254.             {
  255.                 k=k+1; // incrementa a prosima posição da coluna
  256.             }
  257.         }
  258.         mat[i][j] = x; // se chegou ate aqui e por que nao tem numero repetido e vai ser colocado na posição da matriz de J
  259.  
  260.  
  261.     }
  262.  }
  263.  
  264.  
  265.   // para baixo é para linha 2 em diante
  266.  
  267. for(i=1;i<2;i++)// AQUI PASSAMOS A PRIMEIRA LINHA ALEATORIA PARA A SEGUNDA LINHA, POREM TRES POSIÇÕES ADIANTADAS
  268.         for(j=0;j<6;j++)
  269.             mat[i][j] = mat[0][j+3];
  270. for(i=1;i<2;i++)
  271.         for(j=6;j<9;j++)
  272.             mat[i][j] = mat[0][j-6];
  273. for(i=2;i<3;i++)// AQUI PASSAMOS A PRIMEIRA LINHA ALEATORIA PARA A TERCEIRA LINHA, POREM SEIS POSIÇÕES ADIANTADAS
  274.         for(j=0;j<3;j++)
  275.             mat[i][j] = mat[0][j+6];
  276. for(i=2;i<3;i++)
  277.         for(j=3;j<9;j++)
  278.             mat[i][j] = mat[0][j-3]; // primeiras 3 regioes
  279. for(i=3;i<4;i++)// AQUI PASSAMOS A PRIMEIRA LINHA ALEATORIA PARA A QUARTA LINHA, POREM UMA POSIÇÃO ADIANTADA
  280.         for(j=0;j<9;j++)
  281.             mat[i][j] = mat[0][j+1];
  282. for(i=3;i<4;i++)
  283.         for(j=8;j<9;j++)
  284.             mat[i][j] = mat[0][j-8];
  285. for(i=4;i<5;i++)// AQUI PASSAMOS A QUARTA LINHA PARA A QUINTA, POREM TRES POSIÇÕES ADIANTADAS
  286.         for(j=0;j<6;j++)
  287.             mat[i][j] = mat[3][j+3];
  288. for(i=4;i<5;i++)
  289.         for(j=6;j<9;j++)
  290.             mat[i][j] = mat[3][j-6];
  291. for(i=5;i<6;i++)// AQUI PASSAMOS A QUARTA LINHA PARA A SEXTA, POREM SEIS POSIÇÕES ADIANTADAS
  292.         for(j=0;j<3;j++)
  293.             mat[i][j] = mat[3][j+6];
  294. for(i=5;i<6;i++)
  295.         for(j=3;j<9;j++)
  296.             mat[i][j] = mat[3][j-3];
  297. for(i=6;i<7;i++)// AQUI PASSAMOS A PRIMEIRA LINHA ALEATORIA PARA A SETIMA LINHA, POREM DUAS POSIÇÕES ADIANTADAS
  298.         for(j=0;j<9;j++)
  299.             mat[i][j] = mat[0][j+2];
  300. for(i=6;i<7;i++)
  301.         for(j=7;j<9;j++)
  302.             mat[i][j] = mat[0][j-7];
  303. for(i=7;i<8;i++)// AQUI PASSAMOS A SETIMA LINHA PARA A OITAVA LINHA, POREM TRES POSIÇÕES ADIANTADAS
  304.         for(j=0;j<6;j++)
  305.             mat[i][j] = mat[6][j+3];
  306. for(i=7;i<8;i++)
  307.         for(j=6;j<9;j++)
  308.             mat[i][j] = mat[6][j-6];
  309. for(i=8;i<9;i++)// AQUI PASSAMOS A SETIMA LINHA PARA A NONA LINHA, POREM SEIS POSIÇÕES ADIANTADAS
  310.         for(j=0;j<3;j++)
  311.             mat[i][j] = mat[6][j+6];
  312. for(i=8;i<9;i++)
  313.         for(j=3;j<9;j++)
  314.             mat[i][j] = mat[6][j-3];
  315.  
  316.  
  317.  
  318. nivel(mat,aux); // vai passar para essa função a matriz preenchidas
  319.  
  320. }
  321.  
  322. void gerazerofacil(int mat[M][M],int aux[M][M]) //recebe a matriz preenchida e essa funções atribuem os zeros
  323. {
  324.  
  325.     int i,j,x=0,l,k,y=38; //declarações das variaveis locais
  326.     srand(time(NULL)); //semeando o rand
  327.  
  328.     for(i=0; i<9; i++)
  329.     {
  330.         for(j=0; j<9; j++)
  331.         {
  332.             aux[i][j] = mat[i][j]; // aqui ele vai alocar a matriz mat na aux
  333.         }
  334.     }
  335.     i=0;
  336.     j=0;
  337.  
  338. while(x <y){ // enquanto x nao for 38
  339.         x=0;
  340.     i=rand()%9; //sorteia um numero de 1 a 8 para posição i
  341.     j=rand()%9;//sorteia um numero de 1 a 8 para posição j
  342.     aux[i][j]=0; // pega o i e o j verifica a posição e aloca zero
  343.     for(l=0; l<9; l++)
  344.     {
  345.         for(k=0; k<9; k++)
  346.         {
  347.             if(aux[l][k]==0) // percorre a matriz verificando quantos zereos tem
  348.             {
  349.                 x=x+1; // quando o X for igual ao y ele vai sair do while senao ele volta a zera ate X for == y
  350.             }
  351.  
  352.  
  353.         }
  354.     }
  355.  
  356. }
  357.  
  358.  
  359.  
  360. jogadas(mat,aux); //passa para a função jogadas a matriz preenchidas com os zeros
  361. }
  362.  
  363. void gerazeromedio(int mat[M][M],int aux[M][M]) //recebe a matriz preenchida e essa funções atribuem os zeros
  364. {
  365.  
  366.     int i,j,x=0,l,k,y=44; //declarações das variaveis locais
  367.     srand(time(NULL)); //semeando o rand
  368.  
  369.     for(i=0; i<9; i++)
  370.     {
  371.         for(j=0; j<9; j++)
  372.         {
  373.             aux[i][j] = mat[i][j]; // aqui ele vai alocar a matriz mat na aux
  374.         }
  375.     }
  376.     i=0;
  377.     j=0;
  378.  
  379. while(x <y){ // enquanto x nao for 38
  380.         x=0;
  381.     i=rand()%9; //sorteia um numero de 1 a 8 para posição i
  382.     j=rand()%9;//sorteia um numero de 1 a 8 para posição j
  383.     aux[i][j]=0; // pega o i e o j verifica a posição e aloca zero
  384.     for(l=0; l<9; l++)
  385.     {
  386.         for(k=0; k<9; k++)
  387.         {
  388.             if(aux[l][k]==0) // percorre a matriz verificando quantos zereos tem
  389.             {
  390.                 x=x+1; // quando o X for igual ao y ele vai sair do while senao ele volta a zera ate X for == y
  391.             }
  392.  
  393.  
  394.         }
  395.     }
  396.  
  397. }
  398. jogadas(mat,aux); //passa para a função jogadas a matriz preenchidas com os zeros
  399. }
  400.  
  401.  
  402. void gerazerodificil(int mat[M][M],int aux[M][M]) //recebe a matriz preenchida e essa funções atribuem os zeros
  403. {
  404.  
  405.     int i,j,x=0,l,k,y=56; //declarações das variaveis locais
  406.     srand(time(NULL)); //semeando o rand
  407.  
  408.     for(i=0; i<9; i++)
  409.     {
  410.         for(j=0; j<9; j++)
  411.         {
  412.             aux[i][j] = mat[i][j]; // aqui ele vai alocar a matriz mat na aux
  413.         }
  414.     }
  415.     i=0;
  416.     j=0;
  417.  
  418. while(x <y){ // enquanto x nao for 38
  419.         x=0;
  420.     i=rand()%9; //sorteia um numero de 1 a 8 para posição i
  421.     j=rand()%9;//sorteia um numero de 1 a 8 para posição j
  422.     aux[i][j]=0; // pega o i e o j verifica a posição e aloca zero
  423.     for(l=0; l<9; l++)
  424.     {
  425.         for(k=0; k<9; k++)
  426.         {
  427.             if(aux[l][k]==0) // percorre a matriz verificando quantos zereos tem
  428.             {
  429.                 x=x+1; // quando o X for igual ao y ele vai sair do while senao ele volta a zera ate X for == y
  430.             }
  431.  
  432.  
  433.         }
  434.     }
  435.  
  436. }
  437.  
  438.  
  439.  
  440. jogadas(mat,aux); //passa para a função jogadas a matriz preenchidas com os zeros
  441. }
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450. void jogadas (int mat[M][M], int aux[M][M])
  451. {
  452.     int i,j,k,l,a,b,valor,cont=0,acabar=1,sair=0,x=0,y=0;
  453.     int naomexe[M][M]; // essa matriz é apenas para nao mecher nos valores que ja estao impressos
  454. for(i=0; i<9; i++)
  455. {
  456.     for(j=0; j<9; j++)
  457.     {
  458.         naomexe[i][j] = aux[i][j];
  459.     }
  460. }
  461.  
  462. while(acabar >0){
  463.         acabar=1;
  464.  
  465.  
  466.     printf("\n\t\t\t  @@@@ @  @ @@@   @@@@ @  @ @  @\n\t\t\t  @    @  @ @  @  @  @ @ @  @  @\n\t\t\t  @@@@ @  @ @   @ @  @ @@   @  @\n\t\t\t     @ @  @ @  @  @  @ @ @  @  @\n\t\t\t  @@@@ @@@@ @@@   @@@@ @  @ @@@@\n\n \a");
  467.  
  468.  printf("\t\t\t    0 ");printf(" 1 ");printf(" 2 ");printf("  3 ");printf(" 4 ");printf(" 5 ");printf("  6 ");printf(" 7 ");printf(" 8 ");
  469.  printf("\n\t\t\t  -------------------------------");
  470. for(i=0; i<9; i++){
  471. printf("\n");
  472. if((i== 3) || (i== 6)) // quando a linha for 3 ou 6 ele vai desenhar o printf abaixo
  473. {
  474.     printf("\t\t\t  -------------------------------\n");
  475. }
  476.  
  477.     for(j=0; j<9; j++){
  478.             if(j==0)
  479.             {
  480.                  printf("\t\t\t%d | %d ",i, aux[i][j]);
  481.             }
  482.            else if((j==3) || (j==6)){
  483.                 printf("| %d ", aux[i][j]); // toda vez q linha for 0 3 ou 6 vai imprimir | antes do numero
  484.             }
  485.             else if(j==8)
  486.             {
  487.                 printf(" %d |", aux[i][j]); // a mesma coisa so que a barra | no final
  488.             }
  489.             else{
  490.                 printf(" %d ", aux[i][j]); // se nao for nenhuma dessas condições imprime o numero normal
  491.             }
  492.  
  493.     }}
  494.     printf("\n");
  495. printf("\t\t\t  -------------------------------\n\n\n");
  496.  
  497.  
  498.  
  499. printf("Digite a linha e a coluna e o numero de 1 a 9\t\t\t jogadas[%d]\n",cont );
  500.  
  501.  
  502. fflush(stdin); // isso limpa o buffer (windows)
  503.             //__fpurge(stdin); limpa o buffer se for linux
  504.  
  505.     scanf("%d %d %d", &i, &j, &valor);
  506. cont++;
  507. x=0;
  508. y=0;
  509.         while(y==0)
  510.         {
  511.  
  512.             if (naomexe[i][j] > 0)
  513.                     {
  514.                         printf("\nJogada proibida\n");
  515.                         system("pause");
  516.  
  517.                         x=1;
  518.                         y=1;
  519.  
  520.                     }
  521.             for(l=i; l<=i; l++ )
  522.             {
  523.  
  524.                 for(k=0; k<9; k++)
  525.                 {
  526.  
  527.                    if((valor !=0) && (valor == aux[i][k]))
  528.                     {
  529.                         printf("esse numero ja tem na linha\n\n");
  530.                         system("pause");
  531.                         y=1;
  532.                         x=1;
  533.                         cont--;
  534.                     }
  535.  
  536.  
  537.  
  538.                     else
  539.                     {
  540.  
  541.                         y=1;
  542.  
  543.                     }
  544.  
  545.                 }
  546.             }
  547.  
  548.  
  549.  
  550.             if (naomexe[i][j] > 0)
  551.                     {
  552.                         printf("\nJogada proibida\n");
  553.                         system("pause");
  554.  
  555.                         x=1;
  556.                         y=1;
  557.  
  558.                     }
  559.             for(a=0; a<9; a++ )
  560.             {
  561.  
  562.                 for(b=j; b<=j; b++)
  563.                 {
  564.  
  565.                    if((valor !=0) && (valor == aux[a][b]))
  566.                     {
  567.                         printf("esse numero ja tem na coluna\n\n");
  568.                         system("pause");
  569.                         y=1;
  570.                         x=1;
  571.                         cont--;
  572.                     }
  573.  
  574.  
  575.  
  576.                     else
  577.                     {
  578.  
  579.                         y=1;
  580.  
  581.                     }
  582.                 }
  583.             }
  584. // teste da 3x3 teste o primeiro quadrante************************************************************************************************************
  585.             if((i>=0 && i<=2) && (j>=0 && j<=2))
  586.             {
  587.                 for(l=0; l<3; l++){
  588.                     for(k=0; k<3; k++){
  589.  
  590.                             if((valor !=0) && (valor == aux[l][k]))
  591.                     {
  592.                         printf("esse numero ja tem na matriz 3x3\n\n");
  593.                         system("pause");
  594.                         y=1;
  595.                         x=1;
  596.  
  597.                     }
  598.                         else
  599.                     {
  600.  
  601.                         y=1;
  602.  
  603.                     }
  604.  
  605.                     }
  606.                 }
  607.             }
  608.  
  609.  // teste da matriz de 3 a 6 na linha       testa o quarto quadrante*************************************************************
  610. if((i>=3 && i<6) && (j>=0 && j<=2))
  611.             {
  612.                 for(l=3; l<6; l++){
  613.                     for(k=0; k<3; k++){
  614.  
  615.                             if((valor !=0) && (valor == aux[l][k]))
  616.                     {
  617.                         printf("esse numero ja tem na matriz 3x3\n\n");
  618.                         system("pause");
  619.                         y=1;
  620.                         x=1;
  621.                         cont--;
  622.                     }
  623.                     else
  624.                     {
  625.  
  626.                         y=1;
  627.  
  628.                     }
  629.  
  630.                     }
  631.                 }
  632.             }
  633.  
  634.  
  635.          //teste da matriz de 6 a 9  TESTA O setima quadrante **************************************8
  636.             if((i>=6 && i<9) && (j>=0 && j<=2))
  637.             {
  638.                 for(l=6; l<9; l++){
  639.                     for(k=0; k<3; k++){
  640.  
  641.                             if((valor !=0) && (valor == aux[l][k]))
  642.                     {
  643.                         printf("esse numero ja tem na matriz 3x3\n\n");
  644.                         system("pause");
  645.                         y=1;
  646.                         x=1;
  647.                         cont--;
  648.                     }
  649.                     else
  650.                     {
  651.  
  652.                         y=1;
  653.  
  654.                     }
  655.  
  656.                     }
  657.                 }
  658.             }
  659.         // teste o segundo quadrante*******************************************
  660.              if((i>=0 && i<=2) && (j>=3 && j<6))
  661.             {
  662.                 for(l=0; l<3; l++){
  663.                     for(k=3; k<6; k++){
  664.  
  665.                             if((valor !=0) && (valor == aux[l][k]))
  666.                     {
  667.                         printf("esse numero ja tem na matriz 3x3\n\n");
  668.                         system("pause");
  669.                         y=1;
  670.                         x=1;
  671.                         cont--;
  672.                     }
  673.  
  674.                     else
  675.                     {
  676.  
  677.                         y=1;
  678.  
  679.                     }
  680.  
  681.                     }
  682.                 }
  683.             }
  684.  
  685. // teste o terceiro quadrante*******************************************
  686.              if((i>=0 && i<=2) && (j>=6 && j<9))
  687.             {
  688.                 for(l=0; l<3; l++){
  689.                     for(k=6; k<9; k++){
  690.  
  691.                             if((valor !=0) && (valor == aux[l][k]))
  692.                     {
  693.                         printf("esse numero ja tem na matriz 3x3\n\n");
  694.                         system("pause");
  695.                         y=1;
  696.                         x=1;
  697.                         cont--;
  698.                     }
  699.  
  700.                     else
  701.                     {
  702.  
  703.                         y=1;
  704.  
  705.                     }
  706.  
  707.                     }
  708.                 }
  709.             }
  710.  
  711.             // teste o quinto quadrante*******************************************
  712.              if((i>=3 && i<6) && (j>=3 && j<6))
  713.             {
  714.                 for(l=3; l<6; l++){
  715.                     for(k=3; k<6; k++){
  716.  
  717.                             if((valor !=0) && (valor == aux[l][k]))
  718.                     {
  719.                         printf("esse numero ja tem na matriz 3x3\n\n");
  720.                         system("pause");
  721.                         y=1;
  722.                         x=1;
  723.                         cont--;
  724.                     }
  725.                     else
  726.                     {
  727.  
  728.                         y=1;
  729.  
  730.                     }
  731.  
  732.                     }
  733.                 }
  734.             }
  735.  
  736.             // teste o sexto quadrante*******************************************
  737.              if((i>=3 && i<6) && (j>=6 && j<9))
  738.             {
  739.                 for(l=3; l<6; l++){
  740.                     for(k=6; k<9; k++){
  741.  
  742.                             if((valor !=0) && (valor == aux[l][k]))
  743.                     {
  744.                         printf("esse numero ja tem na matriz 3x3\n\n");
  745.                         system("pause");
  746.                         y=1;
  747.                         x=1;
  748.                         cont--;
  749.                     }
  750.                      else
  751.                     {
  752.  
  753.                         y=1;
  754.  
  755.                     }
  756.  
  757.                     }
  758.                 }
  759.             }
  760.  
  761.          //teste da matriz de 6 a 9  TESTA O oitavo quadrante **************************************8
  762.             if((i>=6 && i<9) && (j>=3 && j<6))
  763.             {
  764.                 for(l=6; l<9; l++){
  765.                     for(k=3; k<6; k++){
  766.  
  767.                             if((valor !=0) && (valor == aux[l][k]))
  768.                     {
  769.                         printf("esse numero ja tem na matriz 3x3\n\n");
  770.                         system("pause");
  771.                         y=1;
  772.                         x=1;
  773.                         cont--;
  774.                     }
  775.                     else
  776.                     {
  777.  
  778.                         y=1;
  779.  
  780.                     }
  781.  
  782.                     }
  783.                 }
  784.             }
  785.  
  786.             //teste da matriz de 6 a 9  TESTA O ultimo quadrante **************************************8
  787.             if((i>=6 && i<9) && (j>=6 && j<9))
  788.             {
  789.                 for(l=6; l<9; l++){
  790.                     for(k=6; k<9; k++){
  791.  
  792.                             if((valor !=0) && (valor == aux[l][k]))
  793.                     {
  794.                         printf("esse numero ja tem na matriz 3x3\n\n");
  795.                         system("pause");
  796.                         y=1;
  797.                         x=1;
  798.                         cont--;
  799.                     }
  800.  
  801.                     else
  802.                     {
  803.  
  804.                         y=1;
  805.  
  806.                     }
  807.  
  808.                     }
  809.                 }
  810.             }
  811.  
  812.         } // fim do enquanto
  813.  
  814.  
  815.  
  816.  
  817. while(x== 0) // sempre vai passar por aqui.. apenas se a o teste acima der erro
  818. {
  819.     if(i>8)
  820.     {
  821.         printf("Linha ou coluna ou valor digitado errado\n");
  822.         cont--;
  823.         x=1;
  824.         system("pause");
  825.  
  826.     }
  827.     else if(j>8)
  828.     {
  829.         printf("Linha ou coluna ou valor digitado errado\n");
  830.         cont--;
  831.         x=1;
  832.         system("pause");
  833.     }
  834.     else if(valor > 11)
  835.     {
  836.         printf("Linha ou coluna ou valor digitado errado\n");
  837.  
  838.         cont--;
  839.         x=1;
  840.         system("pause");
  841.  
  842.     }
  843.  
  844.     else
  845.     {
  846.          x=1;
  847.          aux[i][j] = valor; // aqui recebe a jogada
  848.     }
  849.  
  850.  
  851. }
  852. if((i == 10 ) || (j==10) || (valor== 10))
  853.     {
  854.         sair = 10;
  855.  
  856. if(sair == 10)
  857. {
  858.  
  859.     system("cls") || ("clear");
  860.         printf("Deseja realmente sair?\n\n");
  861.         printf("Digite 1 para sim 2 para nao...\n");
  862.         while((sair != 1) && (sair != 2)) //enquanto nao for 1 ou 2 vai ficar rodando o programa
  863.         {
  864.             scanf("%d", &sair);
  865.             fflush(stdin); // isso limpa o buffer (windows)
  866.             //__fpurge(stdin); limpa o buffer se for linux
  867.             if(sair == 1)//se for digitado 1 sai do programa
  868.             {
  869.                 system("cls") || ("clear"); //limpa a tela
  870.                 printf("\n\n\n\n");
  871.                 printf("  @@@@@@    @@@   @@@@ @@@@@ @@@ @@@@@ @@@@@ @@@ @   @    @@@@@@  \n @@@@@@@@   @  @  @    @      @  @       @    @  @   @   @@@@@@@@ \n@  @@@@  @  @   @ @@@@ @      @  @       @    @  @   @  @  @@@@  @\n@@@@@@@@@@  @   @ @    @@@@@  @  @@@@@   @    @  @   @  @@@@@@@@@@\n   @@@@     @  @  @        @  @      @   @    @  @   @     @@@@   \n   ||||     @@@   @@@@ @@@@@ @@@ @@@@@   @   @@@ @@@@@     ||||   \n\n\n\n\n");
  872.                 system("pause");
  873.                 exit(0);
  874.             }
  875.             else if (sair == 2) //se for 2 ele volta para o painel
  876.             {
  877.                 jogadas(mat,aux);
  878.             }
  879.             else if ((sair !=1) || (sair != 2)) //enqianto nao for digita 1 || 2 vai ficar dando essa msg
  880.             {
  881.  
  882.                 printf("comando invalido\n");
  883.  
  884.             }
  885.         }
  886. }
  887.     }
  888.  
  889. if((i == 99 ) || (j==99) || (valor== 99))
  890. {
  891.     salvarjogo(mat,aux);
  892. }
  893. for(i=0; i<M; i++){
  894.     for(j=0; j<M; j++)
  895.     {
  896.         if(aux[i][j] == 0)
  897.         {
  898.             acabar=acabar+1;
  899.         }
  900.     }
  901. }
  902.  
  903. if((i == 50 ) || (j==50) || (valor== 50))
  904. {
  905.     for(i=0; i<9; i++)
  906.     {
  907.         printf("\n");
  908.         for(j=0; j<9; j++)
  909.         {
  910.             printf("| %d|",mat[i][j]);
  911.         }
  912.  
  913.     }
  914.     printf("\n\n");
  915.     system("pause");
  916. }
  917. acabar=acabar-1;
  918.  
  919. system("cls") || ("clear");
  920.  
  921. }
  922. }
  923.  
  924. /*void cronometro(int mat[M][M],int aux[M][M])
  925. {
  926.     int sec=0, min=0, hr=0, p=0;
  927.  
  928.     while (p<10)
  929.     {
  930.  
  931.         printf("\n\t %dH:%dM:%dS", hr,min,sec);
  932.         system("cls");
  933.         Sleep(1000); //pausa a tela por uma determinado tempo
  934.         system("cls");
  935.         jogadas(mat,aux);
  936.         sec++;
  937.  
  938.         if(sec==60)
  939.         {
  940.             sec=0;
  941.             min++;
  942.  
  943.         }
  944.         if(min == 60)
  945.         {
  946.             min=0;
  947.             hr++;
  948.         }
  949.  
  950.         if(hr==24)
  951.         {
  952.             hr++;
  953.  
  954.         }
  955.  
  956.  
  957.     }
  958.  
  959.  
  960.  
  961.  
  962. }*/
  963.  
  964.  
  965.  
  966. int main()
  967. {
  968.     int mat[M][M], aux[M][M];
  969.  
  970.     painel(mat,aux); // vai para função das opcoes do painel
  971. printf("\n\n\n\n\\t\t\t\tPARABENS");
  972. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement