void 引爆所有地雷() { foreach (Object control in _所属雷场.Controls) { try { 区块 _地雷 = (区块)control; if (_地雷 != this) { _地雷.Image = _地雷.设置区块外观(); } else { _地雷.Image = Properties.Resources.c; } } catch (Exception) {; } } }
void 快速开辟安全区(int 在雷场中的行位置, int 在雷场中的列位置) { if (_已标记的周围邻居数量 == _所属雷场.地雷分布状态[在雷场中的行位置, 在雷场中的列位置]) { foreach (Object control in _所属雷场.Controls) { try { 区块 _区块 = (区块)control; if (_区块.当前状态 == 区块状态.未知 || _区块.当前状态 == 区块状态.可疑) { #region try { //左上角 if (_区块.在雷场中的行位置 - 1 == _在雷场中的行位置 && _区块.在雷场中的列位置 - 1 == _在雷场中的列位置) { _区块.当前状态 = _区块._is地雷 ? 区块状态.爆炸 : 区块状态.安全; } } catch (Exception) { /*坐标越界*/ } try { //正左边 if (_区块.在雷场中的行位置 == _在雷场中的行位置 && _区块.在雷场中的列位置 - 1 == _在雷场中的列位置) { _区块.当前状态 = _区块._is地雷 ? 区块状态.爆炸 : 区块状态.安全; } } catch (Exception) { /*坐标越界*/ } try { //左下角 if (_区块.在雷场中的行位置 + 1 == _在雷场中的行位置 && _区块.在雷场中的列位置 - 1 == _在雷场中的列位置) { _区块.当前状态 = _区块._is地雷 ? 区块状态.爆炸 : 区块状态.安全; } } catch (Exception) { /*坐标越界*/ } try { //正上方 if (_区块.在雷场中的行位置 - 1 == _在雷场中的行位置 && _区块.在雷场中的列位置 == _在雷场中的列位置) { _区块.当前状态 = _区块._is地雷 ? 区块状态.爆炸 : 区块状态.安全; } } catch (Exception) { /*坐标越界*/ } try { //正下方 if (_区块.在雷场中的行位置 + 1 == _在雷场中的行位置 && _区块.在雷场中的列位置 == _在雷场中的列位置) { _区块.当前状态 = _区块._is地雷 ? 区块状态.爆炸 : 区块状态.安全; } } catch (Exception) { /*坐标越界*/ } try { //右上角 if (_区块.在雷场中的行位置 - 1 == _在雷场中的行位置 && _区块.在雷场中的列位置 + 1 == _在雷场中的列位置) { _区块.当前状态 = _区块._is地雷 ? 区块状态.爆炸 : 区块状态.安全; } } catch (Exception) { /*坐标越界*/ } try { //正右边 if (_区块.在雷场中的行位置 == _在雷场中的行位置 && _区块.在雷场中的列位置 + 1 == _在雷场中的列位置) { _区块.当前状态 = _区块._is地雷 ? 区块状态.爆炸 : 区块状态.安全; } } catch (Exception) { /*坐标越界*/ } try { //右下角 if (_区块.在雷场中的行位置 + 1 == _在雷场中的行位置 && _区块.在雷场中的列位置 + 1 == _在雷场中的列位置) { _区块.当前状态 = _区块._is地雷 ? 区块状态.爆炸 : 区块状态.安全; } } catch (Exception) { /*坐标越界*/ } #endregion } } catch (Exception) {; } } } }
void 修改周围区块的已标记数量(int 在雷场中的行位置, int 在雷场中的列位置, Boolean 是否增) { foreach (Object control in _所属雷场.Controls) { try { 区块 _区块 = (区块)control; if (!_区块._is地雷) { #region try { //左上角 if (_区块.在雷场中的行位置 - 1 == 在雷场中的行位置 && _区块.在雷场中的列位置 - 1 == 在雷场中的列位置) { _区块._已标记的周围邻居数量 += 是否增?1:-1; } } catch (Exception) { /*坐标越界*/ } try { //正左边 if (_区块.在雷场中的行位置 == 在雷场中的行位置 && _区块.在雷场中的列位置 - 1 == 在雷场中的列位置) { _区块._已标记的周围邻居数量 += 是否增 ? 1 : -1; } } catch (Exception) { /*坐标越界*/ } try { //左下角 if (_区块.在雷场中的行位置 + 1 == 在雷场中的行位置 && _区块.在雷场中的列位置 - 1 == 在雷场中的列位置) { _区块._已标记的周围邻居数量 += 是否增 ? 1 : -1; } } catch (Exception) { /*坐标越界*/ } try { //正上方 if (_区块.在雷场中的行位置 - 1 == 在雷场中的行位置 && _区块.在雷场中的列位置 == 在雷场中的列位置) { _区块._已标记的周围邻居数量 += 是否增 ? 1 : -1; } } catch (Exception) { /*坐标越界*/ } try { //正下方 if (_区块.在雷场中的行位置 + 1 == 在雷场中的行位置 && _区块.在雷场中的列位置 == 在雷场中的列位置) { _区块._已标记的周围邻居数量 += 是否增 ? 1 : -1; } } catch (Exception) { /*坐标越界*/ } try { //右上角 if (_区块.在雷场中的行位置 - 1 == 在雷场中的行位置 && _区块.在雷场中的列位置 + 1 == 在雷场中的列位置) { _区块._已标记的周围邻居数量 += 是否增 ? 1 : -1; } } catch (Exception) { /*坐标越界*/ } try { //正右边 if (_区块.在雷场中的行位置 == 在雷场中的行位置 && _区块.在雷场中的列位置 + 1 == 在雷场中的列位置) { _区块._已标记的周围邻居数量 += 是否增 ? 1 : -1; } } catch (Exception) { /*坐标越界*/ } try { //右下角 if (_区块.在雷场中的行位置 + 1 == 在雷场中的行位置 && _区块.在雷场中的列位置 + 1 == 在雷场中的列位置) { _区块._已标记的周围邻居数量 += 是否增 ? 1 : -1; } } catch (Exception) { /*坐标越界*/ } #endregion } } catch (Exception) {; } } }