Advertisement
Guest User

Mines

a guest
Nov 22nd, 2019
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.58 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. char** createMatrix(int,int);
  6. void freeMatrix(char**,int,int);
  7. void initMatrix(char**,int,int,int);
  8. void drawMatrix(char**,int,int);
  9. int tesztCOORD(char**,int,int );
  10. void reveal(char**,char**,int,int,int,int);
  11. void drawBombs(char**,int,int);
  12. int checkWin(char**,char**,int,int);
  13.  
  14. int main()
  15. {
  16.  char **graf,**mines;
  17.  int width,height,countmines;
  18.  int cordx,cordy;
  19.  int isRunning =0;
  20.  printf("Palya meret,bombak(Alak:width,height,mines): ");
  21.  scanf("%d,%d,%d",&width,&height,&countmines);
  22.  graf = createMatrix(width, height);
  23.  mines = createMatrix(width, height);
  24.  initMatrix(graf, 0, width, height);
  25.  initMatrix(mines, countmines, width, height);
  26.  drawMatrix(graf, width, height);
  27.  while(isRunning == 0)
  28.  {
  29.     scanf("%d,%d",&cordx,&cordy);
  30.     switch(tesztCOORD(mines,cordx-1, cordy-1))
  31.     {
  32.         case 0: isRunning = 1;system("cls");drawBombs(mines, width, height);break;
  33.        
  34.         case 1: graf[cordy-1][cordx-1] = mines[cordy-1][cordx-1];break;
  35.        
  36.         case 2: reveal(graf, mines, cordx-1, cordy-1, width, height);break;
  37.     }
  38.     if(isRunning ==0)
  39.     drawMatrix(graf, width, height);
  40.     if(checkWin(graf, mines, width, height)==0)
  41.     {
  42.         isRunning = 2;
  43.     }
  44.  }
  45.  switch(isRunning)
  46.  {
  47.     case 1: printf("\n YOU DIED");break;
  48.    
  49.     case 2: printf("\n nyertel");break;
  50.  }
  51.  return 0; 
  52. }
  53.  
  54. char** createMatrix(int width,int height)
  55. {
  56.     char **matrix = (char**)malloc(height*sizeof(char*));
  57.     for(int i=0;i<height;++i)
  58.     {
  59.         *(matrix+i)=(char*)malloc(width*sizeof(char));
  60.     }
  61.     return matrix;
  62. }
  63.  
  64. void freeMatrix(char** matrix,int width,int height)
  65. {
  66.     for(int i =0;i<height;++i)
  67.     {
  68.         free(*(matrix+i));
  69.     }
  70.     free(matrix);
  71. }
  72.  
  73. void initMatrix(char** matrix,int Mines,int width,int height)
  74. {
  75.     srand(time(0));
  76.     int mx;
  77.     int my;
  78.     int num;
  79. //Mines=0 Az igaz
  80.     if(Mines==0)
  81.     {
  82.      for(int i=0;i<height;++i)
  83.      {
  84.         for(int j =0;j<width;++j)
  85.         {
  86.             matrix[i][j]='X';
  87.         }
  88.      }
  89.     }
  90.     else
  91.     {
  92.         //Bombak lehelyezese
  93.         for(int i =0 ;i<Mines;++i)
  94.         {
  95.             my=rand()%height;
  96.             mx=rand()%width;
  97.             matrix[my][mx]='o';
  98.         }
  99.         //Szamok kitoltese
  100.         for(int i= 0;i<height;++i)
  101.         {
  102.             for(int j=0;j<width;++j)
  103.             {
  104.                 num='0';
  105.                 if(matrix[i][j]!='o')
  106.                 {
  107.                     //Balfelsor resz
  108.                     if(((i-1)>=0)&&((j-1)>=0)&&(matrix[i-1][j-1]=='o'))num++;
  109.                     //Felso resz
  110.                     if(((i-1)>=0)&&(matrix[i-1][j]=='o'))num++;
  111.                     //Jobb felso
  112.                     if(((i-1)>=0)&&((j+1)<width)&&(matrix[i-1][j+1]=='o'))num++;
  113.                     //Bal oldal
  114.                     if(((j-1)>=0)&&(matrix[i][j-1]=='o'))num++;
  115.                     //Jobb oldal
  116.                     if(((j+1)<width)&&(matrix[i][j+1]=='o'))num++;
  117.                     //Bal also
  118.                     if(((i+1)<height)&&((j-1)>=0)&&(matrix[i+1][j-1]=='o'))num++;
  119.                     //Also
  120.                     if(((i+1)<height)&&(matrix[i+1][j]=='o'))num++;    
  121.                     //Jobb also
  122.                     if(((i+1)<height)&&((j+1)<width)&&(matrix[i+1][j+1]=='o'))num++;
  123.                    
  124.                     //Kitolt
  125.                     matrix[i][j]=num;
  126.                    
  127.                 }
  128.             }
  129.         }
  130.     }  
  131. }
  132.  
  133. void drawMatrix(char** matrix,int width,int height)
  134. {
  135.     //kepernyo torles
  136.     system("cls");
  137.     for(int i =0;i<height;++i)
  138.     {
  139.         for(int j = 0;j < width;++j)
  140.         {
  141.             printf("%c",matrix[i][j]);
  142.         }
  143.         printf("\n");
  144.     }
  145.     printf("Selection coords: ");
  146. }
  147.  
  148. int tesztCOORD(char** matrix,int x,int y)
  149. {
  150.     //return 0 ha bomba
  151.     if(matrix[y][x] == 'o')return 0;
  152.     //return 1 ha nem bomba es nem 0 all ott,return 2 ha nembomba es nulla all ott
  153.     if(matrix[y][x] == '0')
  154.     {
  155.         return 2;
  156.     }
  157.     else
  158.     {
  159.         return 1;
  160.     }  
  161. }
  162.  
  163. void reveal(char**matrixGraf,char**matrixMine,int x,int y,int width,int height)
  164.  
  165. {
  166.    
  167.  if((x>=0)&&(y>=0)&&(x<width)&&(y<height))
  168.  {
  169.  
  170.     if((matrixMine[y][x] == '0')&&(matrixGraf[y][x]!='0'))
  171.     {
  172.         matrixGraf[y][x] = '0';
  173.         reveal(matrixGraf,matrixMine,x+1,y,width,height);
  174.         reveal(matrixGraf,matrixMine,x,y+1,width,height);
  175.         reveal(matrixGraf,matrixMine,x-1,y,width,height);
  176.         reveal(matrixGraf,matrixMine,x,y-1,width,height);
  177.     }
  178.     else
  179.     {
  180.         matrixGraf[y][x]=matrixMine[y][x];
  181.         return;
  182.     }
  183.  }
  184.  else
  185.  {
  186.     return;
  187.  }
  188. }
  189. void drawBombs(char** matrix,int width,int height)
  190. {
  191.     for(int i=0;i<height;++i)
  192.     {
  193.         for(int j =0;j<width;++j)
  194.         {
  195.             if(matrix[i][j] == 'o')
  196.             {
  197.                 printf("%c",'o');
  198.             }
  199.             else
  200.             {
  201.                 printf("%c",' ');
  202.             }
  203.         }
  204.         printf("\n");
  205.     }
  206. }
  207.  
  208. int checkWin(char** matrixGraf,char**matrixMine,int width,int height)
  209. {
  210.     int countGraf=0,countMine=0;
  211.     for(int i =0;i<height;++i)
  212.     {
  213.         for(int j =0;j < width;++j)
  214.         {
  215.             if(matrixGraf[i][j]=='X')countGraf++;
  216.             if(matrixMine[i][j]=='o')countMine++;
  217.         }
  218.     }
  219.     if(countGraf==countMine)
  220.     {
  221.         return 0;
  222.     }
  223.     else
  224.     {
  225.         return 1;
  226.     }
  227. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement