void MGFixedBoard::initBomb(int x0, int y0) { MGBoard::initBomb(x0, y0); // グループ化 grooping(); }
void MGBoard::initBomb(int x0, int y0) { // 爆弾を配置する for (int count = 0; count < bomb; count++) { int x = rand() % sqrNum; int y = rand() % sqrNum; if (board[x][y].Num() != SENTINEL && (x != x0 || y != y0)) { // 爆弾が設置されているところでないなら爆弾を設置 board[x][y].setBomb(); } else { // 設置されていたらcount調整 count--; } } // 設置後周囲の爆弾数をカウントする for (int i = 0; i < sqrNum; i++) { for (int j = 0; j < sqrNum; j++) { // 爆弾のあるところは除外 if (board[i][j].Num() == SENTINEL) continue; // 左上から走査 for (int x = i - 1; x <= i + 1; x++) { for (int y = j - 1; y <= j + 1; y++) { // 盤面外は除外 if (x < 0 || y < 0 || x >= sqrNum || y >= sqrNum) continue; // 爆弾があればnumをインクリメント if (board[x][y].Num() == SENTINEL) { ++board[i][j]; } } } } } // グループ化 grooping(); }