Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 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. }
  99. Board[x+i][y+j] = 0;
  100. }
  101. }
  102. }
  103. }
  104. return 0;
  105. }
  106.  
  107. int isWinner(int Board[N][M])
  108. {
  109. int i = 0, j = 0;
  110. for (i = 0; i < N; i++)
  111. {
  112. for(j = 0; j < M; j++)
  113. {
  114. if(Board[i][j] != 0 && Board[i][j] != (-1))
  115. {
  116. return 0;
  117. }
  118. }
  119. }
  120. return 1;
  121. }
  122.  
  123. int playGame(int Board[N][M], int Steps[L], int numOfSteps, int * totalBombsRevealed)
  124. {
  125. int BombsRevealed = 0, i = 0;
  126. for(i = 0; i < (numOfSteps * 2); i+=2)
  127. {
  128. BombsRevealed = 0;
  129. if(performStep(Board, Steps[i], Steps[i+1], &BombsRevealed) == (-1))
  130. {
  131. return -1;
  132. }
  133. *totalBombsRevealed += BombsRevealed;
  134. if(isWinner(Board) == 1)
  135. {
  136. return 1;
  137. }
  138. }
  139. return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement