Example #1
0
void MGFixedBoard::initBomb(int x0, int y0)
{
	MGBoard::initBomb(x0, y0);

	// グループ化
	grooping();
}
Example #2
0
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();
}