Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.18 KB | None | 0 0
  1. #include <stdio.h>
  2. #define N 5
  3. #define M 5
  4. #define L 50
  5.  
  6. void readBoard(int board[N][M]);
  7. void readGame(int steps[L], int * numOfSteps);
  8. int isCellLegal(int x, int y);
  9. int isBomb(int Board[N][M], int x, int y);
  10. int performStep(int Board[N][M], int x, int y, int * bombRevealed);
  11. int isWinner(int Board[N][M]);
  12. int playGame(int Board[N][M], int Steps[L], int numOfSteps, int * totalBombsRevealed);
  13.  
  14. int main()
  15. {
  16.     int Board[N][M] = {0}, Steps[L] = {0}, numOfSteps = 0, totalBombsRevealed = 0;
  17.     int r;
  18.     readBoard(Board);
  19.     readGame(Steps, &numOfSteps);
  20.     r = playGame(Board, Steps, numOfSteps, &totalBombsRevealed);
  21.     printf("%d\n",r);
  22.     printf("%d\n", totalBombsRevealed);
  23.     return 0;
  24. }
  25.  
  26. void readBoard(int board[N][M])
  27. {
  28.     int i = 0, j = 0;
  29.     for (i = 0; i < N; i++)
  30.     {
  31.         for (j = 0; j < M; j++)
  32.         {
  33.           scanf("%d", &board[i][j]);
  34.         }
  35.     } /*scanned all the values for the matrix*/
  36.     return;
  37. }
  38.  
  39. void readGame(int steps[L], int* numOfSteps)
  40.     {
  41.         int i,n=0,counter=0;
  42.         for(i=0;i<L;i++)
  43.         {
  44.             scanf("%d",&n);
  45.             if(n==-1)
  46.             {
  47.                 steps[i]=n;
  48.                 break;
  49.             }
  50.             steps[i]=n;
  51.             counter++;
  52.         }
  53.  
  54.     *numOfSteps = (counter/2);
  55.     /* established how many steps the game is meant to make and also which matrix cells to open */
  56.     return;
  57. }
  58.  
  59. int isCellLegal(int x, int y)
  60. {
  61.     if (x >= 0 && x < N && y >= 0 && y < M)
  62.     {
  63.         return 1;
  64.     }
  65.     return 0;
  66. }
  67.  
  68. int isBomb(int Board[N][M], int x, int y)
  69. {
  70.     if (Board[x][y] == -1)
  71.     {
  72.         return 1;
  73.     }
  74.     return 0;
  75. }
  76.  
  77. int performStep(int Board[N][M], int x, int y, int * bombRevealed)
  78. {
  79.     int r = 0, i = 0, j = 0;
  80.     if (isBomb(Board, x, y) == 1)
  81.     {
  82.         *bombRevealed = 0;
  83.         Board[x][y] = 0;
  84.         return -1;
  85.     }
  86.     else
  87.     {
  88.         r = Board[x][y];
  89.         for (i = -r; i <= r; i++)
  90.         {
  91.             for (j = -r; j <= r; j++)
  92.             {
  93.                 if(isCellLegal(x+i, y+j) == 1)
  94.                 {
  95.                     if(isBomb(Board, x+i, y+j) == 1)
  96.                     {
  97.                         (*bombRevealed)++;
  98.                         \*השורה הזו מחוץ לif כי זה עבור כל תא חוקי *\
  99.                     }
  100.                     Board[x+i][y+j] = 0;
  101.                 }
  102.             }
  103.         }
  104.     }
  105.     return 0;
  106. }
  107.  
  108. int isWinner(int Board[N][M])
  109. {
  110.     int i = 0, j = 0;
  111.     for (i = 0; i < N; i++)
  112.     {
  113.         for(j = 0; j < M; j++)
  114.         {
  115.             if(Board[i][j] != 0 && Board[i][j] != (-1))
  116.             {
  117.                 return 0;
  118.             }
  119.         }
  120.     }
  121.     return 1;
  122. }
  123.  
  124. int playGame(int Board[N][M], int Steps[L], int numOfSteps, int * totalBombsRevealed)
  125. {
  126.     int BombsRevealed = 0, i = 0;
  127.     for(i = 0; i < (numOfSteps * 2); i+=2)
  128.     {
  129.         BombsRevealed = 0;
  130.         if(performStep(Board, Steps[i], Steps[i+1], &BombsRevealed) == (-1))
  131.         {
  132.             return -1;
  133.         }
  134.         *totalBombsRevealed += BombsRevealed;
  135.          if(isWinner(Board) == 1)
  136.         {
  137.             return 1;
  138.         }
  139.     }
  140.     return 0;
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement