void parseField(char** data, int row, int col){ int i, j; for(i = 1; i <= row; i++){ for(j = 1; j <= col; j++){ if(data[i][j] != '*') data[i][j] = '0' + countMines(data, i, j); } } }
int click (board_t * b, int x, int y) { if (x < 0 || x >= b->width || y < 0 || y >= b->height) { return CLICK_INVALID; } if (b->board[y][x] == KNOWN_MINE) { return CLICK_KNOWN_MINE; } if (b->board[y][x] == HAS_MINE) { return CLICK_LOSE; } if (b->board[y][x] != UNKNOWN) { return CLICK_CONTINUE; } b->board[y][x] = countMines(b,x,y); return CLICK_CONTINUE; }
void board::updateAllTiles() { for(int i=0; i<Row; ++i) { for(int j=0; j<Column; ++j) { if(this->grid[i][j].edge != true) { //should only be done by constructor? this->grid[i][j].adjMines=countMines(i,j); this->grid[i][j].adjQuestions=countQuestions(i,j); this->grid[i][j].adjFlags=countFlags(i,j); this->grid[i][j].adjUnknowns=countUnknowns(i,j); } } } }
void doReveal(board_t * b, int x, int y, int revealMines){ for (int dy = -1; dy <=1 ; dy++) { for (int dx = -1; dx <=1 ; dx++) { int nx = x + dx; int ny = y + dy; if (nx >= 0 && nx < b->width && ny >= 0 && ny < b->height) { if (revealMines) { assert(b->board[ny][nx] != UNKNOWN); if (b->board[ny][nx] == HAS_MINE){ b->board[ny][nx] = KNOWN_MINE; } } else { assert(b->board[ny][nx] != HAS_MINE); if (b->board[ny][nx] == UNKNOWN) { b->board[ny][nx] = countMines(b,nx,ny); } } } } } }
int tipify(char **table, int n, int m, int i, int j) { int tipified = 0, cm; if(i-1 >= 0 && j-1 >= 0) // 1 if(table[i-1][j-1] == '.' || table[i-1][j-1] == 'i' || table[i-1][j-1] == '?') { cm = countMines(table, n, m, i-1, j-1); if(cm == -1) { table[i-1][j-1] = '?'; } else table[i-1][j-1] = cm + '0'; tipified++; } if(i-1 >= 0 && j >= 0) // 2 if(table[i-1][j] == '.' || table[i-1][j] == 'i' || table[i-1][j] == '?') { cm = countMines(table, n, m, i-1, j); if(cm == -1) { table[i-1][j] = '?'; } else table[i-1][j] = cm + '0'; tipified++; } if(i-1 >= 0 && j+1 <= m-1) // 3 if(table[i-1][j+1] == '.' || table[i-1][j+1] == 'i' || table[i-1][j+1] == '?') { cm = countMines(table, n, m, i-1, j+1); if(cm == -1) { table[i-1][j+1] = '?'; } else table[i-1][j+1] = cm + '0'; tipified++; } if(i >= 0 && j+1 <= m-1) // 4 if(table[i][j+1] == '.' || table[i][j+1] == 'i' || table[i][j+1] == '?') { cm = countMines(table, n, m, i, j+1); if(cm == -1) { table[i][j+1] = '?'; } else table[i][j+1] = cm + '0'; tipified++; } if(i+1 <= n-1 && j+1 <= m-1) // 5 if(table[i+1][j+1] == '.' || table[i+1][j+1] == 'i' || table[i+1][j+1] == '?') { cm = countMines(table, n, m, i+1, j+1); if(cm == -1) { table[i+1][j+1] = '?'; } else table[i+1][j+1] = cm + '0'; tipified++; } if(i+1 <= n-1 && j >= 0) // 6 if(table[i+1][j] == '.' || table[i+1][j] == 'i' || table[i+1][j] == '?') { cm = countMines(table, n, m, i+1, j); if(cm == -1) { table[i+1][j] = '?'; } else table[i+1][j] = cm + '0'; tipified++; } if(i+1 <= n-1 && j-1 >= 0) // 7 if(table[i+1][j-1] == '.' || table[i+1][j-1] == 'i' || table[i+1][j-1] == '?') { cm = countMines(table, n, m, i+1, j-1); if(cm == -1) { table[i+1][j-1] = '?'; } else table[i+1][j-1] = cm + '0'; tipified++; } if(i >= 0 && j-1 >= 0) // 8 if(table[i][j-1] == '.' || table[i][j-1] == 'i' || table[i][j-1] == '?') { cm = countMines(table, n, m, i, j-1); if(cm == -1) { table[i][j-1] = '?'; } else table[i][j-1] = cm + '0'; tipified++; } return tipified; }