Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define N 5
- #define M 5
- #define L 50
- void readBoard(int board[N][M]);
- void readGame(int steps[L], int * numOfSteps);
- int isCellLegal(int x, int y);
- int isBomb(int Board[N][M], int x, int y);
- int performStep(int Board[N][M], int x, int y, int * bombRevealed);
- int isWinner(int Board[N][M]);
- int playGame(int Board[N][M], int Steps[L], int numOfSteps, int * totalBombsRevealed);
- int main()
- {
- int Board[N][M] = {0}, Steps[L] = {0}, numOfSteps = 0, totalBombsRevealed = 0;
- int r;
- readBoard(Board);
- readGame(Steps, &numOfSteps);
- r = playGame(Board, Steps, numOfSteps, &totalBombsRevealed);
- printf("%d\n",r);
- printf("%d\n", totalBombsRevealed);
- return 0;
- }
- void readBoard(int board[N][M])
- {
- int i = 0, j = 0;
- for (i = 0; i < N; i++)
- {
- for (j = 0; j < M; j++)
- {
- scanf("%d", &board[i][j]);
- }
- } /*scanned all the values for the matrix*/
- return;
- }
- void readGame(int steps[L], int* numOfSteps)
- {
- int i,n=0,counter=0;
- for(i=0;i<L;i++)
- {
- scanf("%d",&n);
- if(n==-1)
- {
- steps[i]=n;
- break;
- }
- steps[i]=n;
- counter++;
- }
- *numOfSteps = (counter/2);
- /* established how many steps the game is meant to make and also which matrix cells to open */
- return;
- }
- int isCellLegal(int x, int y)
- {
- if (x >= 0 && x < N && y >= 0 && y < M)
- {
- return 1;
- }
- return 0;
- }
- int isBomb(int Board[N][M], int x, int y)
- {
- if (Board[x][y] == -1)
- {
- return 1;
- }
- return 0;
- }
- int performStep(int Board[N][M], int x, int y, int * bombRevealed)
- {
- int r = 0, i = 0, j = 0;
- if (isBomb(Board, x, y) == 1)
- {
- *bombRevealed = 0;
- Board[x][y] = 0;
- return -1;
- }
- else
- {
- r = Board[x][y];
- for (i = -r; i <= r; i++)
- {
- for (j = -r; j <= r; j++)
- {
- if(isCellLegal(x+i, y+j) == 1)
- {
- if(isBomb(Board, x+i, y+j) == 1)
- {
- (*bombRevealed)++;
- \*השורה הזו מחוץ לif כי זה עבור כל תא חוקי *\
- }
- Board[x+i][y+j] = 0;
- }
- }
- }
- }
- return 0;
- }
- int isWinner(int Board[N][M])
- {
- int i = 0, j = 0;
- for (i = 0; i < N; i++)
- {
- for(j = 0; j < M; j++)
- {
- if(Board[i][j] != 0 && Board[i][j] != (-1))
- {
- return 0;
- }
- }
- }
- return 1;
- }
- int playGame(int Board[N][M], int Steps[L], int numOfSteps, int * totalBombsRevealed)
- {
- int BombsRevealed = 0, i = 0;
- for(i = 0; i < (numOfSteps * 2); i+=2)
- {
- BombsRevealed = 0;
- if(performStep(Board, Steps[i], Steps[i+1], &BombsRevealed) == (-1))
- {
- return -1;
- }
- *totalBombsRevealed += BombsRevealed;
- if(isWinner(Board) == 1)
- {
- return 1;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement