private void InicializarCelulas() { Campo = new Celula[_linhas, _colunas]; for (var linha = 0; linha < _linhas; linha++) for (var coluna = 0; coluna < _colunas; coluna++) Campo[linha, coluna] = new Celula(); }
private void AdicionaCelularAdjacentes(List <Celula> fila, Celula atual) { for (int celulaI = -1; celulaI <= 1; celulaI++) { for (int celulaJ = -1; celulaJ <= 1; celulaJ++) { if (EhPosicaoValida(atual.PosicaoI + celulaI, atual.PosicaoJ + celulaJ)) { if (!this.celulas[atual.PosicaoI + celulaI, atual.PosicaoJ + celulaJ].EstaAberto) { this.celulas[atual.PosicaoI + celulaI, atual.PosicaoJ + celulaJ].EstaAberto = true; fila.Add(this.celulas[atual.PosicaoI + celulaI, atual.PosicaoJ + celulaJ]); } } } } }
public bool DescobriuTodasAsBombas() { int casasSemBombaAbertas = 0; for (int i = 0; i < this.celulas.GetLength(0); i++) { for (int j = 0; j < this.celulas.GetLength(1); j++) { Celula atual = this.celulas[i, j]; if (atual.EstaAberto) { casasSemBombaAbertas++; } } } return(casasSemBombaAbertas == (this.celulas.GetLength(0) * this.celulas.GetLength(1)) - this.numeroDeBombas); }
// Implementado usando busca em largura (BFS) public void AbrirCasasVazias(int i, int j) { List <Celula> fila = new List <Celula>(); int ponteiro = 0; fila.Add(this.celulas[i, j]); this.celulas[i, j].EstaAberto = true; while (ponteiro < fila.Count) { Celula atual = fila[ponteiro]; ponteiro++; if (atual.BombasAdjacentes == 0) { AdicionaCelularAdjacentes(fila, atual); } } }