Пример #1
0
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;
}
Пример #3
0
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);
	  }
	}
      }
    }
  }
}
Пример #5
0
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;
}