×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: C
Posted by: Damian Pytkowski
Added: May 2, 2016 8:21 PM
Modified: May 14, 2016 11:13 AM
Views: 10
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <math.h>
  4. #include <windows.h>
  5. #define roz 8
  6. void pusta(int t[][roz]);//wypelnia tablice kropkami
  7. void druk(int t[][roz]);//drukuje tablice
  8. void zapisz(int t[][roz],int r[][roz],int m, int n);//zapisuje wczytana komorke liczba min wokol
  9. void wczytaj(int t[][roz],int w[],char m, int n);//pobiera od gracza wsp i sprawdza ich poprawnosc
  10. void zera(int t[][roz],int r[][roz],int m, int n);//zeruje 5 zerowych komorek wokol
  11. void wylicz(int r[][roz]);//uruchamia licz dla komorek roznych od miny w tablicy zakrytej
  12. int spr(int t[][roz],int m, int n);//sprawdza czy komorka mn jest mina
  13. int spr2(int t[][roz],int r[][roz]);//przelicza tablice w poszukiwaniu poprawnie oznaczonych min przez gracza
  14. int spro(int t[][roz],int r[][roz]);//podaje ile min zostalo graczowy
  15. int licz(int t[][roz],int m, int n);//liczy ilosc min wokol komorki mn
  16. void los(int t[][roz]);//losuje miny na planszy
  17. void zero(int x, int y, int tab1[][roz], int tab2[][roz]);
  18.  
  19. void main()
  20. {
  21.     int miny[roz][roz],tab[roz][roz],t[1],wsp[2];
  22.     int i,m,n,u,w,x=0,q;
  23.     pusta(miny);pusta(tab);
  24.     los(miny);
  25.     wylicz(miny);q=1;
  26.     while(q)
  27.     {
  28.         system("cls");
  29.         printf("Pozostalo min: %d",spro(tab,miny));
  30.         druk(tab);
  31.         wczytaj(tab,wsp,m,n);
  32.         u=wsp[0];w=wsp[1];
  33.         if(licz(miny,u,w)==32)
  34.         {zero(u,w,tab,miny);}
  35.  
  36.         zapisz(tab,miny,u+65,w+1);
  37.         if(spr2(tab,miny)==10 && spro(tab,miny)==0)
  38.         {goto wygrana;}
  39.  
  40.         q=spr(miny,u,w);
  41.     }
  42.     system("cls");
  43.     druk(miny);
  44.     printf("Trafiles mine w polu %c%d!\n",u+65,w+1);
  45.     if(x==1){wygrana: druk(tab);
  46.             printf("Wygrales!");}
  47. }
  48. void zero(int x, int y, int tab1[][roz], int tab2[][roz])
  49. {
  50.     int i,j;
  51.     if(tab1[x][y]!=46)
  52.         return 0;
  53.     if(x<0 || x>roz-1)
  54.         return 0;
  55.     if(y<0 || y>roz-1)
  56.         return 0;
  57.     if(tab2[x][y]>48 && tab2[x][y]<57)
  58.         tab1[x][y]=tab2[x][y];
  59.     if(tab2[x][y]!=32)
  60.         return 0;
  61.     tab1[x][y]=tab2[x][y];
  62.     for(i=0;i<3;i++)
  63.     {
  64.         for(j=0;j<3;j++)
  65.         {zero(x-1+i,y-1+j,tab1,tab2);}
  66.     }
  67. }
  68. void zera(int t[][roz],int r[][roz],int m, int n)
  69. {
  70.     int i,j,u,w;
  71.     for(i=0;i<5;i++)
  72.     {
  73.         for(j=0;j<5;j++)
  74.         {
  75.             u=abs(abs(m+i)-1);
  76.             w=abs(abs(n+j)-1);
  77.             if(r[u][w]==32 && w<roz)
  78.             {
  79.                 t[u][w]=licz(r,m,n);
  80.             }
  81.         }
  82.     }
  83. }
  84. void wylicz(int r[][roz])
  85. {
  86.     int i,j;
  87.     for(i=0;i<roz;i++)
  88.     {
  89.         for(j=0;j<roz;j++)
  90.         {
  91.             if(r[i][j]!='$'){
  92.             r[i][j]=licz(r,i,j);}
  93.         }
  94.     }
  95. }
  96. int spro(int t[][roz],int r[][roz])
  97. {
  98.      int i,j,k=0;
  99.     for(i=0;i<roz;i++)
  100.     {
  101.         for(j=0;j<roz;j++)
  102.         {
  103.             if(t[i][j]=='o')
  104.             {k++;}
  105.         }
  106.     }
  107.     return 10-k;
  108. }
  109. int spr2(int t[][roz],int r[][roz])
  110. {
  111.     int i,j,k=0;
  112.     for(i=0;i<roz;i++)
  113.     {
  114.         for(j=0;j<roz;j++)
  115.         {
  116.             if(t[i][j]=='o' && r[i][j]=='$')
  117.             {k++;}
  118.         }
  119.     }
  120.     return k;
  121. }
  122. int licz(int t[][roz],int m, int n)
  123. {
  124.     int k=0,i,j;
  125.     for(i=0;i<3;i++)
  126.     {
  127.         for(j=0;j<3;j++)
  128.         {
  129.             if((n==0 && j==0)|| (n==roz-1 && j==2))
  130.             {continue;}
  131.             else{
  132.             if(t[m-1+i][n-1+j]=='$')
  133.                 {k++;}}
  134.         }
  135.     }
  136.     if(k==0){return k+32;}
  137.     else{return k+48;}
  138. }
  139. int spr(int t[][roz],int m, int n)
  140. {
  141.     int k=1;
  142.     if(t[m][n]=='$')
  143.     {k=0;}
  144.     return k;
  145. }
  146. void los(int t[][roz])
  147. {
  148.     int i,j,k,l,m=0;
  149.     srand(time(NULL));
  150.     k=rand()%roz;
  151.     l=rand()%roz;
  152.     for(i=0;i<10;i++){
  153.     while(t[k][l]!=46)
  154.     {
  155.         k=rand()%roz;
  156.         l=rand()%roz;
  157.     }
  158.     t[k][l]='$';}
  159. }
  160. void wczytaj(int t[][roz],int w[],char m, int n)
  161. {
  162.     int x,q=0;
  163.     char k;
  164.     printf("Podaj komorke: ");
  165.     fflush(stdin);
  166.     scanf("%c%d%c",&m,&n,&k);
  167.     x=t[m-65][n-1];
  168.     if(x!=46){if(x!=111){q=1;}}
  169.     while(q || n>=roz+1)
  170.     {
  171.         printf("Zla komorka! Podaj ponownie: ");
  172.         fflush(stdin);
  173.         scanf("%c%d%c",&m,&n,&k);
  174.         x=t[m-65][n-1];q=0;
  175.         if(x!=46){if(x!=111){q=1;}}
  176.     }
  177.     if(k==111)
  178.     {
  179.         w[0]=7;w[1]=9;
  180.         t[m-65][n-1]='o';}
  181.  
  182.     else{
  183.     w[0]=m-65;w[1]=n-1;}
  184.     system("cls");
  185. }
  186. void pusta(int t[][roz])
  187. {
  188.     int i,j;
  189.     for(i=0;i<roz;i++)
  190.     {
  191.         for(j=0;j<roz;j++)
  192.         {t[i][j]=46;}
  193.     }
  194. }
  195. void druk(int t[][roz])
  196. {
  197.     int i,j;
  198.     printf("\n\n    ");
  199.     for(i=0;i<roz;i++){
  200.     printf("%d   ",i+1);}
  201.  
  202.     printf("\n\n\n");
  203.  
  204.     for(i=0;i<roz;i++){
  205.         printf("%c   ",i+65);
  206.         for(j=0;j<roz;j++)
  207.         {
  208.             printf("%c   ",t[i][j]);
  209.         }
  210.         printf("\n\n");}
  211. }
  212. void zapisz(int t[][roz],int r[][roz],int m, int n)
  213. {
  214.     int i,p=licz(r,m-65,n-1);
  215.     for(i=0;i<roz;i++)
  216.     {
  217.         if(65+i==m)
  218.         {
  219.             t[i][n-1]=p;
  220.         }
  221.     }
  222. }
  223.  
  224.